master 4a41565ba980 cached
183 files
2.4 MB
653.1k tokens
948 symbols
1 requests
Download .txt
Showing preview only (2,682K chars total). Download the full file or copy to clipboard to get everything.
Repository: ZetaSp/PowerToys-Chinese-TransMOD
Branch: master
Commit: 4a41565ba980
Files: 183
Total size: 2.4 MB

Directory structure:
gitextract_lcydtlch/

├── LICENSE
├── Patcher/
│   ├── 安装.CMD
│   └── 安装组策略.cmd
├── PowerToys/
│   ├── global.json
│   └── src/
│       ├── ActionRunner/
│       │   └── Resources.resx
│       ├── Monaco/
│       │   └── index.html
│       ├── Update/
│       │   └── Resources.resx
│       ├── Version.props
│       ├── common/
│       │   ├── interop/
│       │   │   └── keyboard_layout.cpp
│       │   └── sysinternals/
│       │       └── Eula/
│       │           └── eula.c
│       ├── gpo/
│       │   └── assets/
│       │       └── zh-CN/
│       │           └── PowerToys.adml
│       ├── modules/
│       │   ├── AdvancedPaste/
│       │   │   └── AdvancedPaste/
│       │   │       └── Strings/
│       │   │           └── en-us/
│       │   │               └── Resources.resw
│       │   ├── CropAndLock/
│       │   │   └── CropAndLock/
│       │   │       └── main.cpp
│       │   ├── EnvironmentVariables/
│       │   │   └── EnvironmentVariablesUILib/
│       │   │       └── Strings/
│       │   │           └── en-us/
│       │   │               └── Resources.resw
│       │   ├── FileLocksmith/
│       │   │   ├── FileLocksmithContextMenu/
│       │   │   │   ├── Resources.resx
│       │   │   │   └── dllmain.cpp
│       │   │   ├── FileLocksmithExt/
│       │   │   │   └── Resources.resx
│       │   │   └── FileLocksmithUI/
│       │   │       └── Strings/
│       │   │           └── en-us/
│       │   │               └── Resources.resw
│       │   ├── Hosts/
│       │   │   └── HostsUILib/
│       │   │       └── Strings/
│       │   │           └── en-us/
│       │   │               └── Resources.resw
│       │   ├── MeasureTool/
│       │   │   └── MeasureToolUI/
│       │   │       └── Strings/
│       │   │           └── en-us/
│       │   │               └── Resources.resw
│       │   ├── MouseWithoutBorders/
│       │   │   ├── App/
│       │   │   │   ├── Class/
│       │   │   │   │   ├── Common.Clipboard.cs
│       │   │   │   │   ├── Common.Encryption.cs
│       │   │   │   │   ├── Common.Event.cs
│       │   │   │   │   ├── Common.Helper.cs
│       │   │   │   │   ├── Common.MachineStuff.cs
│       │   │   │   │   ├── Common.Service.cs
│       │   │   │   │   ├── EasyMouseOption.cs
│       │   │   │   │   ├── Extensions.cs
│       │   │   │   │   ├── IClipboardHelper.cs
│       │   │   │   │   ├── InputHook.cs
│       │   │   │   │   ├── Program.cs
│       │   │   │   │   └── SocketStuff.cs
│       │   │   │   ├── Control/
│       │   │   │   │   ├── Machine.cs
│       │   │   │   │   └── Machine.designer.cs
│       │   │   │   ├── Core/
│       │   │   │   │   └── Receiver.cs
│       │   │   │   ├── Form/
│       │   │   │   │   ├── Settings/
│       │   │   │   │   │   ├── SettingsFormPage.Designer.cs
│       │   │   │   │   │   ├── SettingsFormPage.cs
│       │   │   │   │   │   ├── SetupPage1.Designer.cs
│       │   │   │   │   │   ├── SetupPage2a.Designer.cs
│       │   │   │   │   │   ├── SetupPage2aa.Designer.cs
│       │   │   │   │   │   ├── SetupPage2ab.Designer.cs
│       │   │   │   │   │   ├── SetupPage2b.Designer.cs
│       │   │   │   │   │   ├── SetupPage3a.Designer.cs
│       │   │   │   │   │   ├── SetupPage3a.cs
│       │   │   │   │   │   ├── SetupPage4.Designer.cs
│       │   │   │   │   │   └── SetupPage5.Designer.cs
│       │   │   │   │   ├── frmAbout.Designer.cs
│       │   │   │   │   ├── frmAbout.cs
│       │   │   │   │   ├── frmInputCallback.cs
│       │   │   │   │   ├── frmLogon.Designer.cs
│       │   │   │   │   ├── frmMatrix.Designer.cs
│       │   │   │   │   ├── frmMatrix.cs
│       │   │   │   │   ├── frmMatrix.resx
│       │   │   │   │   ├── frmMessage.Designer.cs
│       │   │   │   │   ├── frmScreen.Designer.cs
│       │   │   │   │   └── frmScreen.cs
│       │   │   │   └── Helper/
│       │   │   │       └── FormHelper.cs
│       │   │   └── ModuleInterface/
│       │   │       └── dllmain.cpp
│       │   ├── NewPlus/
│       │   │   ├── NewShellExtensionContextMenu/
│       │   │   │   ├── NewShellExtensionContextMenu.vcxproj
│       │   │   │   ├── NewShellExtensionContextMenu.vcxproj.filters
│       │   │   │   ├── TemplateExamples/
│       │   │   │   │   ├── 模板文件夹里的一切都会出现在新建+菜单中.txt
│       │   │   │   │   └── 示例文件夹/
│       │   │   │   │       ├── 另一个示例文本文件.txt
│       │   │   │   │       └── 示例文本文件.txt
│       │   │   │   └── resources.resx
│       │   │   └── NewShellExtensionContextMenu.win10/
│       │   │       └── resources.resx
│       │   ├── PowerOCR/
│       │   │   └── PowerOCR/
│       │   │       └── Properties/
│       │   │           └── Resources.resx
│       │   ├── ShortcutGuide/
│       │   │   └── ShortcutGuide/
│       │   │       └── Resources.resx
│       │   ├── Workspaces/
│       │   │   ├── WorkspacesEditor/
│       │   │   │   ├── Models/
│       │   │   │   │   └── Project.cs
│       │   │   │   └── Properties/
│       │   │   │       └── Resources.resx
│       │   │   ├── WorkspacesLauncher/
│       │   │   │   └── Resource.resx
│       │   │   ├── WorkspacesLauncherUI/
│       │   │   │   └── Properties/
│       │   │   │       └── Resources.resx
│       │   │   └── WorkspacesSnapshotTool/
│       │   │       └── Resource.resx
│       │   ├── ZoomIt/
│       │   │   └── ZoomIt/
│       │   │       ├── ZoomIt.rc
│       │   │       └── Zoomit.cpp
│       │   ├── alwaysontop/
│       │   │   └── AlwaysOnTop/
│       │   │       └── Resources.resx
│       │   ├── awake/
│       │   │   └── Awake/
│       │   │       ├── Core/
│       │   │       │   └── Constants.cs
│       │   │       └── Properties/
│       │   │           └── Resources.resx
│       │   ├── colorPicker/
│       │   │   └── ColorPickerUI/
│       │   │       ├── Properties/
│       │   │       │   └── Resources.resx
│       │   │       └── ViewModels/
│       │   │           └── ColorEditorViewModel.cs
│       │   ├── fancyzones/
│       │   │   ├── FancyZonesLib/
│       │   │   │   └── Resources.resx
│       │   │   └── editor/
│       │   │       └── FancyZonesEditor/
│       │   │           └── Properties/
│       │   │               └── Resources.resx
│       │   ├── imageresizer/
│       │   │   ├── ImageResizerContextMenu/
│       │   │   │   └── Resources.resx
│       │   │   ├── dll/
│       │   │   │   └── Resources.resx
│       │   │   └── ui/
│       │   │       ├── Properties/
│       │   │       │   └── Resources.resx
│       │   │       └── Views/
│       │   │           ├── EnumValueConverter.cs
│       │   │           └── InputPage.xaml
│       │   ├── keyboardmanager/
│       │   │   ├── KeyboardManagerEditor/
│       │   │   │   └── Resources.resx
│       │   │   └── KeyboardManagerEngineLibrary/
│       │   │       └── KeyboardEventHandlers.cpp
│       │   ├── launcher/
│       │   │   ├── Plugins/
│       │   │   │   ├── Community.PowerToys.Run.Plugin.UnitConverter/
│       │   │   │   │   ├── InputInterpreter.cs
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Community.PowerToys.Run.Plugin.VSCodeWorkspaces/
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Community.PowerToys.Run.Plugin.ValueGenerator/
│       │   │   │   │   ├── Generators/
│       │   │   │   │   │   ├── Base64/
│       │   │   │   │   │   │   ├── Base64DecodeRequest.cs
│       │   │   │   │   │   │   └── Base64Request.cs
│       │   │   │   │   │   ├── GUID/
│       │   │   │   │   │   │   └── GUIDRequest.cs
│       │   │   │   │   │   └── Uri/
│       │   │   │   │   │       ├── DataEscapeRequest.cs
│       │   │   │   │   │       ├── DataUnescapeRequest.cs
│       │   │   │   │   │       ├── HexEscapeRequest.cs
│       │   │   │   │   │       ├── HexUnescapeRequest.cs
│       │   │   │   │   │       ├── UrlDecodeRequest.cs
│       │   │   │   │   │       └── UrlEncodeRequest.cs
│       │   │   │   │   ├── InputParser.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Community.PowerToys.Run.Plugin.WebSearch/
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.Plugin.Folder/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.Plugin.Indexer/
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.Plugin.Program/
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   ├── Programs/
│       │   │   │   │   │   └── UWPApplication.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.Plugin.Shell/
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.Plugin.Uri/
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.Plugin.WindowWalker/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.Calculator/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.History/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.OneNote/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.PowerToys/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.Registry/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.Service/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.System/
│       │   │   │   │   ├── Components/
│       │   │   │   │   │   └── ResultHelper.cs
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.TimeDate/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.WindowsSettings/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   └── Microsoft.PowerToys.Run.Plugin.WindowsTerminal/
│       │   │   │       ├── Main.cs
│       │   │   │       └── Properties/
│       │   │   │           └── Resources.resx
│       │   │   └── PowerLauncher/
│       │   │       └── Properties/
│       │   │           └── Resources.resx
│       │   ├── peek/
│       │   │   └── Peek.UI/
│       │   │       └── Strings/
│       │   │           └── en-us/
│       │   │               └── Resources.resw
│       │   ├── powerrename/
│       │   │   ├── PowerRenameContextMenu/
│       │   │   │   └── Resources.resx
│       │   │   ├── PowerRenameUILib/
│       │   │   │   ├── PowerRenameXAML/
│       │   │   │   │   └── MainWindow.xaml.cpp
│       │   │   │   └── Strings/
│       │   │   │       └── en-us/
│       │   │   │           └── Resources.resw
│       │   │   └── dll/
│       │   │       └── Resources.resx
│       │   ├── previewpane/
│       │   │   ├── GcodePreviewHandler/
│       │   │   │   └── Properties/
│       │   │   │       └── Resource.resx
│       │   │   ├── MarkdownPreviewHandler/
│       │   │   │   └── Properties/
│       │   │   │       └── Resources.resx
│       │   │   ├── MonacoPreviewHandler/
│       │   │   │   └── Properties/
│       │   │   │       └── Resources.resx
│       │   │   ├── PdfPreviewHandler/
│       │   │   │   └── Properties/
│       │   │   │       └── Resources.resx
│       │   │   ├── QoiPreviewHandler/
│       │   │   │   └── Properties/
│       │   │   │       └── Resource.resx
│       │   │   ├── SvgPreviewHandler/
│       │   │   │   └── Properties/
│       │   │   │       └── Resource.resx
│       │   │   └── powerpreview/
│       │   │       └── Resources.resx
│       │   └── registrypreview/
│       │       ├── RegistryPreview/
│       │       │   └── RegistryPreviewXAML/
│       │       │       └── MainWindow.xaml.cs
│       │       └── RegistryPreviewUILib/
│       │           └── Strings/
│       │               └── en-US/
│       │                   └── Resources.resw
│       ├── runner/
│       │   ├── Resources.resx
│       │   └── main.cpp
│       └── settings-ui/
│           ├── Settings.UI/
│           │   ├── Assets/
│           │   │   └── Settings/
│           │   │       └── Scripts/
│           │   │           ├── CheckCmdNotFoundRequirements.ps1
│           │   │           ├── DisableModule.ps1
│           │   │           ├── EnableModule.ps1
│           │   │           ├── InstallPowerShell7.ps1
│           │   │           └── InstallWinGetClientModule.ps1
│           │   ├── Converters/
│           │   │   └── ZoomItTypeSpeedSliderConverter.cs
│           │   ├── SettingsXAML/
│           │   │   ├── App.xaml.cs
│           │   │   ├── OOBE/
│           │   │   │   └── Views/
│           │   │   │       ├── OobeShellPage.xaml
│           │   │   │       └── OobeShellPage.xaml.cs
│           │   │   └── Views/
│           │   │       ├── ColorPickerPage.xaml
│           │   │       ├── ImageResizerPage.xaml
│           │   │       ├── MouseUtilsPage.xaml
│           │   │       ├── MouseWithoutBordersPage.xaml
│           │   │       ├── PowerLauncherPage.xaml
│           │   │       ├── PowerOcrPage.xaml
│           │   │       ├── PowerPreviewPage.xaml
│           │   │       ├── PowerRenamePage.xaml
│           │   │       └── ZoomItPage.xaml
│           │   ├── Strings/
│           │   │   └── en-us/
│           │   │       └── Resources.resw
│           │   └── ViewModels/
│           │       ├── CmdNotFoundViewModel.cs
│           │       ├── DashboardViewModel.cs
│           │       └── PowerAccentViewModel.cs
│           └── Settings.UI.Library/
│               └── ColorFormatModel.cs
├── README.md
└── Tools/
    ├── README.md
    ├── autosort.py
    ├── autosort_newgptbroken.py
    ├── autosort_old.py
    ├── blank
    ├── clean.cmd
    ├── clean.txt
    ├── modify.cmd
    ├── modify_arm64.cmd
    ├── zhcn_modify_list.txt
    ├── zhcn_modify_list2.txt
    └── zhcn_modify_list2.txt.bak

================================================
FILE CONTENTS
================================================

================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2022 Zetaspace

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: Patcher/安装.CMD
================================================
@echo off
chcp 65001>nul
color f0
if not exist "%~dp0组策略文件\安装组策略.cmd" echo 检测到文件缺失,请解压后运行!&pause&exit
echo 请允许管理员权限以便安装,谢谢。
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
cd /d %~dp0
mode con cols=20 lines=10

for /f "tokens=2 delims= " %%i in ('dir /b^|findstr PowerToys') do set modver=%%i
set modfulver=%modver%
set softname=PowerToys

title 修改 %softname%
for /l %%i in (1,20,40) do mode con cols=20 lines=%%i
for /l %%i in (20,40,160) do mode con cols=%%i lines=40
:start
color f0
msg %username% /time:1 /v /w 欢迎使用 Zetaloop 的 %softname% 修改!>nul
color 07

for /f "skip=2 tokens=2,*" %%a in ('reg query "HKCR\powertoys\shell\open\command"') do set ptpath=%%b
if %errorlevel%==1 echo 警告:找不到注册表信息!你可能未安装 %softname%&set /p =请按任意键退出. . . &exit
set ptpath=%ptpath:~1,-6%
for /f "delims=" %%a in ('echo %ptpath%') do set installpath=%%~dpa
for /f "usebackq delims=" %%a in (`mshta vbscript:CreateObject("Scripting.FileSystemObject"^).GetStandardStream(1^).WriteLine(CStr(CreateObject("Scripting.FileSystemObject"^).GetFileVersion("%ptpath%"^)^)^)(window.close^)`) do set installver=%%a
for /f "tokens=1,2,3 delims=." %%a in ('echo %installver%') do set installver=%%a.%%b.%%c
echo.
echo 修改包版本 %modfulver%
echo %softname% 版本 %installver%
if not "%modfulver%"=="%installver%" echo ·警告:汉化包版本不对应!&msg %username% /v /w 警告:汉化包版本不对应,强行安装可能导致报错闪退!>nul
echo.
echo 安装目录 %installpath%
if not exist "%installpath%PowerToys.exe" echo 警告:安装目录检测失败! %&set /p =请按任意键退出. . . &exi
echo.
echo 安装过程:
::
echo ·解除安装目录的占用
::
echo ·复制汉化文件到软件目录
echo.
echo 为解除文件占用,将会重启 Windows 资源管理器
echo ---------------------------------------------------
choice /c thequickbrownfxjmpsvlazydg /n /m "确认无误后,按下 Y 开始:"
if %errorlevel%==24 goto install
::if %errorlevel%==22 goto installarm64
echo 取消安装。退出安装器...
choice /t 1 /d n >nul
exit

:installarm64
set modver=%modver% ARM64

:install
echo 开始安装!
if exist "%tmp%\PowerToys.NewPlus.ShellExtension.dll_*" del "%tmp%\PowerToys.NewPlus.ShellExtension.dll_*"
if exist "%tmp%\PowerToys.FileLocksmithExt.dll_*" del "%tmp%\PowerToys.FileLocksmithExt.dll_*"
if exist "%tmp%\PowerToys.FileLocksmithContextMenu.dll_*" del "%tmp%\PowerToys.FileLocksmithContextMenu.dll_*"
if exist "%tmp%\PowerToys.PowerRenameExt.dll_*" del "%tmp%\PowerToys.PowerRenameExt.dll_*"
if exist "%tmp%\PowerToys.PowerRenameContextMenu.dll_*" del "%tmp%\PowerToys.PowerRenameContextMenu.dll_*"
if exist "%tmp%\PowerToys.RegistryPreviewExt.dll_*" del "%tmp%\PowerToys.RegistryPreviewExt.dll_*"
if exist "%tmp%\PowerToys.ImageResizerExt.dll_*" del "%tmp%\PowerToys.ImageResizerExt.dll_*"
:chcp 936>nul
call :killpt
rmdir /s /q %installpath%WinUI3Apps\Assets\NewPlus\Templates
xcopy ".\%softname% %modver%\*" "%installpath%" /e /y
if %errorlevel%==0 goto success
echo 尝试解锁...
taskkill /f /im explorer.exe
rmdir /s /q %installpath%WinUI3Apps\Assets\NewPlus\Templates
xcopy ".\%softname% %modver%\*" "%installpath%" /e /y
if %errorlevel%==0 start explorer&goto success
start explorer
echo 尝试移走一些文件...
echo 这些文件放到了系统临时文件夹。
::
echo 你可能需要重启电脑来使汉化生效。
::
if exist "%tmp%\PowerToys.NewPlus.ShellExtension.dll_*" del "%tmp%\PowerToys.NewPlus.ShellExtension.dll_*"
if exist "%installpath%WinUI3Apps\PowerToys.NewPlus.ShellExtension.dll" move "%installpath%WinUI3Apps\PowerToys.NewPlus.ShellExtension.dll" "%tmp%\PowerToys.NewPlus.ShellExtension.dll_%random%.tmp"
if exist "%tmp%\PowerToys.FileLocksmithExt.dll_*" del "%tmp%\PowerToys.FileLocksmithExt.dll_*"
if exist "%installpath%WinUI3Apps\PowerToys.FileLocksmithExt.dll" move "%installpath%WinUI3Apps\PowerToys.FileLocksmithExt.dll" "%tmp%\PowerToys.FileLocksmithExt.dll_%random%.tmp"
if exist "%tmp%\PowerToys.FileLocksmithContextMenu.dll_*" del "%tmp%\PowerToys.FileLocksmithContextMenu.dll_*"
if exist "%installpath%WinUI3Apps\PowerToys.FileLocksmithContextMenu.dll" move "%installpath%WinUI3Apps\PowerToys.FileLocksmithContextMenu.dll" "%tmp%\PowerToys.FileLocksmithContextMenu.dll_%random%.tmp"
if exist "%tmp%\PowerToys.PowerRenameExt.dll_*" del "%tmp%\PowerToys.PowerRenameExt.dll_*"
if exist "%installpath%WinUI3Apps\PowerToys.PowerRenameExt.dll" move "%installpath%WinUI3Apps\PowerToys.PowerRenameExt.dll" "%tmp%\PowerToys.PowerRenameExt.dll_%random%.tmp"
if exist "%tmp%\PowerToys.PowerRenameContextMenu.dll_*" del "%tmp%\PowerToys.PowerRenameContextMenu.dll_*"
if exist "%installpath%WinUI3Apps\PowerToys.PowerRenameContextMenu.dll" move "%installpath%WinUI3Apps\PowerToys.PowerRenameContextMenu.dll" "%tmp%\PowerToys.PowerRenameContextMenu.dll_%random%.tmp"
if exist "%tmp%\PowerToys.RegistryPreviewExt.dll_*" del "%tmp%\PowerToys.RegistryPreviewExt.dll_*"
if exist "%installpath%WinUI3Apps\PowerToys.RegistryPreviewExt.dll" move "%installpath%WinUI3Apps\PowerToys.RegistryPreviewExt.dll" "%tmp%\PowerToys.RegistryPreviewExt.dll_%random%.tmp"
if exist "%tmp%\PowerToys.ImageResizerExt.dll_*" del "%tmp%\PowerToys.ImageResizerExt.dll_*"
if exist "%installpath%PowerToys.ImageResizerExt.dll" move "%installpath%PowerToys.ImageResizerExt.dll" "%tmp%\PowerToys.ImageResizerExt.dll_%random%.tmp"
echo 再试一次...
echo.
echo.
call :killpt
rmdir /s /q %installpath%WinUI3Apps\Assets\NewPlus\Templates
xcopy ".\%softname% %modver%\*" "%installpath%" /e /y
if %errorlevel%==0 goto success
echo 尝试解锁...
taskkill /f /im explorer.exe
rmdir /s /q %installpath%WinUI3Apps\Assets\NewPlus\Templates
xcopy ".\%softname% %modver%\*" "%installpath%" /e /y
if %errorlevel%==0 start explorer&goto success
start explorer
echo 安装失败!未能解除文件占用,请尝试手动复制,或重启后再试。
::
msg %username% /time:2 /v /w 安装失败!未能解除文件占用,请尝试手动复制,或重启后再试。>nul
set /p =请按任意键退出. . . &exit
goto :eof

:success
echo 重启文件资源管理器以加载汉化右键菜单
::
powershell exit
taskkill /f /im explorer.exe>nul 2>nul
taskkill /f /im explorer.exe>nul 2>nul
taskkill /f /im explorer.exe>nul 2>nul
powershell exit
start explorer
powershell exit
echo 启动 PowerToys
mshta vbscript:CreateObject("Shell.Application").ShellExecute("%installpath%PowerToys.exe","","","runas",1)(window.close)
powershell exit
echo 打开 PowerToys 设置
mshta vbscript:CreateObject("Shell.Application").ShellExecute("%installpath%PowerToys.exe","","","runas",1)(window.close)
powershell exit
echo 安装完成
:: Powershell 用于提供一个恰当的启动延迟
::
msg %username% /time:2 /v /w 安装完成!>nul
goto :eof

:killpt
taskkill /F /IM "PowerToys*"
taskkill /F /IM "PowerToys*"
goto :eof

================================================
FILE: Patcher/安装组策略.cmd
================================================
chcp 65001>nul
@echo off
echo 正在安装 PowerToys 组策略...
%1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&goto :eOF
cd /d %~dp0
xcopy /Y /I /E ".\PowerToys.admx" "%systemroot%\PolicyDefinitions\"
xcopy /Y /I /E ".\zh-CN\PowerToys.adml" "%systemroot%\PolicyDefinitions\zh-CN\"
xcopy /Y /I /E ".\en-US\PowerToys.adml" "%systemroot%\PolicyDefinitions\en-US\"
msg %username% 安装完成

================================================
FILE: PowerToys/global.json
================================================
{
  "sdk": {
    "allowPrerelease": false
  }
}

================================================
FILE: PowerToys/src/ActionRunner/Resources.resx
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="DOTNET_CORE_DOWNLOAD_FAILURE" xml:space="preserve">
    <value>无法下载 .NET Core Desktop Runtime 3.1,请自行安装。</value>
  </data>
  <data name="DOTNET_CORE_DOWNLOAD_FAILURE_TITLE" xml:space="preserve">
    <value>PowerToys 安装错误</value>
  </data>
  <data name="GITHUB_NEW_VERSION_AVAILABLE_OFFER_VISIT" xml:space="preserve">
    <value>PowerToys 有版本更新。请访问 GitHub 页面下载。</value>
  </data>
</root>


================================================
FILE: PowerToys/src/Monaco/index.html
================================================
<!doctype HTML>
<html>
<head>
    <script>
        // Set variables

        // Get URL parameters:
        // `code` contains the code of the file in base64 encoded
        // `theme` can be "vs" for light theme or "vs-dark" for dark theme
        // `lang` is the language of the file
        // `wrap` if the editor is wrapping or not
        // `minimap` if the minimap is shown
        // `contextMenu` whether to use the Monaco context menu. The built-in context menu
        //               doesn't work in Peek, so we set this to false and create a custom one

        var theme = ("[[PT_THEME]]" == "dark") ? "vs-dark" : "vs";
        var wrap = [[PT_WRAP]];
        var minimap = [[PT_MINIMAP]];
        var stickyScroll = [[PT_STICKY_SCROLL]];
        var fontSize = [[PT_FONT_SIZE]];
        
        var lang = "[[PT_LANG]]";
        var base64code = "[[PT_CODE]]";
        var contextMenu = [[PT_CONTEXTMENU]];

        var editor;

        // Code taken from https://stackoverflow.com/a/30106551/14774889
        var code = decodeURIComponent(atob(base64code).split('').map(function (c) {
            return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
        }).join(''));

        function runToggleTextWrapCommand() {
            wrap = !wrap;
            editor.updateOptions({ wordWrap: wrap ? 'on' : 'off' });
        }

        function runToggleMinimap() {
            minimap = !minimap;
            editor.updateOptions({minimap: {enabled: minimap}});
        }

        function runCopyCommand() {
            editor.focus();
            document.execCommand('copy');
        }

    </script>
    <!-- Set browser to Edge-->
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <!-- Set charset -->
    <meta charset="utf-8" />
    <!-- Title (normally not displayed)-->
    <title>Previewer for developer Files</title>
    <style>
        /* Fits content to window size */
        html, body {
            padding: 0;
        }

        #container, .monaco-editor {
            position: fixed;
            height: 100%;
            left: 0;
            top: 0;
            right: 0;
            bottom: 0;
        }

        .overflowingContentWidgets {
            /*Hides alert box */
            display: none !important
        }
    </style>
</head>

<body>
    <!-- Container for the editor -->
    <div id="container"></div>
    <!-- Script -->
    <script src="http://[[PT_URL]]/monacoSRC/min/vs/loader.js"></script>
    <script src="http://[[PT_URL]]/monacoSpecialLanguages.js" type="module"></script>
    <script type="module">
        import { registerAdditionalLanguages } from 'http://[[PT_URL]]/monacoSpecialLanguages.js';
        import { customTokenThemeRules } from 'http://[[PT_URL]]/customTokenThemeRules.js';
        require.config({ paths: { vs: 'http://[[PT_URL]]/monacoSRC/min/vs' } });
        require(['vs/editor/editor.main'], async function () {
            await registerAdditionalLanguages(monaco)

            // Creates a theme to handle custom tokens
            monaco.editor.defineTheme('theme', {
                base: theme, // Sets the base theme to "vs" or "vs-dark" depending on the user's preference
                inherit: true,
                rules: customTokenThemeRules,
                colors: {} // `colors` is a required attribute
            });

            // Creates the editor
            // For all parameters: https://microsoft.github.io/monaco-editor/typedoc/interfaces/editor.IStandaloneEditorConstructionOptions.html
            editor = monaco.editor.create(document.getElementById('container'), {
                value: code, // Sets content of the editor
                language: lang, // Sets language of the code
                readOnly: true, // Sets to readonly
                theme: 'theme', // Sets editor theme
                minimap: { enabled: minimap }, // Controls if minimap is shown
                lineNumbersMinChars: 3, // Width of the line numbers
                contextmenu: contextMenu,
                scrollbar: {
                    // Deactivate shadows
                    shadows: false,

                    // Render scrollbar automatically
                    vertical: 'auto',
                    horizontal: 'auto',
                },
                stickyScroll: { enabled: stickyScroll },
                fontSize: fontSize,
                wordWrap: (wrap ? 'on' : 'off') // Word wraps
            });
            window.onresize = () => {
                editor.layout();
            };

            // Add toggle wrap button to context menu
            editor.addAction({
                id: 'text-wrap',

                label: '自动换行',

                // A precondition for this action.
                precondition: null,

                // A rule to evaluate on top of the precondition in order to dispatch the keybindings.
                keybindingContext: null,

                contextMenuGroupId: 'cutcopypaste',

                contextMenuOrder: 100,

                // Method that will be executed when the action is triggered.
                run: runToggleTextWrapCommand
            });

            editor.addAction({
                id: 'toggle-minimap',

                label: '小地图',

                contextMenuGroupId: 'cutcopypaste',

                contextMenuOrder: 100,

                // Method that will be executed when the action is triggered.
                run: runToggleMinimap
            });

            onContextMenu();
        });

        function onContextMenu() {
            // Hide context menu items
            // Code modified from https://stackoverflow.com/questions/48745208/disable-cut-and-copy-in-context-menu-in-monaco-editor/65413517#65413517
            let menus = require('vs/platform/actions/common/actions').MenuRegistry._menuItems
            let contextMenuEntry = [...menus].find(entry => entry[0].id == 'EditorContext')
            let contextMenuLinks = contextMenuEntry[1]

            let removableIds = ['editor.action.clipboardCutAction', 'editor.action.formatDocument', 'editor.action.formatSelection', 'editor.action.quickCommand', 'editor.action.quickOutline', 'editor.action.refactor', 'editor.action.sourceAction', 'editor.action.rename', undefined, 'editor.action.revealDefinition', 'editor.action.revealDeclaration', 'editor.action.goToTypeDefinition', 'editor.action.goToImplementation', 'editor.action.goToReferences', 'editor.action.changeAll']

            let removeById = (list, ids) => {
                let node = list._first
                do {
                    if (node.element == undefined) break;
                    let shouldRemove = ids.includes(node.element?.command?.id)
                    if (shouldRemove) { list._remove(node) }
                } while ((node = node.next))
            }

            removeById(contextMenuLinks, removableIds)
        }
    </script>
</body>
</html>

================================================
FILE: PowerToys/src/Update/Resources.resx
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="DOTNET_CORE_DOWNLOAD_FAILURE" xml:space="preserve">
    <value>无法下载 .NET Core Desktop Runtime 3.1,请自行安装。</value>
  </data>
  <data name="DOTNET_CORE_DOWNLOAD_FAILURE_TITLE" xml:space="preserve">
    <value>PowerToys 安装错误</value>
  </data>
  <data name="GITHUB_NEW_VERSION_AVAILABLE" xml:space="preserve">
    <value>PowerToys 有版本更新。</value>
  </data>
  <data name="GITHUB_NEW_VERSION_UPDATE_NOW" xml:space="preserve">
    <value>立刻更新</value>
  </data>
  <data name="GITHUB_NEW_VERSION_AVAILABLE_OFFER_VISIT" xml:space="preserve">
    <value>PowerToys 有版本更新。请访问 GitHub 页面下载。</value>
  </data>
  <data name="GITHUB_NEW_VERSION_MORE_INFO" xml:space="preserve">
    <value>更多信息</value>
  </data>
  <data name="TOAST_TITLE" xml:space="preserve">
    <value>PowerToys 更新</value>
  </data>
</root>

================================================
FILE: PowerToys/src/Version.props
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <Version>0.88.0</Version>

    <!-- Forcing for every DLL on by default -->
    <ChecksumAlgorithm>SHA256</ChecksumAlgorithm>
  </PropertyGroup>
</Project>


================================================
FILE: PowerToys/src/common/interop/keyboard_layout.cpp
================================================
#include "pch.h"
#include <array>
#include <algorithm>

#include "keyboard_layout_impl.h"
#include "shared_constants.h"

constexpr DWORD numpadOriginBit = 1ull << 31;

LayoutMap::LayoutMap() :
    impl(new LayoutMap::LayoutMapImpl())
{
}

LayoutMap::~LayoutMap()
{
    delete impl;
}

void LayoutMap::UpdateLayout()
{
    impl->UpdateLayout();
}

std::wstring LayoutMap::GetKeyName(DWORD key)
{
    return impl->GetKeyName(key);
}

DWORD LayoutMap::GetKeyFromName(const std::wstring& name)
{
    auto list = impl->GetKeyNameList(false);
    for (const auto& [value, key] : list)
    {
        if (key == name)
            return value;
    }
    return {};
}

std::vector<DWORD> LayoutMap::GetKeyCodeList(const bool isShortcut)
{
    return impl->GetKeyCodeList(isShortcut);
}

std::vector<std::pair<DWORD, std::wstring>> LayoutMap::GetKeyNameList(const bool isShortcut)
{
    return impl->GetKeyNameList(isShortcut);
}

// Function to return the unicode string name of the key
std::wstring LayoutMap::LayoutMapImpl::GetKeyName(DWORD key)
{
    std::wstring result = L"未定义";
    std::lock_guard<std::mutex> lock(keyboardLayoutMap_mutex);
    UpdateLayout();

    auto it = keyboardLayoutMap.find(key);
    if (it != keyboardLayoutMap.end())
    {
        result = it->second;
    }
    return result;
}

bool mapKeycodeToUnicode(const int vCode, HKL layout, const BYTE* keyState, std::array<wchar_t, 3>& outBuffer)
{
    // Get the scan code from the virtual key code
    const UINT scanCode = MapVirtualKeyExW(vCode, MAPVK_VK_TO_VSC, layout);
    // Get the unicode representation from the virtual key code and scan code pair
    const UINT wFlags = 1 << 2; // If bit 2 is set, keyboard state is not changed (Windows 10, version 1607 and newer)
    const int result = ToUnicodeEx(vCode, scanCode, keyState, outBuffer.data(), static_cast<int>(outBuffer.size()), wFlags, layout);
    return result != 0;
}

// Update Keyboard layout according to input locale identifier
void LayoutMap::LayoutMapImpl::UpdateLayout()
{
    // Get keyboard layout for current thread
    const HKL layout = GetKeyboardLayout(0);
    if (layout == previousLayout)
    {
        return;
    }
    previousLayout = layout;
    if (!isKeyCodeListGenerated)
    {
        unicodeKeys.clear();
        unknownKeys.clear();
    }

    std::array<BYTE, 256> btKeys = { 0 };
    // Only set the Caps Lock key to on for the key names in uppercase
    btKeys[VK_CAPITAL] = 1;

    // Iterate over all the virtual key codes. virtual key 0 is not used
    for (int i = 1; i < 256; i++)
    {
        std::array<wchar_t, 3> szBuffer = { 0 };
        if (mapKeycodeToUnicode(i, layout, btKeys.data(), szBuffer))
        {
            keyboardLayoutMap[i] = szBuffer.data();
            if (!isKeyCodeListGenerated)
            {
                unicodeKeys[i] = szBuffer.data();
            }
            continue;
        }

        // Store the virtual key code as string
        std::wstring vk = L"虚拟键值 ";
        vk += std::to_wstring(i);
        keyboardLayoutMap[i] = vk;
        if (!isKeyCodeListGenerated)
        {
            unknownKeys[i] = vk;
        }
    }

    // Override special key names like Shift, Ctrl etc because they don't have unicode mappings and key names like Enter, Space as they appear as "\r", " "
    // To do: localization
    keyboardLayoutMap[VK_CANCEL] = L"Break";
    keyboardLayoutMap[VK_BACK] = L"Backspace";
    keyboardLayoutMap[VK_TAB] = L"Tab";
    keyboardLayoutMap[VK_CLEAR] = L"Clear";
    keyboardLayoutMap[VK_SHIFT] = L"Shift";
    keyboardLayoutMap[VK_CONTROL] = L"Ctrl";
    keyboardLayoutMap[VK_MENU] = L"Alt";
    keyboardLayoutMap[VK_PAUSE] = L"Pause";
    keyboardLayoutMap[VK_CAPITAL] = L"Caps Lock";
    keyboardLayoutMap[VK_ESCAPE] = L"Esc";
    keyboardLayoutMap[VK_SPACE] = L"Space";

    keyboardLayoutMap[VK_LEFT] = L"Left";
    keyboardLayoutMap[VK_RIGHT] = L"Right";
    keyboardLayoutMap[VK_UP] = L"Up";
    keyboardLayoutMap[VK_DOWN] = L"Down";
    keyboardLayoutMap[VK_INSERT] = L"Insert";
    keyboardLayoutMap[VK_DELETE] = L"Delete";
    keyboardLayoutMap[VK_PRIOR] = L"PgUp";
    keyboardLayoutMap[VK_NEXT] = L"PgDn";
    keyboardLayoutMap[VK_HOME] = L"Home";
    keyboardLayoutMap[VK_END] = L"End";
    keyboardLayoutMap[VK_RETURN] = L"Enter";

    keyboardLayoutMap[VK_LEFT | numpadOriginBit] = L"Left (小键盘)";
    keyboardLayoutMap[VK_RIGHT | numpadOriginBit] = L"Right (小键盘)";
    keyboardLayoutMap[VK_UP | numpadOriginBit] = L"Up (小键盘)";
    keyboardLayoutMap[VK_DOWN | numpadOriginBit] = L"Down (小键盘)";
    keyboardLayoutMap[VK_INSERT | numpadOriginBit] = L"Insert (小键盘)";
    keyboardLayoutMap[VK_DELETE | numpadOriginBit] = L"Delete (小键盘)";
    keyboardLayoutMap[VK_PRIOR | numpadOriginBit] = L"PgUp (小键盘)";
    keyboardLayoutMap[VK_NEXT | numpadOriginBit] = L"PgDn (小键盘)";
    keyboardLayoutMap[VK_HOME | numpadOriginBit] = L"Home (小键盘)";
    keyboardLayoutMap[VK_END | numpadOriginBit] = L"End (小键盘)";
    keyboardLayoutMap[VK_RETURN | numpadOriginBit] = L"Enter (小键盘)";
    keyboardLayoutMap[VK_DIVIDE | numpadOriginBit] = L"/ (小键盘)";

    keyboardLayoutMap[VK_SUBTRACT] = L"- (小键盘)";
    keyboardLayoutMap[VK_SELECT] = L"Select";
    keyboardLayoutMap[VK_PRINT] = L"Print";
    keyboardLayoutMap[VK_EXECUTE] = L"Execute";
    keyboardLayoutMap[VK_SNAPSHOT] = L"Print Screen";
    keyboardLayoutMap[VK_HELP] = L"Help";
    keyboardLayoutMap[VK_LWIN] = L"Win (左)";
    keyboardLayoutMap[VK_RWIN] = L"Win (右)";
    keyboardLayoutMap[VK_APPS] = L"Apps/Menu";
    keyboardLayoutMap[VK_SLEEP] = L"Sleep";
    keyboardLayoutMap[VK_NUMPAD0] = L"0 (小键盘)";
    keyboardLayoutMap[VK_NUMPAD1] = L"1 (小键盘)";
    keyboardLayoutMap[VK_NUMPAD2] = L"2 (小键盘)";
    keyboardLayoutMap[VK_NUMPAD3] = L"3 (小键盘)";
    keyboardLayoutMap[VK_NUMPAD4] = L"4 (小键盘)";
    keyboardLayoutMap[VK_NUMPAD5] = L"5 (小键盘)";
    keyboardLayoutMap[VK_NUMPAD6] = L"6 (小键盘)";
    keyboardLayoutMap[VK_NUMPAD7] = L"7 (小键盘)";
    keyboardLayoutMap[VK_NUMPAD8] = L"8 (小键盘)";
    keyboardLayoutMap[VK_NUMPAD9] = L"9 (小键盘)";
    keyboardLayoutMap[VK_SEPARATOR] = L"Separator";
    keyboardLayoutMap[VK_F1] = L"F1";
    keyboardLayoutMap[VK_F2] = L"F2";
    keyboardLayoutMap[VK_F3] = L"F3";
    keyboardLayoutMap[VK_F4] = L"F4";
    keyboardLayoutMap[VK_F5] = L"F5";
    keyboardLayoutMap[VK_F6] = L"F6";
    keyboardLayoutMap[VK_F7] = L"F7";
    keyboardLayoutMap[VK_F8] = L"F8";
    keyboardLayoutMap[VK_F9] = L"F9";
    keyboardLayoutMap[VK_F10] = L"F10";
    keyboardLayoutMap[VK_F11] = L"F11";
    keyboardLayoutMap[VK_F12] = L"F12";
    keyboardLayoutMap[VK_F13] = L"F13";
    keyboardLayoutMap[VK_F14] = L"F14";
    keyboardLayoutMap[VK_F15] = L"F15";
    keyboardLayoutMap[VK_F16] = L"F16";
    keyboardLayoutMap[VK_F17] = L"F17";
    keyboardLayoutMap[VK_F18] = L"F18";
    keyboardLayoutMap[VK_F19] = L"F19";
    keyboardLayoutMap[VK_F20] = L"F20";
    keyboardLayoutMap[VK_F21] = L"F21";
    keyboardLayoutMap[VK_F22] = L"F22";
    keyboardLayoutMap[VK_F23] = L"F23";
    keyboardLayoutMap[VK_F24] = L"F24";
    keyboardLayoutMap[VK_NUMLOCK] = L"Num Lock";
    keyboardLayoutMap[VK_SCROLL] = L"Scroll Lock";
    keyboardLayoutMap[VK_LSHIFT] = L"Shift (左)";
    keyboardLayoutMap[VK_RSHIFT] = L"Shift (右)";
    keyboardLayoutMap[VK_LCONTROL] = L"Ctrl (左)";
    keyboardLayoutMap[VK_RCONTROL] = L"Ctrl (右)";
    keyboardLayoutMap[VK_LMENU] = L"Alt (左)";
    keyboardLayoutMap[VK_RMENU] = L"Alt (右)";
    keyboardLayoutMap[VK_BROWSER_BACK] = L"Browser Back";
    keyboardLayoutMap[VK_BROWSER_FORWARD] = L"Browser Forward";
    keyboardLayoutMap[VK_BROWSER_REFRESH] = L"Browser Refresh";
    keyboardLayoutMap[VK_BROWSER_STOP] = L"Browser Stop";
    keyboardLayoutMap[VK_BROWSER_SEARCH] = L"Browser Search";
    keyboardLayoutMap[VK_BROWSER_FAVORITES] = L"Browser Favorites";
    keyboardLayoutMap[VK_BROWSER_HOME] = L"Browser Home";
    keyboardLayoutMap[VK_VOLUME_MUTE] = L"Volume Mute";
    keyboardLayoutMap[VK_VOLUME_DOWN] = L"Volume Down";
    keyboardLayoutMap[VK_VOLUME_UP] = L"Volume Up";
    keyboardLayoutMap[VK_MEDIA_NEXT_TRACK] = L"Next Track";
    keyboardLayoutMap[VK_MEDIA_PREV_TRACK] = L"Previous Track";
    keyboardLayoutMap[VK_MEDIA_STOP] = L"Stop Media";
    keyboardLayoutMap[VK_MEDIA_PLAY_PAUSE] = L"Play/Pause Media";
    keyboardLayoutMap[VK_LAUNCH_MAIL] = L"Start Mail";
    keyboardLayoutMap[VK_LAUNCH_MEDIA_SELECT] = L"Select Media";
    keyboardLayoutMap[VK_LAUNCH_APP1] = L"Start App 1";
    keyboardLayoutMap[VK_LAUNCH_APP2] = L"Start App 2";
    keyboardLayoutMap[VK_PACKET] = L"Packet";
    keyboardLayoutMap[VK_ATTN] = L"Attn";
    keyboardLayoutMap[VK_CRSEL] = L"CrSel";
    keyboardLayoutMap[VK_EXSEL] = L"ExSel";
    keyboardLayoutMap[VK_EREOF] = L"Erase EOF";
    keyboardLayoutMap[VK_PLAY] = L"Play";
    keyboardLayoutMap[VK_ZOOM] = L"Zoom";
    keyboardLayoutMap[VK_PA1] = L"PA1";
    keyboardLayoutMap[VK_OEM_CLEAR] = L"Clear";
    keyboardLayoutMap[0xFF] = L"未定义";
    keyboardLayoutMap[CommonSharedConstants::VK_WIN_BOTH] = L"Win";
    keyboardLayoutMap[VK_KANA] = L"IME Kana";
    keyboardLayoutMap[VK_HANGEUL] = L"IME Hangeul";
    keyboardLayoutMap[VK_HANGUL] = L"IME Hangul";
    keyboardLayoutMap[VK_IME_ON] = L"IME On";
    keyboardLayoutMap[VK_JUNJA] = L"IME Junja";
    keyboardLayoutMap[VK_FINAL] = L"IME Final";
    keyboardLayoutMap[VK_HANJA] = L"IME Hanja";
    keyboardLayoutMap[VK_KANJI] = L"IME Kanji";
    keyboardLayoutMap[VK_IME_OFF] = L"IME Off";
    keyboardLayoutMap[VK_CONVERT] = L"IME Convert";
    keyboardLayoutMap[VK_NONCONVERT] = L"IME Non-Convert";
    keyboardLayoutMap[VK_ACCEPT] = L"IME Kana";
    keyboardLayoutMap[VK_MODECHANGE] = L"IME Mode Change";
    keyboardLayoutMap[VK_DECIMAL] = L". (小键盘)";
    keyboardLayoutMap[CommonSharedConstants::VK_DISABLED] = L"禁用";
}

// Function to return the list of key codes in the order for the drop down. It creates it if it doesn't exist
std::vector<DWORD> LayoutMap::LayoutMapImpl::GetKeyCodeList(const bool isShortcut)
{
    std::lock_guard<std::mutex> lock(keyboardLayoutMap_mutex);
    UpdateLayout();
    std::vector<DWORD> keyCodes;
    if (!isKeyCodeListGenerated)
    {
        // Add character keys
        for (auto& it : unicodeKeys)
        {
            // If it was not renamed with a special name
            if (it.second == keyboardLayoutMap[it.first])
            {
                keyCodes.push_back(it.first);
            }
        }

        // Add modifier keys in alphabetical order
        keyCodes.push_back(VK_MENU);
        keyCodes.push_back(VK_LMENU);
        keyCodes.push_back(VK_RMENU);
        keyCodes.push_back(VK_CONTROL);
        keyCodes.push_back(VK_LCONTROL);
        keyCodes.push_back(VK_RCONTROL);
        keyCodes.push_back(VK_SHIFT);
        keyCodes.push_back(VK_LSHIFT);
        keyCodes.push_back(VK_RSHIFT);
        keyCodes.push_back(CommonSharedConstants::VK_WIN_BOTH);
        keyCodes.push_back(VK_LWIN);
        keyCodes.push_back(VK_RWIN);

        // Add all other special keys
        std::vector<DWORD> specialKeys;
        for (int i = 1; i < 256; i++)
        {
            // If it is not already been added (i.e. it was either a modifier or had a unicode representation)
            if (std::find(keyCodes.begin(), keyCodes.end(), i) == keyCodes.end())
            {
                // If it is any other key but it is not named as VK #
                auto it = unknownKeys.find(i);
                if (it == unknownKeys.end())
                {
                    specialKeys.push_back(i);
                }
                else if (unknownKeys[i] != keyboardLayoutMap[i])
                {
                    specialKeys.push_back(i);
                }
            }
        }

        // Add numpad keys
        for (auto it = keyboardLayoutMap.rbegin(); it->first & numpadOriginBit; ++it)
        {
            keyCodes.push_back(it->first);
        }

        // Sort the special keys in alphabetical order
        std::sort(specialKeys.begin(), specialKeys.end(), [&](const DWORD& lhs, const DWORD& rhs) {
            return keyboardLayoutMap[lhs] < keyboardLayoutMap[rhs];
        });
        for (int i = 0; i < specialKeys.size(); i++)
        {
            keyCodes.push_back(specialKeys[i]);
        }

        // Add unknown keys
        for (auto& it : unknownKeys)
        {
            // If it was not renamed with a special name
            if (it.second == keyboardLayoutMap[it.first])
            {
                keyCodes.push_back(it.first);
            }
        }
        keyCodeList = keyCodes;
        isKeyCodeListGenerated = true;
    }
    else
    {
        keyCodes = keyCodeList;
    }

    // If it is a key list for the shortcut control then we add a "None" key at the start
    if (isShortcut)
    {
        keyCodes.insert(keyCodes.begin(), 0);
    }

    return keyCodes;
}

std::vector<std::pair<DWORD, std::wstring>> LayoutMap::LayoutMapImpl::GetKeyNameList(const bool isShortcut)
{
    std::vector<std::pair<DWORD, std::wstring>> keyNames;
    std::vector<DWORD> keyCodes = GetKeyCodeList(isShortcut);
    std::lock_guard<std::mutex> lock(keyboardLayoutMap_mutex);
    // If it is a key list for the shortcut control then we add a "None" key at the start
    if (isShortcut)
    {
        keyNames.push_back({ 0, L"无" });
        for (int i = 1; i < keyCodes.size(); i++)
        {
            keyNames.push_back({ keyCodes[i], keyboardLayoutMap[keyCodes[i]] });
        }
    }
    else
    {
        for (int i = 0; i < keyCodes.size(); i++)
        {
            keyNames.push_back({ keyCodes[i], keyboardLayoutMap[keyCodes[i]] });
        }
    }

    return keyNames;
}


================================================
FILE: PowerToys/src/common/sysinternals/Eula/eula.c
================================================
#pragma once

#pragma warning( disable: 4996) 

#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#include <Richedit.h>
#include <conio.h>
#include <fcntl.h>
#include <io.h>
#include "Eula.h"
#include "dll.h"

#define	IDC_TEXT	500
#define IDC_PRINT	501
#define	IDC_TEXT1	502

static const char * EulaText[] = {
"{\\rtf1\\ansi\\ansicpg1252\\deff0\\nouicompat\\deflang1033{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 Tahoma;}{\\f1\\fnil\\fcharset0 Calibri;}}",
"{\\colortbl ;\\red0\\green0\\blue255;\\red0\\green0\\blue0;}",
"{\\*\\generator Riched20 10.0.10240}\\viewkind4\\uc1 ",
"\\pard\\brdrb\\brdrs\\brdrw10\\brsp20 \\sb120\\sa120\\b\\f0\\fs24 SYSINTERNALS SOFTWARE LICENSE TERMS\\fs28\\par",
"\\pard\\sb120\\sa120\\b0\\fs19 These license terms are an agreement between Sysinternals (a wholly owned subsidiary of Microsoft Corporation) and you.  Please read them.  They apply to the software you are downloading from Sysinternals.com, which includes the media on which you received it, if any.  The terms also apply to any Sysinternals\\par",
"\\pard\\fi-363\\li720\\sb120\\sa120\\tx720\\'b7\\tab updates,\\par",
"\\pard\\fi-363\\li720\\sb120\\sa120\\'b7\\tab supplements,\\par",
"\\'b7\\tab Internet-based services, and \\par",
"\\'b7\\tab support services\\par",
"\\pard\\sb120\\sa120 for this software, unless other terms accompany those items.  If so, those terms apply.\\par",
"\\b BY USING THE SOFTWARE, YOU ACCEPT THESE TERMS.  IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.\\par",
"\\pard\\brdrt\\brdrs\\brdrw10\\brsp20 \\sb120\\sa120 If you comply with these license terms, you have the rights below.\\par",
"\\pard\\fi-357\\li357\\sb120\\sa120\\tx360\\fs20 1.\\tab\\fs19 INSTALLATION AND USE RIGHTS.  \\b0 You may install and use any number of copies of the software on your devices.\\b\\par",
"\\caps\\fs20 2.\\tab\\fs19 Scope of License\\caps0 .\\b0   The software is licensed, not sold. This agreement only gives you some rights to use the software.  Sysinternals reserves all other rights.  Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement.  In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways.    You may not\\b\\par",
"\\pard\\fi-363\\li720\\sb120\\sa120\\tx720\\b0\\'b7\\tab work around any technical limitations in the binary versions of the software;\\par",
"\\pard\\fi-363\\li720\\sb120\\sa120\\'b7\\tab reverse engineer, decompile or disassemble the binary versions of the software, except and only to the extent that applicable law expressly permits, despite this limitation;\\par",
"\\'b7\\tab make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation;\\par",
"\\'b7\\tab publish the software for others to copy;\\par",
"\\'b7\\tab rent, lease or lend the software;\\par",
"\\'b7\\tab transfer the software or this agreement to any third party; or\\par",
"\\'b7\\tab use the software for commercial software hosting services.\\par",
"\\pard\\fi-357\\li357\\sb120\\sa120\\tx360\\b\\fs20 3.\\tab SENSITIVE INFORMATION. \\b0  Please be aware that, similar to other debug tools that capture \\ldblquote process state\\rdblquote  information, files saved by Sysinternals tools may include personally identifiable or other sensitive information (such as usernames, passwords, paths to files accessed, and paths to registry accessed). By using this software, you acknowledge that you are aware of this and take sole responsibility for any personally identifiable or other sensitive information provided to Microsoft or any other party through your use of the software.\\b\\par",
"5. \\tab\\fs19 DOCUMENTATION.\\b0   Any person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.\\b\\par",
"\\caps\\fs20 6.\\tab\\fs19 Export Restrictions\\caps0 .\\b0   The software is subject to United States export laws and regulations.  You must comply with all domestic and international export laws and regulations that apply to the software.  These laws include restrictions on destinations, end users and end use.  For additional information, see {\\cf1\\ul{\\field{\\*\\fldinst{HYPERLINK www.microsoft.com/exporting }}{\\fldrslt{www.microsoft.com/exporting}}}}\\cf1\\ul\\f0\\fs19  <{{\\field{\\*\\fldinst{HYPERLINK \"http://www.microsoft.com/exporting\"}}{\\fldrslt{http://www.microsoft.com/exporting}}}}\\f0\\fs19 >\\cf0\\ulnone .\\b\\par",
"\\caps\\fs20 7.\\tab\\fs19 SUPPORT SERVICES.\\caps0  \\b0 Because this software is \"as is, \" we may not provide support services for it.\\b\\par",
"\\caps\\fs20 8.\\tab\\fs19 Entire Agreement.\\b0\\caps0   This agreement, and the terms for supplements, updates, Internet-based services and support services that you use, are the entire agreement for the software and support services.\\par",
"\\pard\\keepn\\fi-360\\li360\\sb120\\sa120\\tx360\\cf2\\b\\caps\\fs20 9.\\tab\\fs19 Applicable Law\\caps0 .\\par",
"\\pard\\fi-363\\li720\\sb120\\sa120\\tx720\\cf0\\fs20 a.\\tab\\fs19 United States.\\b0   If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles.  The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.\\b\\par",
"\\pard\\fi-363\\li720\\sb120\\sa120\\fs20 b.\\tab\\fs19 Outside the United States.\\b0   If you acquired the software in any other country, the laws of that country apply.\\b\\par",
"\\pard\\fi-357\\li357\\sb120\\sa120\\tx360\\caps\\fs20 10.\\tab\\fs19 Legal Effect.\\b0\\caps0   This agreement describes certain legal rights.  You may have other rights under the laws of your country.  You may also have rights with respect to the party from whom you acquired the software.  This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.\\b\\caps\\par",
"\\fs20 11.\\tab\\fs19 Disclaimer of Warranty.\\caps0    \\caps The software is licensed \"as - is.\"  You bear the risk of using it.  SYSINTERNALS gives no express warranties, guarantees or conditions.  You may have additional consumer rights under your local laws which this agreement cannot change.  To the extent permitted under your local laws, SYSINTERNALS excludes the implied warranties of merchantability, fitness for a particular purpose and non-infringement.\\par",
"\\pard\\fi-360\\li360\\sb120\\sa120\\tx360\\fs20 12.\\tab\\fs19 Limitation on and Exclusion of Remedies and Damages.  You can recover from SYSINTERNALS and its suppliers only direct damages up to U.S. $5.00.  You cannot recover any other damages, including consequential, lost profits, special, indirect or incidental damages.\\par",
"\\pard\\li357\\sb120\\sa120\\b0\\caps0 This limitation applies to\\par",
"\\pard\\fi-363\\li720\\sb120\\sa120\\tx720\\'b7\\tab anything related to the software, services, content (including code) on third party Internet sites, or third party programs; and\\par",
"\\pard\\fi-363\\li720\\sb120\\sa120\\'b7\\tab claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\\par",
"\\pard\\li360\\sb120\\sa120 It also applies even if Sysinternals knew or should have known about the possibility of the damages.  The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages.\\par",
"\\pard\\b Please note: As this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French.\\par",
"\\pard\\sb240\\lang1036 Remarque : Ce logiciel \\'e9tant distribu\\'e9 au Qu\\'e9bec, Canada, certaines des clauses dans ce contrat sont fournies ci-dessous en fran\\'e7ais.\\par",
"\\pard\\sb120\\sa120 EXON\\'c9RATION DE GARANTIE.\\b0  Le logiciel vis\\'e9 par une licence est offert \\'ab tel quel \\'bb. Toute utilisation de ce logiciel est \\'e0 votre seule risque et p\\'e9ril. Sysinternals n'accorde aucune autre garantie expresse. Vous pouvez b\\'e9n\\'e9ficier de droits additionnels en vertu du droit local sur la protection dues consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualit\\'e9 marchande, d'ad\\'e9quation \\'e0 un usage particulier et d'absence de contrefa\\'e7on sont exclues.\\par",
"\\pard\\keepn\\sb120\\sa120\\b LIMITATION DES DOMMAGES-INT\\'c9R\\'caTS ET EXCLUSION DE RESPONSABILIT\\'c9 POUR LES DOMMAGES.\\b0   Vous pouvez obtenir de Sysinternals et de ses fournisseurs une indemnisation en cas de dommages directs uniquement \\'e0 hauteur de 5,00 $ US. Vous ne pouvez pr\\'e9tendre \\'e0 aucune indemnisation pour les autres dommages, y compris les dommages sp\\'e9ciaux, indirects ou accessoires et pertes de b\\'e9n\\'e9fices.\\par",
"\\lang1033 Cette limitation concerne :\\par",
"\\pard\\keepn\\fi-360\\li720\\sb120\\sa120\\tx720\\lang1036\\'b7\\tab tout  ce qui est reli\\'e9 au logiciel, aux services ou au contenu (y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers ; et\\par",
"\\pard\\fi-363\\li720\\sb120\\sa120\\tx720\\'b7\\tab les r\\'e9clamations au titre de violation de contrat ou de garantie, ou au titre de responsabilit\\'e9 stricte, de n\\'e9gligence ou d'une autre faute dans la limite autoris\\'e9e par la loi en vigueur.\\par",
"\\pard\\sb120\\sa120 Elle s'applique \\'e9galement, m\\'eame si Sysinternals connaissait ou devrait conna\\'eetre l'\\'e9ventualit\\'e9 d'un tel dommage.  Si votre pays n'autorise pas l'exclusion ou la limitation de responsabilit\\'e9 pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l'exclusion ci-dessus ne s'appliquera pas \\'e0 votre \\'e9gard.\\par",
"\\b EFFET JURIDIQUE.\\b0   Le pr\\'e9sent contrat d\\'e9crit certains droits juridiques. Vous pourriez avoir d'autres droits pr\\'e9vus par les lois de votre pays.  Le pr\\'e9sent contrat ne modifie pas les droits que vous conf\\'e8rent les lois de votre pays si celles-ci ne le permettent pas.\\b\\par",
"\\pard\\b0\\fs20\\lang1033\\par",
"\\pard\\sa200\\sl276\\slmult1\\f1\\fs22\\lang9\\par",
"}",
NULL
};
 
static const wchar_t *Raw_EulaText = L"SYSINTERNALS SOFTWARE LICENSE TERMS\nThese license terms are an agreement between Sysinternals(a wholly owned subsidiary of Microsoft Corporation) and you.Please read them.They apply to the software you are downloading from technet.microsoft.com / sysinternals, which includes the media on which you received it, if any.The terms also apply to any Sysinternals\n* updates,\n*supplements,\n*Internet - based services,\n*and support services\nfor this software, unless other terms accompany those items.If so, those terms apply.\nBY USING THE SOFTWARE, YOU ACCEPT THESE TERMS.IF YOU DO NOT ACCEPT THEM, DO NOT USE THE SOFTWARE.\n\nIf you comply with these license terms, you have the rights below.\nINSTALLATION AND USER RIGHTS\nYou may install and use any number of copies of the software on your devices.\n\nSCOPE OF LICENSE\nThe software is licensed, not sold.This agreement only gives you some rights to use the software.Sysinternals reserves all other rights.Unless applicable law gives you more rights despite this limitation, you may use the software only as expressly permitted in this agreement.In doing so, you must comply with any technical limitations in the software that only allow you to use it in certain ways.You may not\n* work around any technical limitations in the software;\n*reverse engineer, decompile or disassemble the software, except and only to the extent that applicable law expressly permits, despite this limitation;\n*make more copies of the software than specified in this agreement or allowed by applicable law, despite this limitation;\n*publish the software for others to copy;\n*rent, lease or lend the software;\n*transfer the software or this agreement to any third party; or\n* use the software for commercial software hosting services.\n\nSENSITIVE INFORMATION\nPlease be aware that, similar to other debug tools that capture “process state” information, files saved by Sysinternals tools may include personally identifiable or other sensitive information(such as usernames, passwords, paths to files accessed, and paths to registry accessed).By using this software, you acknowledge that you are aware of this and take sole responsibility for any personally identifiable or other sensitive information provided to Microsoft or any other party through your use of the software.\n\nDOCUMENTATION\nAny person that has valid access to your computer or internal network may copy and use the documentation for your internal, reference purposes.\n\nEXPORT RESTRICTIONS\nThe software is subject to United States export laws and regulations.You must comply with all domestic and international export laws and regulations that apply to the software.These laws include restrictions on destinations, end users and end use.For additional information, see www.microsoft.com / exporting .\n\nSUPPORT SERVICES\nBecause this software is \"as is, \" we may not provide support services for it.\n\nENTIRE AGREEMENT\nThis agreement, and the terms for supplements, updates, Internet - based services and support services that you use, are the entire agreement for the software and support services.\n\nAPPLICABLE LAW\nUnited States.If you acquired the software in the United States, Washington state law governs the interpretation of this agreement and applies to claims for breach of it, regardless of conflict of laws principles.The laws of the state where you live govern all other claims, including claims under state consumer protection laws, unfair competition laws, and in tort.\nOutside the United States.If you acquired the software in any other country, the laws of that country apply.\n\nLEGAL EFFECT\nThis agreement describes certain legal rights.You may have other rights under the laws of your country.You may also have rights with respect to the party from whom you acquired the software.This agreement does not change your rights under the laws of your country if the laws of your country do not permit it to do so.\n\nDISCLAIMER OF WARRANTY\nThe software is licensed \"as - is.\" You bear the risk of using it.Sysinternals gives no express warranties, guarantees or conditions.You may have additional consumer rights under your local laws which this agreement cannot change.To the extent permitted under your local laws, sysinternals excludes the implied warranties of merchantability, fitness for a particular purpose and non - infringement.\n\nLIMITATION ON AND EXCLUSION OF REMEDIES AND DAMAGES\nYou can recover from sysinternals and its suppliers only direct damages up to U.S.$5.00.You cannot recover any other damages, including consequential, lost profits, special, indirect or incidental damages.\nThis limitation applies to\n* anything related to the software, services, content(including code) on third party Internet sites, or third party programs; and\n* claims for breach of contract, breach of warranty, guarantee or condition, strict liability, negligence, or other tort to the extent permitted by applicable law.\nIt also applies even if Sysinternals knew or should have known about the possibility of the damages.The above limitation or exclusion may not apply to you because your country may not allow the exclusion or limitation of incidental, consequential or other damages.\nPlease note : As this software is distributed in Quebec, Canada, some of the clauses in this agreement are provided below in French.\nRemarque : Ce logiciel étant distribué au Québec, Canada, certaines des clauses dans ce contrat sont fournies ci - dessous en français.\n		   EXONÉRATION DE GARANTIE.Le logiciel visé par une licence est offert « tel quel ».Toute utilisation de ce logiciel est à votre seule risque et péril.Sysinternals n'accorde aucune autre garantie expresse. Vous pouvez bénéficier de droits additionnels en vertu du droit local sur la protection dues consommateurs, que ce contrat ne peut modifier. La ou elles sont permises par le droit locale, les garanties implicites de qualité marchande, d'adéquation à un usage particulier et d'absence de contrefaçon sont exclues.\n		   LIMITATION DES DOMMAGES - INTÉRÊTS ET EXCLUSION DE RESPONSABILITÉ POUR LES DOMMAGES.Vous pouvez obtenir de Sysinternals et de ses fournisseurs une indemnisation en cas de dommages directs uniquement à hauteur de 5, 00 $ US.Vous ne pouvez prétendre à aucune indemnisation pour les autres dommages, y compris les dommages spéciaux, indirects ou accessoires et pertes de bénéfices.\n\n		   Cette limitation concerne :\ntout ce qui est relié au logiciel, aux services ou au contenu(y compris le code) figurant sur des sites Internet tiers ou dans des programmes tiers; et\nles réclamations au titre de violation de contrat ou de garantie, ou au titre de responsabilité stricte, de négligence ou d'une autre faute dans la limite autorisée par la loi en vigueur.\n\nElle s'applique également, même si Sysinternals connaissait ou devrait connaître l'éventualité d'un tel dommage. Si votre pays n'autorise pas l'exclusion ou la limitation de responsabilité pour les dommages indirects, accessoires ou de quelque nature que ce soit, il se peut que la limitation ou l'exclusion ci - dessus ne s'appliquera pas à votre égard.\nEFFET JURIDIQUE.Le présent contrat décrit certains droits juridiques.Vous pourriez avoir d'autres droits prévus par les lois de votre pays. Le présent contrat ne modifie pas les droits que vous confèrent les lois de votre pays si celles-ci ne le permettent pas.\n\n";

BOOL IsEulaRegkeyAdded(const TCHAR * ToolName);

static BOOL EulaCenter( HWND hwndChild, HWND hwndParent )
{
    RECT    rcChild, rcParent;
    int     cxChild, cyChild, cxParent, cyParent;
    int     cxScreen, cyScreen, xNew, yNew;
    HDC     hdc;

    // Get the Height and Width of the child window
    GetWindowRect(hwndChild, &rcChild);
    cxChild = rcChild.right - rcChild.left;
    cyChild = rcChild.bottom - rcChild.top;

    // Get the Height and Width of the parent window
    GetWindowRect(hwndParent, &rcParent);
    cxParent = rcParent.right - rcParent.left;
    cyParent = rcParent.bottom - rcParent.top;

    // Get the display limits
    hdc = GetDC(hwndChild);
    cxScreen = GetDeviceCaps(hdc, HORZRES);
    cyScreen = GetDeviceCaps(hdc, VERTRES);
    ReleaseDC(hwndChild, hdc);

    // Calculate new X position, then adjust for screen
    xNew = rcParent.left + ((cxParent - cxChild) / 2);
    if (xNew < 0)
    {
        xNew = 0;
    }
    else if ((xNew + cxChild) > cxScreen)
    {
        xNew = cxScreen - cxChild;
    }

    // Calculate new Y position, then adjust for screen
    yNew = rcParent.top  + ((cyParent - cyChild) / 2);
    if (yNew < 0)
    {
        yNew = 0;
    }
    else if ((yNew + cyChild) > cyScreen)
    {
        yNew = cyScreen - cyChild;
    }

    // Set it, and return
    return SetWindowPos(hwndChild,
                        NULL,
                        xNew, yNew,
                        0, 0,
                        SWP_NOSIZE | SWP_NOZORDER);
}



static BOOL PrintRichedit( HWND hRichedit )
{
    // Get the printer.
    PRINTDLG	pd = { 0 };

    pd.lStructSize	= sizeof pd;
    pd.hwndOwner	= hRichedit;
    pd.hInstance	= GetModuleHandle(NULL);
    pd.Flags		= PD_RETURNDC | PD_NOPAGENUMS | PD_NOSELECTION | PD_PRINTSETUP;
    if ( !PrintDlg( &pd ) )  
        return FALSE;

    {
        HCURSOR		oldCursor	= SetCursor( LoadCursor( NULL, IDC_WAIT ) );
        int         nHorzRes	= GetDeviceCaps( pd.hDC, HORZRES );
        int			nVertRes	= GetDeviceCaps( pd.hDC, VERTRES );
        int			nLogPixelsX = GetDeviceCaps( pd.hDC, LOGPIXELSX );
        int			nLogPixelsY = GetDeviceCaps( pd.hDC, LOGPIXELSY );
        FORMATRANGE fr = { 0 };
        DOCINFO		di = { 0 };
        int			TotalLength;
        
        // Ensure the printer DC is in MM_TEXT mode.
        SetMapMode( pd.hDC, MM_TEXT );
        
        // Rendering to the same DC we are measuring.
        fr.hdc			= pd.hDC;
        fr.hdcTarget	= pd.hDC;
        
        // Set up the page.
        fr.rcPage.top		= 0;
        fr.rcPage.left		= 0;
        fr.rcPage.bottom	= (nVertRes/nLogPixelsY) * 1440;
        fr.rcPage.right		= (nHorzRes/nLogPixelsX) * 1440;
        
        // Set up 1" margins all around.
        fr.rc = fr.rcPage;
        InflateRect( &fr.rc, -1440, -1440 );
        
        // Default the range of text to print as the entire document.
        fr.chrg.cpMin = 0;
        fr.chrg.cpMax = -1;
        
        // Set up the print job (standard printing stuff here).
        di.cbSize = sizeof di;
        di.lpszDocName = _T("Sysinternals License");
        
        // Start the document.
        StartDoc( pd.hDC, &di );
        
        // Find out real size of document in characters.
        TotalLength = (int) SendMessage ( hRichedit, WM_GETTEXTLENGTH, 0, 0 );
        for (;;)  {
            int NextPage;

            // Start the page.
            StartPage( pd.hDC );
            
            // Print as much text as can fit on a page. The return value is
            // the index of the first character on the next page. 
            NextPage = (int) SendMessage( hRichedit, EM_FORMATRANGE, TRUE, (LPARAM)&fr );
            
            // Print last page.
            EndPage( pd.hDC );
            
            if ( NextPage >= TotalLength )
                break;

            // Adjust the range of characters to start printing at the first character of the next page.
            fr.chrg.cpMin = NextPage;
            fr.chrg.cpMax = -1;
        }

        // Tell the control to release cached information.
        SendMessage( hRichedit, EM_FORMATRANGE, 0, (LPARAM)NULL );
        EndDoc( pd.hDC );

        SetCursor( oldCursor );
    }

    return TRUE;
} 

// combine all text strings into a single string
char * GetEulaText()
{
    char	*	text;
    DWORD		len = 1;
    int			i;
    for ( i = 0; EulaText[i]; ++i )
        len += (DWORD) strlen( EulaText[i] );
    text = (char *) malloc( len );
    len = 0;
    for ( i = 0; EulaText[i]; ++i )  {
        strcpy( text+len, EulaText[i] );
        len += (DWORD) strlen( EulaText[i] );
    }
    text[len] = 0; 
    return text;
}

DWORD CALLBACK StreamCallback( DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb )
{
    const char	**	ptr = (const char **) dwCookie;
    LONG_PTR		len = strlen(*ptr);
    if ( cb > len )
        cb = (int) len;
    memcpy( pbBuff, *ptr, cb );
    *pcb = cb;
    *ptr += cb;
    return 0;
}

static INT_PTR CALLBACK EulaProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
{
    switch ( uMsg ) {
    case WM_INITDIALOG:
        {
            TCHAR		title[MAX_PATH];
            char	*	text = GetEulaText();
            char	*	textptr = text;
            EDITSTREAM	stream = { 0, 0, StreamCallback };
            stream.dwCookie = (DWORD_PTR) &textptr;
            _stprintf_s( title, MAX_PATH, _T("%s 许可协议"), (TCHAR *) lParam );
            SetWindowText( hwndDlg, title );
            
            // enter RTF into edit box
            SendMessage( GetDlgItem(hwndDlg,IDC_TEXT), EM_EXLIMITTEXT, 0, 1024*1024 );
            SendMessage( GetDlgItem(hwndDlg,IDC_TEXT), EM_STREAMIN, SF_RTF, (LPARAM)&stream );
            free( text );
        }
        return TRUE;

    case WM_CTLCOLORSTATIC:
        // force background of read-only text window to be white
        if ( (HWND)lParam == GetDlgItem( hwndDlg, IDC_TEXT)  )  {
            return (INT_PTR)GetSysColorBrush( COLOR_WINDOW );
        }
        break;

    case WM_COMMAND:
        switch( LOWORD( wParam )) {
        case IDOK:
            EndDialog( hwndDlg, TRUE );
            return TRUE;
        case IDCANCEL:
            EndDialog( hwndDlg, FALSE );
            return TRUE;
        case IDC_PRINT:
            PrintRichedit( GetDlgItem(hwndDlg,IDC_TEXT) );
            return TRUE;
        }
        break;
    }
    return FALSE;
}


static WORD * Align2( WORD * pos )
{
    return (WORD *)(((DWORD_PTR)pos + 1) & ~((DWORD_PTR) 1));
}
static WORD * Align4( WORD * pos )
{
    return (WORD *)(((DWORD_PTR)pos + 3) & ~((DWORD_PTR) 3));
}

static int CopyText( WORD * pos, const WCHAR * text )
{
    int len = (int) wcslen( text ) + 1;
    wcscpy( (PWCHAR) pos, text );
    return len;
}

BOOL ShowEulaInternal( const TCHAR * ToolName, DWORD eulaAccepted )
{
#if !defined(SYSMON_SHARED)
    HKEY		hKey = NULL;
    TCHAR		keyName[MAX_PATH];

    _stprintf_s( keyName, MAX_PATH, _T("Software\\Sysinternals\\%s"), ToolName );

    //
    // check the regkey value if no -accepteula switch append
    //
    if (!eulaAccepted)
    {
        eulaAccepted = IsEulaRegkeyAdded(ToolName);
    }
#endif

    if( !eulaAccepted ) {
        if (IsIoTEdition())
        {
            eulaAccepted = ShowEulaConsole();	// display Eula to console and prompt for Eula Accepted.
            {
            }
        }
        else if (IsRemoteOnlyEdition() || IsRunningRemotely()) // Nano and in remote session will not be able to accept eula from prompt
        {
            ShowEulaConsoleNoPrompt();
        }
        else
        {
            DLGTEMPLATE		*	dlg = (DLGTEMPLATE	*)LocalAlloc(LPTR, 1000);
            WORD			*	extra = (WORD *)(dlg + 1);
            DLGITEMTEMPLATE	*	item;

#if defined(SYSMON_SHARED)
            printf( "正在打开 EULA 许可协议对话框 ... (使用 -accepteula 可跳过)。\n" );
#endif

            LoadLibrarySafe(_T("Riched32.dll"), DLL_LOAD_LOCATION_SYSTEM );	// Richedit 1.0 library

            // header
            dlg->style = DS_MODALFRAME | DS_CENTER | DS_SETFONT | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_NOFAILCREATE;
            dlg->x = 0;
            dlg->y = 0;
            dlg->cx = 312;
            dlg->cy = 180;
            dlg->cdit = 0;	// number of controls

            *extra++ = 0;	// menu
            *extra++ = 0;	// class
            extra += CopyText(extra, L"许可协议");
            *extra++ = 8;	// font size
            extra += CopyText(extra, L"MS Shell Dlg");

            // Command-line message
            item = (DLGITEMTEMPLATE *)Align4(extra);
            item->x = 7;
            item->y = 3;
            item->cx = 298;
            item->cy = 14;
            item->id = IDC_TEXT1;
            item->style = WS_CHILD | WS_VISIBLE;
            extra = (WORD *)(item + 1);
            *extra++ = 0xFFFF;	// class is ordinal
            *extra++ = 0x0082;	// class is static
            extra += CopyText(extra, L"您也可使用 /accepteula 命令行开关来同意 EULA。");
            *extra++ = 0;		// creation data
            dlg->cdit++;

            // Agree button
            item = (DLGITEMTEMPLATE *)Align4(extra);
            item->x = 201;
            item->y = 159;
            item->cx = 50;
            item->cy = 14;
            item->id = IDOK;
            item->style = BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP; // | WS_DEFAULT;
            extra = (WORD *)(item + 1);
            *extra++ = 0xFFFF;	// class is ordinal
            *extra++ = 0x0080;	// class is button
            extra += CopyText(extra, L"同意(&A)");
            *extra++ = 0;		// creation data
            dlg->cdit++;

            // Decline button
            item = (DLGITEMTEMPLATE *)Align4(extra);
            item->x = 255;
            item->y = 159;
            item->cx = 50;
            item->cy = 14;
            item->id = IDCANCEL;
            item->style = BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP;
            extra = (WORD *)(item + 1);
            *extra++ = 0xFFFF;	// class is ordinal
            *extra++ = 0x0080;	// class is button
            extra += CopyText(extra, L"拒绝(&D)");
            *extra++ = 0;		// creation data
            dlg->cdit++;

            // Print button
            item = (DLGITEMTEMPLATE *)Align4(extra);
            item->x = 7;
            item->y = 159;
            item->cx = 50;
            item->cy = 14;
            item->id = IDC_PRINT;
            item->style = BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP;
            extra = (WORD *)(item + 1);
            *extra++ = 0xFFFF;	// class is ordinal
            *extra++ = 0x0080;	// class is button
            extra += CopyText(extra, L"打印(&P)");
            *extra++ = 0;		// creation data
            dlg->cdit++;

            // Edit box
            item = (DLGITEMTEMPLATE *)Align4(extra);
            item->x = 7;
            item->y = 14;
            item->cx = 298;
            item->cy = 140;
            item->id = IDC_TEXT;
            item->style = WS_BORDER | ES_MULTILINE | ES_AUTOVSCROLL | ES_WANTRETURN | WS_VSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_TABSTOP;
            extra = (WORD *)(item + 1);
            extra += CopyText(extra, L"RICHEDIT");
            extra += CopyText(extra, L"拒绝(&D)");
            *extra++ = 0;		// creation data
            dlg->cdit++;

            eulaAccepted = (DWORD)DialogBoxIndirectParam(NULL, dlg, NULL, EulaProc, (LPARAM)ToolName);
            LocalFree(dlg);
        }
    }
#if !defined(SYSMON_SHARED)
    if ( eulaAccepted ) {
        if (RegCreateKey(HKEY_CURRENT_USER, keyName, &hKey) == ERROR_SUCCESS) {
            RegSetValueEx(hKey, _T("EulaAccepted"), 0, REG_DWORD, (BYTE *)&eulaAccepted, sizeof(eulaAccepted));
            RegCloseKey(hKey);
        }
    }
#endif

    return eulaAccepted != 0;
}

BOOL ShowEulaW( const TCHAR * ToolName, int *argc, PWCHAR argv[] )
{
    DWORD		eulaAccepted = 0;
    int			i;

    if ( argc == NULL  ||  argv == NULL )  {
        typedef LPWSTR * (WINAPI * type_CommandLineToArgvW)( LPCWSTR lpCmdLine, int *pNumArgs );
        type_CommandLineToArgvW pCommandLineToArgvW = (type_CommandLineToArgvW) GetProcAddress( LoadLibrarySafe(_T("Shell32.dll"), DLL_LOAD_LOCATION_SYSTEM), "CommandLineToArgvW" );
        if ( pCommandLineToArgvW )  {
            static int argc2;
            argc = &argc2;
            argv = (*pCommandLineToArgvW)( GetCommandLineW(), argc );
        } else {
            argc = NULL;
        }
    }


    //
    // See if its accepted via command line switch
    //
    if( argc ) {

        for( i = 0; i < *argc; i++ ) {

            eulaAccepted = (!_wcsicmp( argv[i], L"/accepteula") ||
                            !_wcsicmp( argv[i], L"-accepteula"));
            if( eulaAccepted ) {

                for( ; i < *argc - 1; i++ ) {

                    argv[i] = argv[i+1];
                }
                (*argc)--;
                break;
            }
        }
    }
    if( ShowEulaInternal( ToolName, eulaAccepted )) {

        eulaAccepted = 1;
    }
    return eulaAccepted != 0;
}


BOOL ShowEula( const TCHAR * ToolName, int *argc, PTCHAR argv[] )
{
    DWORD		eulaAccepted = 0;
    int			i;

    if ( argc == NULL  ||  argv == NULL )  {
        return ShowEulaW( ToolName, NULL, NULL );
    }

    //
    // See if its accepted via command line switch
    //
    if( argc ) {

        for( i = 0; i < *argc; i++ ) {

            eulaAccepted = (!_tcsicmp( argv[i], _T("/accepteula")) ||
                            !_tcsicmp( argv[i], _T("-accepteula")));
            if( eulaAccepted ) {

                for( ; i < *argc - 1; i++ ) {

                    argv[i] = argv[i+1];
                }
                (*argc)--;
                break;
            }
        }
    }
    if( ShowEulaInternal( ToolName, eulaAccepted )) {

        eulaAccepted = 1;
    }
    return eulaAccepted != 0;
}

// Determine whether we are on the IoT SKU by looking at the ProductName.
BOOL IsIoTEdition()
{
    HKEY		hKey = NULL;
    wchar_t		ProductName[MAX_PATH];
    BOOL		bRet = FALSE;	// assume "not" IoT Edition
    DWORD		dwSize = sizeof(ProductName);
    DWORD		type = 0;

    if (ERROR_SUCCESS == RegOpenKey(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\windows nt\\currentversion"), &hKey))
    {
        if (ERROR_SUCCESS == RegQueryValueExW(hKey, L"ProductName", 0, &type, (LPBYTE)ProductName, &dwSize))
        {
            if (!_wcsicmp(L"iotuap", ProductName))
                bRet = TRUE;
        }
        RegCloseKey(hKey);
    }

    return bRet;
}

// Determine whether we are on the remote only edition, where we cannot prompt for user input.
BOOL IsRemoteOnlyEdition()
{
    HKEY		hKey = NULL;
    DWORD		dwNanoServer = 0;
    BOOL		bRet = FALSE;
    DWORD		dwSize = sizeof(dwNanoServer);
    DWORD		type = 0;

    // Currently Nano is the only remote only edtion.
    if (ERROR_SUCCESS == RegOpenKey(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows NT\\CurrentVersion\\Server\\ServerLevels"), &hKey))
    {
        if (ERROR_SUCCESS == RegQueryValueEx(hKey, _T("NanoServer"), 0, &type, (LPBYTE)&dwNanoServer, &dwSize))
        {
            if (type == REG_DWORD && dwNanoServer == 1)
                bRet = TRUE;
        }
        RegCloseKey(hKey);
    }

    return bRet;
}

BOOL IsRunningRemotely()
{
    // running from a remote session will not support input interaction
    DWORD fileType = GetFileType(GetStdHandle(STD_OUTPUT_HANDLE));
    return fileType == FILE_TYPE_PIPE;
}

DWORD ShowEulaConsole()
{
    DWORD dwRet = 0;
    char ch;
    BOOLEAN eulaAcknowledged = FALSE;

    wprintf(Raw_EulaText);

    while( eulaAcknowledged != TRUE )
    {
        printf("是否接受 EULA (Y/N)?");
        ch = (char) _getch();
        printf("%c\n", ch);
        if ('y' == ch || 'Y' == ch)
        {
            dwRet = 1;	// EULA Accepted.
            eulaAcknowledged = TRUE;
        }

        if ('n' == ch || 'N' == ch)
        {
            // EULA not accepted.
            eulaAcknowledged = TRUE;
        }
    }
    return dwRet;
}

void ShowEulaConsoleNoPrompt()
{
    wprintf_s(L"%ls", Raw_EulaText);
    wprintf_s(L"这是您首次运行此程序,需要同意 EULA 才能继续。\n");
    wprintf_s(L"可使用 -accepteula 来同意 EULA。\n\n");

    // exit here to avoid printing the misleading "Eula declined".
    exit(1);
}

BOOL IsEulaAcceptedValueExist(HKEY hKeyRoot, LPCTSTR lpSubKey)
{
    HKEY		hKey = NULL;
    DWORD		length;
    DWORD       eulaAccepted = 0;
    DWORD       ret;

    //
    // check if it is set by external channel for all tools
    // assuming external channel do not set to WOW6432Node
    //
    if (RegOpenKeyEx(hKeyRoot, lpSubKey, 0, KEY_QUERY_VALUE | KEY_WOW64_64KEY, &hKey) == ERROR_SUCCESS)
    {
        length = sizeof(eulaAccepted);
        ret = RegQueryValueEx(hKey, _T("EulaAccepted"), NULL, NULL, (LPBYTE)&eulaAccepted, &length);
        RegCloseKey(hKey);

        if (ret == ERROR_SUCCESS && eulaAccepted)
        {
            return TRUE;
        }
    }
    
    return FALSE;
}

BOOL IsEulaRegkeyAdded(const TCHAR * ToolName)
{
    TCHAR       perToolRegKey[MAX_PATH];
    PTCHAR      suiteRegKey = _T("Software\\Sysinternals");

    _stprintf_s(perToolRegKey, MAX_PATH, _T("%s\\%s"), suiteRegKey, ToolName);

    //
    // check if it is set by external channel for all tools
    // assuming external channel do not set to WOW6432Node
    //
    if (IsEulaAcceptedValueExist(HKEY_LOCAL_MACHINE, suiteRegKey) ||
        IsEulaAcceptedValueExist(HKEY_CURRENT_USER, suiteRegKey))
    {
        return TRUE;
    }

    //
    // per tool check
    //
    if (IsEulaAcceptedValueExist(HKEY_CURRENT_USER, perToolRegKey))
    {
        return TRUE;
    }

    return FALSE;
}

BOOL IsEulaSwitchAppended(int *argc, PTCHAR argv[])
{
    DWORD       eulaAccepted = 0;
    int         i;

    //
    // See if its accepted via command line switch
    //
    if (*argc > 1) {
        for (i = 1; i < *argc; i++) {
            eulaAccepted = (!_tcsicmp(argv[i], _T("/accepteula")) ||
                !_tcsicmp(argv[i], _T("-accepteula")));
            if (eulaAccepted) {
                break;
            }
        }
    }

    return eulaAccepted;
}

//
// Determine if Eula is accepted, either already have regkey added
// or have -accepteula switch appended
//
BOOL IsEulaAccepted(const TCHAR * ToolName, int *argc, PTCHAR argv[])
{
    return IsEulaRegkeyAdded(ToolName) || IsEulaSwitchAppended(argc, argv);
}


================================================
FILE: PowerToys/src/gpo/assets/zh-CN/PowerToys.adml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) Microsoft Corporation.
     Licensed under the MIT License. -->
<policyDefinitionResources xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" revision="1.15" schemaVersion="1.0" xmlns="http://schemas.microsoft.com/GroupPolicy/2006/07/PolicyDefinitions">
  <displayName>PowerToys</displayName>
  <description>PowerToys</description>
  <resources>
    <stringTable>
      <string id="PowerToys">Microsoft PowerToys</string>
	  <string id="InstallerUpdates">安装与更新</string>
	  <string id="PowerToysRun">快捷启动器</string>
      <string id="AdvancedPaste">高级粘贴</string>
      <string id="MouseWithoutBorders">无界鼠标</string>
      <string id="GeneralSettings">常规设置</string>
      <string id="NewPlus">新建+</string>
      <string id="DeprecatedPolicies">已弃用</string>

      <string id="SUPPORTED_POWERTOYS_0_64_0">PowerToys 版本 0.64.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_68_0">PowerToys 版本 0.68.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_69_0">PowerToys 版本 0.69.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_70_0">PowerToys 版本 0.70.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_73_0">PowerToys 版本 0.73.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_75_0">PowerToys 版本 0.75.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_76_0">PowerToys 版本 0.76.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_77_0">PowerToys 版本 0.77.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_78_0">PowerToys 版本 0.78.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_81_0">PowerToys 版本 0.81.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_81_1">PowerToys 版本 0.81.1 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_83_0">PowerToys 版本 0.83.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_84_0">PowerToys 版本 0.84.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_85_0">PowerToys 版本 0.85.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_86_0">PowerToys 版本 0.86.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_88_0">PowerToys 版本 0.88.0 或更高版本</string>
      <string id="SUPPORTED_POWERTOYS_0_64_0_TO_0_87_1">PowerToys 版本 0.64.0 至 0.87.1</string>

      <string id="ConfigureAllUtilityGlobalEnabledStateDescription">此策略控制所有 PowerToys 功能的启用状态。

如果策略设置为“已启用”,所有功能将始终启用,用户不可以禁用任何功能。

如果策略设置为“已禁用”,所有功能将始终禁用,用户不可以启用任何功能。

如果策略设置为“未配置”,用户可以自由地启用和禁用功能。

特定某个功能的启用状态策略将会覆盖此策略。
</string>

      <string id="ConfigureEnabledUtilityDescription">此策略控制一个 PowerToys 功能的启用状态。

如果策略设置为“已启用”,该功能将始终启用,用户不可以禁用这个功能。

如果策略设置为“已禁用”,该功能将始终禁用,用户不可以启用这个功能。

如果策略设置为“未配置”,用户可以自由地启用和禁用这个功能。

该策略比“配置所有功能的启用状态”策略优先级更高,将会覆盖其设置。
</string>
      <string id="ConfigureEnabledUtilityDescriptionPDFPreviewHandler">(注意:有用户反馈 PDF 预览与 Outlook 不兼容)

此策略控制一个 PowerToys 功能的启用状态。

如果策略设置为“已启用”,该功能将始终启用,用户不可以禁用这个功能。

如果策略设置为“已禁用”,该功能将始终禁用,用户不可以启用这个功能。

如果策略设置为“未配置”,用户可以自由地启用和禁用这个功能。

该策略比“配置所有功能的启用状态”策略优先级更高,将会覆盖其设置。
</string>
      <string id="DisablePerUserInstallationDescription">此策略控制是否允许单用户安装。

如果策略设置为“已启用”,禁用单用户安装。

如果策略设置为“已禁用”或“未配置”,用户可以选择仅为单用户安装 PowerToys。
</string>
      <string id="DisableAutomaticUpdateDownloadDescription">此策略控制是否禁用自动下载和安装更新。(不过,在按流量计费的网络上,永远不会自动下载更新。)

如果策略设置为“已启用”,禁用自动下载和安装更新。

如果策略设置为“已禁用”或“未配置”,用户可以在设置中自行选择。
</string>
      <string id="SuspendNewUpdateToastDescription">此策略控制是否在两次小版本更新内,不显示更新通知。(比如:如果安装的版本为 v0.60.0,则下一次显示更新提示将会是版本 v0.63.*)

如果策略设置为“已启用”,减少更新通知。

如果策略设置为“已禁用”或“未配置”,正常显示所有更新通知。

注意:大版本更新通知始终会显示。

如果启用“禁用新版本更新消息推送”策略或者在软件设置中关闭了自动更新,则该策略无效。
</string>
      <string id="DisableNewUpdateToastDescription">此策略控制是否禁用更新通知。

如果策略设置为“已启用”,不显示更新通知。

如果策略设置为“已禁用”或“未配置”,用户可以选择是否显示更新通知。
</string>
      <string id="DoNotShowWhatsNewAfterUpdatesDescription">此策略控制更新完成后是否显示更新日志窗口。

如果策略设置为“已启用”,更新完成后不会自动打开更新日志。

如果策略设置为“已禁用”或“未配置”,用户可以在设置中自行选择。
</string>
      <string id="AllowExperimentationDescription">此策略控制是否允许进行 PowerToys 功能测试。如果允许测试,当用户被选中为测试组时,可以用到实验性的新功能。(功能测试只会在 Windows Insider 版本上进行。)

如果策略设置为“已启用”,用户可以在 PowerToys 设置里选择是否参与功能测试。

如果策略设置为“已禁用”或“未配置”,不允许参与功能测试。
</string>
      <string id="AllowDiagnosticDataDescription">此策略控制是否允许发送 PowerToys 诊断数据。发送诊断数据可以帮助修复错误和优化性能。

如果策略设置为“已启用”或“未配置”,用户可以在 PowerToys 设置里选择是否发送诊断数据。

如果策略设置为“已禁用”或“未配置”,不允许发送诊断数据。
</string>
      <string id="PowerToysRunAllPluginsEnabledStateDescription">此策略控制所有快捷启动器插件的启用状态。所有插件将会拥有相同的启用状态。

如果策略设置为“已启用”,所有插件将始终启用,用户不可以禁用任何插件。

如果策略设置为“已禁用”,所有插件将始终禁用,用户不可以启用任何插件。

如果策略设置为“未配置”,用户可以自由地启用和禁用插件。

可以通过“配置特定插件的启用状态”策略来为特定插件配置启用状态覆盖此设置。特定某个功能的启用状态策略将会覆盖此策略。

注意:更改需要重新启动快捷启动器才能应用。
</string>
      <string id="PowerToysRunIndividualPluginEnabledStateDescription">此策略控制列表中每个快捷启动器插件的启用状态。

如果策略设置为“已启用”,你可以在列表中定义某个插件和其启用状态:
  - 值名称(第一列)填入插件 ID,可以在插件文件夹内 plugin.json 文件中找到对应 ID。
  - 值(第二列)填入数字,0 代表禁用,1 代表启用,2 代表由用户控制。
  - 这是禁用“应用程序”插件的例子: 791FC278BA414111B8D1886DFE447410 | 0

如果策略设置为“已禁用”或“未配置”,用户或“配置所有插件的启用状态”可以控制插件的启用状态。

启用该策略后,你可以通过“配置所有插件的启用状态”策略,来控制列表外的其他插件的启用状态。

注意:更改需要重新启动快捷启动器才能应用。
</string>
      <string id="AllowPowerToysAdvancedPasteOnlineAIModelsDescription">此策略可以禁用高级粘贴的在线 AI 模型。

如果策略设置为“已启用”或“未配置”,用户可以设置是否启用 AI 粘贴功能。

如果策略设置为“已禁用”,用户不可以启用 AI 粘贴功能,不可以在粘贴面板中输入 AI 提示词,也不能配置 OpenAI 密钥。
</string>
      <string id="MwbClipboardSharingEnabledDescription">此策略控制是否允许在多台设备之间同步剪贴板。

如果策略设置为“已启用”或“未配置”,用户可以自由地启用共享剪贴板功能。

如果策略设置为“已禁用”,该功能将始终禁用,用户不可以启用这个功能。
</string>
      <string id="MwbFileTransferEnabledDescription">此策略控制是否允许在多台设备间传输剪贴板文件。

如果策略设置为“已启用”或“未配置”,用户可以自由地启用共享文件功能。

如果策略设置为“已禁用”,该功能将始终禁用,用户不可以启用这个功能。

注意:共享文件需要开启共享剪贴板。如果禁用共享剪贴板,共享文件也将自动禁用。
</string>
      <string id="MwbUseOriginalUserInterfaceDescription">此策略控制是否允许使用旧版无界鼠标界面。

如果策略设置为“已启用”或“未配置”,用户可以自由地启用旧版界面。

如果策略设置为“已禁用”,用户不可以启用旧版界面。
</string>
      <string id="MwbDisallowBlockingScreensaverDescription">此策略控制是否允许关闭被控电脑上的屏幕保护程序。

如果策略设置为“已启用”,用户无法启用阻止屏保功能,被控电脑的屏幕保护程序不会受到影响。

如果策略设置为“已禁用”或“未配置”,用户可以自由地启用阻止屏保。
</string>

      <string id="MwbSameSubnetOnlyDescription">此策略控制是否仅允许同一内网的连接。

如果策略设置为“已启用”,该功能将始终启用,只允许连接到同一内网的电脑。

如果策略设置为“已禁用”,该功能将始终禁用,允许所有连接。

如果策略设置为“未配置”,用户可以自由地启用和禁用这个功能。
</string>
      <string id="MwbValidateRemoteIpDescription">此策略控制是否通过反向 DNS 查找来验证被控设备 IP 地址。

如果策略设置为“已启用”,该功能将始终启用,验证 IP 地址。

如果策略设置为“已禁用”,该功能将始终禁用,不验证 IP 地址。

如果策略设置为“未配置”,用户可以自由地启用和禁用这个功能。
</string>
      <string id="MwbDisableUserDefinedIpMappingRulesDescription">此策略控制是否允许用户设定 IP 地址映射。

如果策略设置为“已启用”,该功能将始终禁用,用户无法设定和使用 IP 地址映射规则。

如果策略设置为“已禁用”或“未配置”,用户可以自由地启用和禁用这个功能。

注意:启用该策略并不会影响组策略的预设 IP 地址映射生效。
</string>
      <string id="MwbPolicyDefinedIpMappingRulesDescription">此策略可以设定 IP 地址映射规则。

如果策略设置为“已启用”,可以设定强制的 IP 地址映射规则,用户无法改动或禁用。
请按此格式输入,每行一个:"hostname IP"

如果策略设置为“已禁用”或“未配置”,不使用预设规则。
</string>
      <string id="NewPlusHideTemplateFilenameExtensionDescription">此策略控制是否显示模板文件的扩展名。

如果策略设置为“已启用”,该功能将始终启用,隐藏模板文件扩展名。

如果策略设置为“已禁用”,该功能将始终禁用,显示模板文件扩展名。

如果策略设置为“未配置”,用户可以自由地启用和禁用这个功能。
</string>

      <string id="ConfigureAllUtilityGlobalEnabledState">配置所有功能的启用状态</string>
      <string id="ConfigureEnabledUtilityAdvancedPaste">高级粘贴: 启用该功能</string>
      <string id="ConfigureEnabledUtilityAlwaysOnTop">窗口置顶: 启用该功能</string>
      <string id="ConfigureEnabledUtilityAwake">阻止睡眠: 启用该功能</string>
      <string id="ConfigureEnabledUtilityColorPicker">取色器: 启用该功能</string>
      <string id="ConfigureEnabledUtilityCmdNotFound">未找到命令: 启用该功能</string>
      <string id="ConfigureEnabledUtilityCropAndLock">窗口镜像: 启用该功能</string>
      <string id="ConfigureEnabledUtilityEnvironmentVariables">环境变量: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFancyZones">窗口布局: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFileLocksmith">文件开锁匠: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFileExplorerSVGPreview">预览增强 - SVG 文件预览: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFileExplorerMarkdownPreview">预览增强 - Markdown 文件预览: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFileExplorerMonacoPreview">预览增强 - 代码文件预览: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFileExplorerPDFPreview">预览增强 - PDF 文件预览: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFileExplorerGcodePreview">预览增强 - Gcode 文件预览: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFileExplorerSVGThumbnails">预览增强 - SVG 文件缩略图: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFileExplorerPDFThumbnails">预览增强 - PDF 文件缩略图: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFileExplorerGcodeThumbnails">预览增强 - Gcode 文件缩略图: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFileExplorerSTLThumbnails">预览增强 - STL 文件缩略图: 启用该功能</string>
      <string id="ConfigureEnabledUtilityHostsFileEditor">域名表: 启用该功能</string>
      <string id="ConfigureEnabledUtilityImageResizer">图像裁剪器: 启用该功能</string>
      <string id="ConfigureEnabledUtilityKeyboardManager">键盘修改器: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFindMyMouse">鼠标工具箱 - 鼠标定位: 启用该功能</string>
      <string id="ConfigureEnabledUtilityMouseHighlighter">鼠标工具箱 - 鼠标高亮: 启用该功能</string>
      <string id="ConfigureEnabledUtilityMouseJump">鼠标工具箱 - 鼠标跳转: 启用该功能</string>
      <string id="ConfigureEnabledUtilityMousePointerCrosshairs">鼠标工具箱 - 鼠标准心: 启用该功能</string>
      <string id="ConfigureEnabledUtilityMouseWithoutBorders">无界鼠标: 启用该功能</string>
      <string id="ConfigureEnabledUtilityNewPlus">新建+: 启用该功能</string>
      <string id="ConfigureEnabledUtilityPeek">快速查看: 启用该功能</string>
      <string id="ConfigureEnabledUtilityPowerRename">批量重命名: 启用该功能</string>
      <string id="ConfigureEnabledUtilityPowerLauncher">快捷启动器: 启用该功能</string>
      <string id="ConfigureEnabledUtilityWorkspaces">工作区: 启用该功能</string>
      <string id="ConfigureEnabledUtilityQuickAccent">字母助手: 启用该功能</string>
      <string id="ConfigureEnabledUtilityRegistryPreview">注册表预览: 启用该功能</string>
      <string id="ConfigureEnabledUtilityScreenRuler">屏幕标尺: 启用该功能</string>
      <string id="ConfigureEnabledUtilityShortcutGuide">快捷键指南: 启用该功能</string>
      <string id="ConfigureEnabledUtilityTextExtractor">文本提取: 启用该功能</string>
      <string id="ConfigureEnabledUtilityVideoConferenceMute">直播工具: 启用该功能</string>
      <string id="ConfigureEnabledUtilityZoomIt">演示工具:启用该功能</string>
      <string id="DisablePerUserInstallation">禁用单用户安装</string>
      <string id="DisableAutomaticUpdateDownload">禁用自动下载更新</string>
      <string id="DoNotShowWhatsNewAfterUpdates">禁用更新日志弹窗</string>
      <string id="SuspendNewUpdateToast">减少新版本更新消息推送</string>
      <string id="DisableNewUpdateToast">禁用新版本更新消息推送</string>
      <string id="AllowExperimentation">允许功能测试</string>
      <string id="PowerToysRunAllPluginsEnabledState">配置所有插件的启用状态</string>
      <string id="PowerToysRunIndividualPluginEnabledState">配置特定插件的启用状态</string>
      <string id="ConfigureEnabledUtilityFileExplorerQOIPreview">预览增强 - QOI 文件预览: 启用该功能</string>
      <string id="ConfigureEnabledUtilityFileExplorerQOIThumbnails">预览增强 - QOI 文件缩略图: 启用该功能</string>
      <string id="AllowPowerToysAdvancedPasteOnlineAIModels">允许使用在线 AI 模型</string>
      <string id="MwbClipboardSharingEnabled">启用共享剪贴板</string>
      <string id="MwbFileTransferEnabled">启用文件传输</string>
      <string id="MwbUseOriginalUserInterface">启用原版界面</string>
      <string id="MwbDisallowBlockingScreensaver">禁用阻止屏保</string>
      <string id="MwbSameSubnetOnly">仅允许内网控制</string>
      <string id="MwbValidateRemoteIp">验证远程设备 IP 地址</string>
      <string id="MwbDisableUserDefinedIpMappingRules">禁用自定义 IP 地址映射</string>
      <string id="MwbPolicyDefinedIpMappingRules">预设 IP 地址映射规则</string>
      <string id="NewPlusHideTemplateFilenameExtension">隐藏模板文件扩展名</string>
      <string id="AllowDiagnosticData">允许发送诊断数据</string>
    </stringTable>

    <presentationTable>
      <presentation id="PowerToysRunIndividualPluginEnabledState">
        <listBox refId="PowerToysRunIndividualPluginEnabledList">插件管理列表:</listBox>
      </presentation>
      <presentation id="MwbPolicyDefinedIpMappingRules">
        <multiTextBox refId="MwbPolicyDefinedIpMappingsList">IP 地址映射列表:</multiTextBox>
      </presentation>
    </presentationTable>

  </resources>
</policyDefinitionResources>



================================================
FILE: PowerToys/src/modules/AdvancedPaste/AdvancedPaste/Strings/en-us/Resources.resw
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="AIMistakeNote.Text" xml:space="preserve">
    <value>注意 AI 也可能会犯错</value>
  </data>
  <data name="ClipboardEmptyWarning" xml:space="preserve">
    <value>剪贴板为空</value>
  </data>
  <data name="OpenAINotConfigured" xml:space="preserve">
    <value>未启用 AI 粘贴功能</value>
  </data>
  <data name="OpenAIApiKeyUnauthorized" xml:space="preserve">
    <value>API 密钥或接入点无效</value>
  </data>
  <data name="OpenAIApiKeyTooManyRequests" xml:space="preserve">
    <value>API 密钥额度已用尽</value>
  </data>
  <data name="OpenAIApiKeyError" xml:space="preserve">
    <value>OpenAI 请求失败,返回状态码: </value>
  </data>
  <data name="PasteError" xml:space="preserve">
    <value>粘贴时出现问题</value>
  </data>
  <data name="PasteActionModerated" xml:space="preserve">
    <value>内容包含敏感信息,无法处理。请试试其他内容。</value>
  </data>
  <data name="ClipboardHistoryButton.Text" xml:space="preserve">
    <value>剪贴板历史记录</value>
  </data>
  <data name="ClipboardHistoryButton.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>剪贴板历史记录</value>
  </data>
  <data name="ClipboardHistoryImage" xml:space="preserve">
    <value>图片数据</value>
  </data>
  <data name="ClipboardHistoryItemMoreOptionsButton.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>更多选项</value>
  </data>
  <data name="ClipboardHistoryItemDeleteButton.Text" xml:space="preserve">
    <value>删除</value>
  </data>
  <data name="CustomFormatTextBox.PlaceholderText" xml:space="preserve">
    <value>告诉我你想要什么格式..</value>
  </data>
  <data name="InputTxtBoxTooltip.Text" xml:space="preserve">
    <value>告诉我你想要什么格式..</value>
  </data>
  <data name="LearnMoreLink.Text" xml:space="preserve">
    <value>隐私政策</value>
  </data>
  <data name="LoadingText.Text" xml:space="preserve">
    <value>正在生成结果..</value>
  </data>
  <data name="PasteAsJson" xml:space="preserve">
    <value>粘贴为 JSON</value>
  </data>
  <data name="PasteAsMarkdown" xml:space="preserve">
    <value>粘贴为 Markdown</value>
  </data>
  <data name="PasteAsPlainText" xml:space="preserve">
    <value>粘贴为纯文本</value>
  </data>
  <data name="ImageToText" xml:space="preserve">
    <value>图像转文本</value>
  </data>
  <data name="PasteAsTxtFile" xml:space="preserve">
    <value>粘贴为 .txt 文件</value>
  </data>
  <data name="PasteAsPngFile" xml:space="preserve">
    <value>粘贴为 .png 文件</value>
  </data>
  <data name="PasteAsHtmlFile" xml:space="preserve">
    <value>粘贴为 .html 文件</value>
  </data>  
  <data name="PasteButtonAutomation.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>粘贴</value>
  </data>
  <data name="PasteText.Text" xml:space="preserve">
    <value>粘贴</value>
  </data>
  <data name="ResultTitleTxt.Text" xml:space="preserve">
    <value>结果</value>
  </data>
  <data name="RecallBtnToolTip.Text" xml:space="preserve">
    <value>回到上一次的提示词与剪贴板数据</value>
  </data>
  <data name="RecallButtonAutomation.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>回到上一次的提示词与剪贴板数据</value>
  </data>
  <data name="SendBtnToolTip.Text" xml:space="preserve">
    <value>生成并粘贴数据</value>
  </data>
  <data name="RegenerateBtnToolTip.Text" xml:space="preserve">
    <value>重新生成</value>
  </data>
  <data name="RegenerateBtnAutomation.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>重新生成</value>
  </data>
  <data name="SendButtonAutomation.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>生成并粘贴数据</value>
  </data>
  <data name="SettingsBtn.Content" xml:space="preserve">
    <value>打开设置</value>
  </data>
  <data name="SettingsBtn.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
    <value>打开设置</value>
  </data>
  <data name="AIErrorMessage.Header" xml:space="preserve">
    <value>AI 助手给出了如下消息:</value>
  </data>
  <data name="ThumbsDownFeedback.Text" xml:space="preserve">
    <value>差评</value>
  </data>
  <data name="ThumbsUpFeedback.Text" xml:space="preserve">
    <value>好评</value>
  </data>
  <data name="WindowTitle" xml:space="preserve">
    <value>高级粘贴</value>
  </data>
  <data name="PreviousResultBtnToolTip.Text" xml:space="preserve">
    <value>上一条</value>
  </data>
  <data name="PreviousResultBtnAutomation.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>上一条</value>
  </data>
  <data name="NextResultBtnToolTip.Text" xml:space="preserve">
    <value>下一条</value>
  </data>
  <data name="NextResultBtnAutomation.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>下一条</value>
  </data>
  <data name="PrivacyLink.Text" xml:space="preserve">
    <value>OpenAI 隐私政策</value>
  </data>
  <data name="TermsLink.Text" xml:space="preserve">
    <value>OpenAI 使用条款</value>
  </data>
  <data name="OpenAIGpoDisabled" xml:space="preserve">
    <value>组策略已禁止 AI 功能</value>
  </data>
  <data name="CtrlKey" xml:space="preserve">
    <value>Ctrl</value>
  </data>
  <data name="PasteAsFile_FilePrefix" xml:space="preserve">
    <value>PowerToys_Paste_</value>
  </data>
</root>

================================================
FILE: PowerToys/src/modules/CropAndLock/CropAndLock/main.cpp
================================================
#include "pch.h"
#include "SettingsWindow.h"
#include "OverlayWindow.h"
#include "CropAndLockWindow.h"
#include "ThumbnailCropAndLockWindow.h"
#include "ReparentCropAndLockWindow.h"
#include "ModuleConstants.h"
#include "trace.h"

#include <common/interop/shared_constants.h>

#include <common/utils/gpo.h>
#include <common/utils/logger_helper.h>
#include <common/utils/ProcessWaiter.h>
#include <common/utils/UnhandledExceptionHandler.h>
#include <common/utils/winapi_error.h>

#include <common/Telemetry/EtwTrace/EtwTrace.h>

#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

namespace winrt
{
    using namespace Windows::Foundation;
    using namespace Windows::Foundation::Numerics;
    using namespace Windows::UI;
    using namespace Windows::UI::Composition;
}

namespace util
{
    using namespace robmikh::common::desktop;
}

const std::wstring instanceMutexName = L"Local\\PowerToys_CropAndLock_InstanceMutex";
bool m_running = true;

int WINAPI wWinMain(_In_ HINSTANCE, _In_opt_ HINSTANCE, _In_ PWSTR lpCmdLine, _In_ int)
{
    // Initialize COM
    winrt::init_apartment(winrt::apartment_type::single_threaded);

    Trace::CropAndLock::RegisterProvider();

    Shared::Trace::ETWTrace trace;
    trace.UpdateState(true);

    // Initialize logger automatic logging of exceptions.
    LoggerHelpers::init_logger(NonLocalizable::ModuleKey, L"", LogSettings::cropAndLockLoggerName);
    InitUnhandledExceptionHandler();

    if (powertoys_gpo::getConfiguredCropAndLockEnabledValue() == powertoys_gpo::gpo_rule_configured_disabled)
    {
        Logger::warn(L"Tried to start with a GPO policy setting the utility to always be disabled. Please contact your systems administrator.");
        return 0;
    }

    // Before we do anything, check to see if we're already running. If we are,
    // the hotkey won't register and we'll fail. Instead, we should tell the user
    // to kill the other instance and exit this one.
    auto mutex = CreateMutex(nullptr, true, instanceMutexName.c_str());
    if (mutex == nullptr)
    {
        Logger::error(L"Failed to create mutex. {}", get_last_error_or_default(GetLastError()));
    }

    if (GetLastError() == ERROR_ALREADY_EXISTS)
    {
        // CropAndLock is already open.
        return 1;
    }

    std::wstring pid = std::wstring(lpCmdLine);
    if (pid.empty())
    {
        Logger::warn(L"Tried to run Crop And Lock as a standalone.");
        MessageBoxW(nullptr, L"窗口镜像功能不能独立使用,请从 PowerToys 启动。", L"CropAndLock", MB_ICONERROR);
        return 1;
    }

    auto mainThreadId = GetCurrentThreadId();
    ProcessWaiter::OnProcessTerminate(pid, [mainThreadId](int err) {
        if (err != ERROR_SUCCESS)
        {
            Logger::error(L"Failed to wait for parent process exit. {}", get_last_error_or_default(err));
        }
        else
        {
            Logger::trace(L"PowerToys runner exited.");
        }

        Logger::trace(L"Exiting CropAndLock");
        PostThreadMessage(mainThreadId, WM_QUIT, 0, 0);
    });

    // NOTE: reparenting a window with a different DPI context has consequences.
    //       See https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setparent#remarks
    //       for more info.
    winrt::check_bool(SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2));

    // Create the DispatcherQueue that the compositor needs to run
    auto controller = util::CreateDispatcherQueueControllerForCurrentThread();

    // Setup Composition
    auto compositor = winrt::Compositor();

    // Create our overlay window
    std::unique_ptr<OverlayWindow> overlayWindow;

    // Keep a list of our cropped windows
    std::vector<std::shared_ptr<CropAndLockWindow>> croppedWindows;

    // Handles and thread for the events sent from runner
    HANDLE m_reparent_event_handle;
    HANDLE m_thumbnail_event_handle;
    HANDLE m_exit_event_handle;
    std::thread m_event_triggers_thread;

    std::function<void(HWND)> removeWindowCallback = [&](HWND windowHandle) {
        if (!m_running)
        {
            // If we're not running, the reference to croppedWindows might no longer be valid and cause a crash at exit time, due to being called by destructors after wWinMain returns.
            return;
        }

        auto pos = std::find_if(croppedWindows.begin(), croppedWindows.end(), [windowHandle](auto window) { return window->Handle() == windowHandle; });
        if (pos != croppedWindows.end())
        {
            croppedWindows.erase(pos);
        }
    };

    std::function<void(CropAndLockType)> ProcessCommand = [&](CropAndLockType mode) {
        std::function<void(HWND, RECT)> windowCroppedCallback = [&, mode](HWND targetWindow, RECT cropRect) {
            auto targetInfo = util::WindowInfo(targetWindow);
            // TODO: Fix WindowInfo.h to not contain the null char at the end.
            auto nullCharIndex = std::wstring::npos;
            do
            {
                nullCharIndex = targetInfo.Title.rfind(L'\0');
                if (nullCharIndex != std::wstring::npos)
                {
                    targetInfo.Title.erase(nullCharIndex);
                }
            } while (nullCharIndex != std::wstring::npos);

            std::wstringstream titleStream;
            titleStream << targetInfo.Title << L" (镜像)";
            auto title = titleStream.str();

            std::shared_ptr<CropAndLockWindow> croppedWindow;
            switch (mode)
            {
            case CropAndLockType::Reparent:
                croppedWindow = std::make_shared<ReparentCropAndLockWindow>(title, 800, 600);
                Logger::trace(L"Creating a reparent window");
                Trace::CropAndLock::CreateReparentWindow();
                break;
            case CropAndLockType::Thumbnail:
                croppedWindow = std::make_shared<ThumbnailCropAndLockWindow>(title, 800, 600);
                Logger::trace(L"Creating a thumbnail window");
                Trace::CropAndLock::CreateThumbnailWindow();
                break;
            default:
                return;
            }
            croppedWindow->CropAndLock(targetWindow, cropRect);
            croppedWindow->OnClosed(removeWindowCallback);
            croppedWindows.push_back(croppedWindow);
        };

        overlayWindow.reset();

        // Get the current window with focus
        auto foregroundWindow = GetForegroundWindow();
        if (foregroundWindow != nullptr)
        {
            bool match = false;
            for (auto&& croppedWindow : croppedWindows)
            {
                if (foregroundWindow == croppedWindow->Handle())
                {
                    match = true;
                    break;
                }
            }
            if (!match)
            {
                overlayWindow = std::make_unique<OverlayWindow>(compositor, foregroundWindow, windowCroppedCallback);
            }
        }
    };

    // Start a thread to listen on the events.
    m_reparent_event_handle = CreateEventW(nullptr, false, false, CommonSharedConstants::CROP_AND_LOCK_REPARENT_EVENT);
    m_thumbnail_event_handle = CreateEventW(nullptr, false, false, CommonSharedConstants::CROP_AND_LOCK_THUMBNAIL_EVENT);
    m_exit_event_handle = CreateEventW(nullptr, false, false, CommonSharedConstants::CROP_AND_LOCK_EXIT_EVENT);
    if (!m_reparent_event_handle || !m_thumbnail_event_handle || !m_exit_event_handle)
    {
        Logger::warn(L"Failed to create events. {}", get_last_error_or_default(GetLastError()));
        return 1;
    }

    m_event_triggers_thread = std::thread([&]() {
        MSG msg;
        HANDLE event_handles[3] = { m_reparent_event_handle, m_thumbnail_event_handle, m_exit_event_handle };
        while (m_running)
        {
            DWORD dwEvt = MsgWaitForMultipleObjects(3, event_handles, false, INFINITE, QS_ALLINPUT);
            if (!m_running)
            {
                break;
            }
            switch (dwEvt)
            {
            case WAIT_OBJECT_0:
            {
                // Reparent Event
                bool enqueueSucceeded = controller.DispatcherQueue().TryEnqueue([&]() {
                    ProcessCommand(CropAndLockType::Reparent);
                });
                if (!enqueueSucceeded)
                {
                    Logger::error("Couldn't enqueue message to reparent a window.");
                }
                break;
            }
            case WAIT_OBJECT_0 + 1:
            {
                // Thumbnail Event
                bool enqueueSucceeded = controller.DispatcherQueue().TryEnqueue([&]() {
                    ProcessCommand(CropAndLockType::Thumbnail);
                });
                if (!enqueueSucceeded)
                {
                    Logger::error("Couldn't enqueue message to thumbnail a window.");
                }
                break;
            }
            case WAIT_OBJECT_0 + 2:
            {
                // Exit Event
                Logger::trace(L"Received an exit event.");
                PostThreadMessage(mainThreadId, WM_QUIT, 0, 0);
                break;
            }
            case WAIT_OBJECT_0 + 3:
                if (PeekMessageW(&msg, nullptr, 0, 0, PM_REMOVE))
                {
                    TranslateMessage(&msg);
                    DispatchMessageW(&msg);
                }
                break;
            default:
                break;
            }
        }
    });

    // Message pump
    MSG msg = {};
    while (GetMessageW(&msg, nullptr, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessageW(&msg);
    }

    trace.Flush();

    Trace::CropAndLock::UnregisterProvider();

    m_running = false;
    // Needed to unblock MsgWaitForMultipleObjects one last time
    SetEvent(m_reparent_event_handle);
    CloseHandle(m_reparent_event_handle);
    CloseHandle(m_thumbnail_event_handle);
    CloseHandle(m_exit_event_handle);
    m_event_triggers_thread.join();

    return util::ShutdownDispatcherQueueControllerAndWait(controller, static_cast<int>(msg.wParam));
}


================================================
FILE: PowerToys/src/modules/EnvironmentVariables/EnvironmentVariablesUILib/Strings/en-us/Resources.resw
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="DefaultSetsLabel.Text" xml:space="preserve">
    <value>默认变量</value>
  </data>
  <data name="DefaultVariablesLbl.Text" xml:space="preserve">
    <value>默认变量</value>
  </data>
  <data name="NewProfileBtn.Text" xml:space="preserve">
    <value>新建模板</value>
  </data>
  <data name="ProfilesDescriptionLbl.Text" xml:space="preserve">
    <value>通过模板来快速设定一组环境变量预设,模板变量优先于用户和系统变量。</value>
  </data>
  <data name="ProfilesLbl.Text" xml:space="preserve">
    <value>模板</value>
  </data>
  <data name="System" xml:space="preserve">
    <value>系统</value>
  </data>
  <data name="User" xml:space="preserve">
    <value>用户</value>
  </data>
  <data name="WindowTitle" xml:space="preserve">
    <value>环境变量编辑器</value>
    <comment>Title of the window when running as user</comment>
  </data>
  <data name="EditDialog.CloseButtonText" xml:space="preserve">
    <value>取消</value>
  </data>
  <data name="EditVariableDialog_Title" xml:space="preserve">
    <value>编辑变量</value>
  </data>
  <data name="NewProfileNameTxtBox.Header" xml:space="preserve">
    <value>名称</value>
  </data>
  <data name="SaveBtn" xml:space="preserve">
    <value>保存</value>
  </data>
  <data name="ValueTxtBox.Header" xml:space="preserve">
    <value>值</value>
  </data>
  <data name="AddBtn" xml:space="preserve">
    <value>保存</value>
  </data>
  <data name="AddNewProfileDialog_Title" xml:space="preserve">
    <value>新建模板</value>
  </data>
  <data name="NewProfileEnabled.Header" xml:space="preserve">
    <value>立即应用</value>
  </data>
  <data name="AddVariableBtn.Text" xml:space="preserve">
    <value>添加变量</value>
  </data>
  <data name="AddNewVariableName.Header" xml:space="preserve">
    <value>名称</value>
    <comment>Name as in Environment variable name</comment>
  </data>
  <data name="AddNewVariableValue.Header" xml:space="preserve">
    <value>值</value>
    <comment>Value as in Environment variable value</comment>
  </data>
  <data name="ExistingVariableSegmentedButton.Content" xml:space="preserve">
    <value>已有变量</value>
  </data>
  <data name="NewVariableSegmentedButton.Content" xml:space="preserve">
    <value>新建变量</value>
  </data>
  <data name="WindowAdminTitle" xml:space="preserve">
    <value>管理员权限: 环境变量编辑器</value>
    <comment>Title of the window when running as administrator</comment>
  </data>
  <data name="CancelAddVariableBtn.Content" xml:space="preserve">
    <value>取消</value>
  </data>
  <data name="ConfirmAddVariableBtn.Content" xml:space="preserve">
    <value>添加</value>
  </data>
  <data name="AppliedVariablesDescriptionLbl.Text" xml:space="preserve">
    <value>当前所有环境变量,包括模板、用户和系统所设置的变量。</value>
  </data>
  <data name="AppliedVariablesLbl.Text" xml:space="preserve">
    <value>当前变量</value>
  </data>
  <data name="NewProfileVariablesListViewHeader.Text" xml:space="preserve">
    <value>变量</value>
  </data>
  <data name="DeleteMenuItem.Text" xml:space="preserve">
    <value>删除</value>
  </data>
  <data name="Delete_Dialog_Description" xml:space="preserve">
    <value>确定删除此模板?如果该模板已启用,它添加的变量也将被删除。</value>
  </data>
  <data name="EditSystemDefaultSetInfoBar.Text" xml:space="preserve">
    <value>编辑系统环境变量需要管理员权限</value>
  </data>
  <data name="No" xml:space="preserve">
    <value>否</value>
  </data>
  <data name="Yes" xml:space="preserve">
    <value>是</value>
  </data>
  <data name="StateNotUpToDateTitle" xml:space="preserve">
    <value>变量发生改动</value>
  </data>
  <data name="StateNotUpToDateOnStartupMsg" xml:space="preserve">
    <value>由模板添加的变量已被修改,在重新启用模板前,请检查改动情况</value>
  </data>
  <data name="CancelBtn" xml:space="preserve">
    <value>取消</value>
  </data>
  <data name="StateNotUpToDateEnvironmentMessageReceivedMsg" xml:space="preserve">
    <value>变量已被其他程序修改,刷新获取最新值</value>
  </data>
  <data name="AddVariable_Title" xml:space="preserve">
    <value>添加变量</value>
  </data>
  <data name="Delete_Variable_Description" xml:space="preserve">
    <value>确定删除这个变量吗?</value>
  </data>
  <data name="EditProfileDialog_Title" xml:space="preserve">
    <value>编辑模板</value>
  </data>
  <data name="AddVariableTooltip.Text" xml:space="preserve">
    <value>添加变量</value>
  </data>
  <data name="DefaultVariablesDescriptionLbl.Text" xml:space="preserve">
    <value>修改用户和系统的环境变量。</value>
  </data>
  <data name="EditItem.Text" xml:space="preserve">
    <value>编辑</value>
  </data>
  <data name="More_Options_ButtonTooltip.Text" xml:space="preserve">
    <value>更多选项</value>
  </data>
  <data name="MoveDown.Text" xml:space="preserve">
    <value>下移</value>
  </data>
  <data name="MoveUp.Text" xml:space="preserve">
    <value>上移</value>
  </data>
  <data name="InsertListEntryBefore.Text" xml:space="preserve">
    <value>在前面插入</value>
  </data>
  <data name="InsertListEntryAfter.Text" xml:space="preserve">
    <value>在后面插入</value>
  </data>
  <data name="NewProfileVariablesListViewApplyToSystemHeader.Text" xml:space="preserve">
    <value>应用到系统?</value>
  </data>
  <data name="RemoveListItem.Text" xml:space="preserve">
    <value>删除</value>
  </data>
  <data name="RemoveItem.Text" xml:space="preserve">
    <value>删除</value>
  </data>
  <data name="AddVariableContent.Content" xml:space="preserve">
    <value>添加变量</value>
  </data>
  <data name="ProfileNotApplicableTitle" xml:space="preserve">
    <value>无法应用模板。</value>
  </data>
  <data name="StateProfileNotApplicableMsg" xml:space="preserve">
    <value>变量或备份变量无效。</value>
  </data>
  <data name="VariableIsAppliedByActiveProfileTooltip.Text" xml:space="preserve">
    <value>该变量由已启用的模板写入</value>
  </data>
</root>

================================================
FILE: PowerToys/src/modules/FileLocksmith/FileLocksmithContextMenu/Resources.resx
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root"
    xmlns=""
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="File_Locksmith_Context_Menu_Entry" xml:space="preserve">
    <value>查看文件占用</value>
    <comment>This text will be shown when the user opens the context menu (right clicks) a file. File Locksmith is the product name, do not loc.</comment>
  </data>
  <data name="File_Locksmith_App_Name" xml:space="preserve">
    <value>文件开锁匠</value>
  </data>
</root>

================================================
FILE: PowerToys/src/modules/FileLocksmith/FileLocksmithContextMenu/dllmain.cpp
================================================
// dllmain.cpp : Defines the entry point for the DLL application.
#include "pch.h"

#include <common/telemetry/EtwTrace/EtwTrace.h>
#include <common/utils/process_path.h>
#include <common/utils/resources.h>
#include <common/utils/elevation.h>

#include "FileLocksmithLib/IPC.h"
#include "FileLocksmithLib/Settings.h"
#include "FileLocksmithLib/Trace.h"

#include <Shlwapi.h>
#include <shobjidl_core.h>
#include <string>
#include <wrl/module.h>

#include "Generated Files/resource.h"


using namespace Microsoft::WRL;

HINSTANCE g_hInst = 0;
Shared::Trace::ETWTrace trace(L"FileLocksmithContextMenu");

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
        g_hInst = hModule;
        Trace::RegisterProvider();
        break;
    case DLL_PROCESS_DETACH:
        Trace::UnregisterProvider();
        break;
    }
    return TRUE;
}

class __declspec(uuid("AAF1E27D-4976-49C2-8895-AAFA743C0A7E")) FileLocksmithContextMenuCommand final : public RuntimeClass<RuntimeClassFlags<ClassicCom>, IExplorerCommand, IObjectWithSite>
{
public:
    virtual const wchar_t* Title() { return L"File Locksmith"; }
    virtual const EXPCMDFLAGS Flags() { return ECF_DEFAULT; }
    virtual const EXPCMDSTATE State(_In_opt_ IShellItemArray* selection) { return ECS_ENABLED; }

    // IExplorerCommand
    IFACEMETHODIMP GetTitle(_In_opt_ IShellItemArray* items, _Outptr_result_nullonfailure_ PWSTR* name)
    {
        return SHStrDup(context_menu_caption.c_str(), name);
    }

    IFACEMETHODIMP GetIcon(_In_opt_ IShellItemArray*, _Outptr_result_nullonfailure_ PWSTR* icon)
    {
        std::wstring iconResourcePath = get_module_folderpath(g_hInst);
        iconResourcePath += L"\\Assets\\FileLocksmith\\";
        iconResourcePath += L"FileLocksmith.ico";
        return SHStrDup(iconResourcePath.c_str(), icon);
    }

    IFACEMETHODIMP GetToolTip(_In_opt_ IShellItemArray*, _Outptr_result_nullonfailure_ PWSTR* infoTip)
    {
        *infoTip = nullptr;
        return E_NOTIMPL;
    }

    IFACEMETHODIMP GetCanonicalName(_Out_ GUID* guidCommandName)
    {
        *guidCommandName = __uuidof(this);
        return S_OK;
    }

    IFACEMETHODIMP GetState(_In_opt_ IShellItemArray* selection, _In_ BOOL okToBeSlow, _Out_ EXPCMDSTATE* cmdState)
    {
        *cmdState = ECS_ENABLED;

        if (!FileLocksmithSettingsInstance().GetEnabled())
        {
            *cmdState = ECS_HIDDEN;
        }

        if (FileLocksmithSettingsInstance().GetShowInExtendedContextMenu())
        {
            *cmdState = ECS_HIDDEN;
        }

        return S_OK;
    }

    IFACEMETHODIMP Invoke(_In_opt_ IShellItemArray* selection, _In_opt_ IBindCtx*) noexcept
    {
        trace.UpdateState(true);

        Trace::Invoked();
        ipc::Writer writer;

        if (selection == nullptr)
        {
            return S_OK;
        }

        if (HRESULT result = writer.start(); FAILED(result))
        {
            Trace::InvokedRet(result);

            trace.Flush();
            trace.UpdateState(false);
            return result;
        }

        std::wstring path = get_module_folderpath(g_hInst);
        path = path + L"\\PowerToys.FileLocksmithUI.exe";

        HRESULT result;

        if (!RunNonElevatedEx(path.c_str(), L"", get_module_folderpath(g_hInst)))
        {
            result = E_FAIL;
            Trace::InvokedRet(result);

            trace.Flush();
            trace.UpdateState(false);

            return result;
        }

        DWORD num_items;
        selection->GetCount(&num_items);

        for (DWORD i = 0; i < num_items; i++)
        {
            IShellItem* item;
            result = selection->GetItemAt(i, &item);
            if (SUCCEEDED(result))
            {
                LPWSTR file_path;
                result = item->GetDisplayName(SIGDN_FILESYSPATH, &file_path);
                if (SUCCEEDED(result))
                {
                    // TODO Aggregate items and send to UI
                    writer.add_path(file_path);
                    CoTaskMemFree(file_path);
                }

                item->Release();
            }
        }

        Trace::InvokedRet(S_OK);

        trace.Flush();
        trace.UpdateState(false);

        return S_OK;
    }

    IFACEMETHODIMP GetFlags(_Out_ EXPCMDFLAGS* flags)
    {
        *flags = Flags();
        return S_OK;
    }
    IFACEMETHODIMP EnumSubCommands(_COM_Outptr_ IEnumExplorerCommand** enumCommands)
    {
        *enumCommands = nullptr;
        return E_NOTIMPL;
    }

    // IObjectWithSite
    IFACEMETHODIMP SetSite(_In_ IUnknown* site) noexcept
    {
        m_site = site;
        return S_OK;
    }
    IFACEMETHODIMP GetSite(_In_ REFIID riid, _COM_Outptr_ void** site) noexcept { return m_site.CopyTo(riid, site); }

protected:
    ComPtr<IUnknown> m_site;

private:
    std::wstring context_menu_caption = GET_RESOURCE_STRING_FALLBACK(IDS_FILE_LOCKSMITH_CONTEXT_MENU_ENTRY, L"鿴ļռ"); // ANSI PLZ
};

CoCreatableClass(FileLocksmithContextMenuCommand)
CoCreatableClassWrlCreatorMapInclude(FileLocksmithContextMenuCommand)


STDAPI DllGetActivationFactory(_In_ HSTRING activatableClassId, _COM_Outptr_ IActivationFactory** factory)
{
    return Module<ModuleType::InProc>::GetModule().GetActivationFactory(activatableClassId, factory);
}

STDAPI DllCanUnloadNow()
{
    return Module<InProc>::GetModule().GetObjectCount() == 0 ? S_OK : S_FALSE;
}

STDAPI DllGetClassObject(_In_ REFCLSID rclsid, _In_ REFIID riid, _COM_Outptr_ void** instance)
{
    return Module<InProc>::GetModule().GetClassObject(rclsid, riid, instance);
}


================================================
FILE: PowerToys/src/modules/FileLocksmith/FileLocksmithExt/Resources.resx
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="FileLocksmith_Context_Menu_Entry" xml:space="preserve">
    <value>查看文件占用</value>
    <comment>This text will be shown when the user opens the context menu (right clicks) a file. File Locksmith is the product name, do not loc.</comment>
  </data>
  <data name="FileLocksmith_PowerToyName" xml:space="preserve">
    <value>文件开锁匠</value>
    <comment>Localized name of the PowerToy.</comment>
  </data>
</root>

================================================
FILE: PowerToys/src/modules/FileLocksmith/FileLocksmithUI/Strings/en-us/Resources.resw
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="AppTitle" xml:space="preserve">
    <value>文件开锁匠</value>
    <comment>Title of the window when running as user.</comment>
  </data>
  <data name="EmptyListDescription.Text" xml:space="preserve">
    <value>无占用</value>
  </data>
  <data name="EndTask.Text" xml:space="preserve">
    <value>结束任务</value>
  </data>
  <data name="Files.Text" xml:space="preserve">
    <value>占用文件</value>
  </data>
  <data name="ProcessFilesListDialog.Title" xml:space="preserve">
    <value>占用文件</value>
  </data>
  <data name="ProcessFilesListDialog.CloseButtonText" xml:space="preserve">
    <value>关闭</value>
    <comment>As in, close a dialog prompt.</comment>
  </data>
  <data name="PathsTooltipDescription.Text" xml:space="preserve">
    <value>点击查看所有选中文件</value>
    <comment>Paths as in file paths that were selected for the utility to check.</comment>
  </data>
  <data name="ProcessIsSystemUserWarning.Text" xml:space="preserve">
    <value>此为系统程序,结束它可能导致系统故障。</value>
  </data>
  <data name="SelectedFilesListDialog.Title" xml:space="preserve">
    <value>选中文件列表</value>
    <comment>Paths as in file paths that were selected for the utility to check.</comment>
  </data>
  <data name="SelectedFilesListDialog.CloseButtonText" xml:space="preserve">
    <value>关闭</value>
    <comment>As in, close a dialog prompt.</comment>
  </data>
  <data name="NoFilesSelected.Text" xml:space="preserve">
    <value>未选择文件</value>
  </data>
  <data name="ProcessID.Header" xml:space="preserve">
    <value>进程 ID</value>
  </data>
  <data name="Reload.Text" xml:space="preserve">
    <value>刷新</value>
  </data>
  <data name="RestartAsAdmin.Text" xml:space="preserve">
    <value>以管理员身份重启</value>
  </data>
  <data name="User.Header" xml:space="preserve">
    <value>用户</value>
  </data>
  <data name="AppAdminTitle" xml:space="preserve">
    <value>管理员权限: 文件开锁匠</value>
    <comment>Title of the window when running as administrator.</comment>
  </data>
  <data name="ShowProcessFiles.Text" xml:space="preserve">
    <value>查看</value>
    <comment>Show files for the selected process</comment>
  </data>
</root>

================================================
FILE: PowerToys/src/modules/Hosts/HostsUILib/Strings/en-us/Resources.resw
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!-- 
    Microsoft ResX Schema 
    
    Version 2.0
    
    The primary goals of this format is to allow a simple XML format 
    that is mostly human readable. The generation and parsing of the 
    various data types are done through the TypeConverter classes 
    associated with the data types.
    
    Example:
    
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
                
    There are any number of "resheader" rows that contain simple 
    name/value pairs.
    
    Each data row contains a name, and value. The row also contains a 
    type or mimetype. Type corresponds to a .NET class that support 
    text/value conversion through the TypeConverter architecture. 
    Classes that don't support this are serialized and stored with the 
    mimetype set.
    
    The mimetype is used for serialized objects, and tells the 
    ResXResourceReader how to depersist the object. This is currently not 
    extensible. For a given mimetype the value must be set accordingly:
    
    Note - application/x-microsoft.net.object.binary.base64 is the format 
    that the ResXResourceWriter will generate, however the reader can 
    read any of the formats listed below.
    
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with 
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array 
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="Active.Header" xml:space="preserve">
    <value>启用</value>
  </data>
  <data name="ActiveToggle.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>启用</value>
  </data>
  <data name="AddBtn" xml:space="preserve">
    <value>添加</value>
  </data>
  <data name="AddEntry.Text" xml:space="preserve">
    <value>添加条目</value>
  </data>
  <data name="AddEntryBtn.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>添加条目</value>
  </data>
  <data name="AddEntryBtn.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
    <value>添加条目 (Ctrl+N)</value>
  </data>
  <data name="AddEntryLink.Content" xml:space="preserve">
    <value>添加一个条目</value>
  </data>
  <data name="AdditionalLinesBtn.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>注释</value>
  </data>
  <data name="AdditionalLinesBtn.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
    <value>注释</value>
  </data>
  <data name="AdditionalLinesDialog.CloseButtonText" xml:space="preserve">
    <value>取消</value>
  </data>
  <data name="AdditionalLinesDialog.PrimaryButtonText" xml:space="preserve">
    <value>保存</value>
  </data>
  <data name="AdditionalLinesDialog.Title" xml:space="preserve">
    <value>注释</value>
  </data>
  <data name="AddNewEntryDialog_Title" xml:space="preserve">
    <value>添加条目</value>
  </data>
  <data name="Address.Header" xml:space="preserve">
    <value>地址</value>
    <comment>"Address" refers to the IP address of the entry</comment>
  </data>
  <data name="AddressFilter.Header" xml:space="preserve">
    <value>地址</value>
    <comment>"Address" refers to the IP address of the entry</comment>
  </data>
  <data name="ClearFiltersBtn.Content" xml:space="preserve">
    <value>清除筛选</value>
  </data>
  <data name="ClearFiltersBtn.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>清除筛选</value>
  </data>
  <data name="ClearFiltersLink.Content" xml:space="preserve">
    <value>清除筛选</value>
  </data>
  <data name="Comment.Header" xml:space="preserve">
    <value>备注</value>
    <comment>"Comment" refers to the comment of the entry</comment>
  </data>
  <data name="CommentFilter.Header" xml:space="preserve">
    <value>备注</value>
    <comment>"Comment" refers to the comment of the entry</comment>
  </data>
  <data name="Delete.Text" xml:space="preserve">
    <value>删除</value>
  </data>
  <data name="DeleteDialog.CloseButtonText" xml:space="preserve">
    <value>否</value>
  </data>
  <data name="DeleteDialog.PrimaryButtonText" xml:space="preserve">
    <value>是</value>
  </data>
  <data name="DeleteDialogAreYouSure.Text" xml:space="preserve">
    <value>确定删除此条目?</value>
  </data>
  <data name="DeleteEntryBtn.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>删除</value>
  </data>
  <data name="DeleteEntryBtn.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
    <value>删除 (Delete)</value>
    <comment>"Delete" between parentheses refers to the Delete keyboard key</comment>
  </data>
  <data name="Duplicate.Text" xml:space="preserve">
    <value>复制</value>
    <comment>Refers to the action of duplicate an existing entry</comment>
  </data>
  <data name="DuplicateEntryIcon.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
    <value>地址重复</value>
  </data>
  <data name="Edit.Text" xml:space="preserve">
    <value>编辑</value>
  </data>
  <data name="EmptyFilterResults.Text" xml:space="preserve">
    <value>无筛选结果</value>
  </data>
  <data name="EmptyHosts.Text" xml:space="preserve">
    <value>未储存任何条目</value>
    <comment>"Hosts" refers to the system hosts file, do not loc</comment>
  </data>
  <data name="Entries.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>条目</value>
  </data>
  <data name="EntryDialog.CloseButtonText" xml:space="preserve">
    <value>取消</value>
  </data>
  <data name="FileChanged.Message" xml:space="preserve">
    <value>域名表文件被其他软件改动。</value>
    <comment>"Hosts" refers to the system hosts file, do not loc</comment>
  </data>
  <data name="FileSaveError_FileInUse" xml:space="preserve">
    <value>无法保存域名表文件,因为文件被其他软件所占用。</value>
    <comment>"Hosts" refers to the system hosts file, do not loc</comment>
  </data>
  <data name="FileSaveError_Generic" xml:space="preserve">
    <value>无法保存域名表文件。</value>
    <comment>"Hosts" refers to the system hosts file, do not loc</comment>
  </data>
  <data name="FileSaveError_NotElevated" xml:space="preserve">
    <value>无法保存域名表文件,需要管理员权限。</value>
    <comment>"Hosts" refers to the system hosts file, do not loc</comment>
  </data>
  <data name="FileSaveError_ReadOnly" xml:space="preserve">
    <value>无法保存域名表文件,文件不允许写入。</value>
    <comment>"Hosts" refers to the system hosts file, do not loc</comment>
  </data>
  <data name="FilterBtn.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>筛选</value>
  </data>
  <data name="FilterBtn.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
    <value>筛选</value>
  </data>
  <data name="Hosts.Header" xml:space="preserve">
    <value>域名</value>
    <comment>"Hosts" refers to the system hosts file, do not loc // 并不是</comment>
  </data>
  <data name="Hosts.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
    <value>空格分隔多个域名(比如:server server.local),一次最多九个</value>
    <comment>Do not localize "server" and "server.local"</comment>
  </data>
  <data name="HostsFilter.Header" xml:space="preserve">
    <value>域名</value>
    <comment>"Hosts" refers to the system hosts file, do not loc // 并不是</comment>
  </data>
  <data name="MakeWritable.Content" xml:space="preserve">
    <value>获取写入权限</value>
  </data>
  <data name="MoveDown.Text" xml:space="preserve">
    <value>下移</value>
  </data>
  <data name="MoveUp.Text" xml:space="preserve">
    <value>上移</value>
  </data>
  <data name="OpenHostsFileBtn.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>打开文本编辑器</value>
    <comment>"Hosts" refers to the system hosts file, do not loc</comment>
  </data>
  <data name="OpenHostsFileBtn.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
    <value>打开文本编辑器</value>
    <comment>"Hosts" refers to the system hosts file, do not loc</comment>
  </data>
  <data name="Ping.Text" xml:space="preserve">
    <value>Ping 测试</value>
    <comment>"Ping" refers to the command-line utility, do not loc</comment>
  </data>
  <data name="PingIcon.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
    <value>Ping 结果</value>
    <comment>"Ping" refers to the command-line utility, do not loc</comment>
  </data>
  <data name="Reload.Content" xml:space="preserve">
    <value>重新加载</value>
  </data>
  <data name="SettingsBtn.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
    <value>设置</value>
  </data>
  <data name="SettingsBtn.[using:Microsoft.UI.Xaml.Controls]ToolTipService.ToolTip" xml:space="preserve">
    <value>设置</value>
  </data>
  <data name="ShowOnlyDuplicates.Header" xml:space="preserve">
    <value>仅显示地址重复的条目</value>
  </data>
  <data name="TooManyHostsTeachingTip.Subtitle" xml:space="preserve">
    <value>每条最多填写九个域名,太长的条目已被拆分,保存后生效。</value>
    <comment>"Hosts" refers to the system hosts file, do not loc</comment>
  </data>
  <data name="TooManyHostsTeachingTip.Title" xml:space="preserve">
    <value>域名数量过多</value>
    <comment>"Hosts" refers to the system hosts file, do not loc</comment>
  </data>
  <data name="EntryAddressIsInvalidWarning.Text" xml:space="preserve">
    <value>地址不符合 IPv4 或 IPv6 格式</value>
  </data>
  <data name="EntryHostsIsInvalidWarning.Text" xml:space="preserve">
    <value>域名列表不符合格式</value>
  </data>
  <data name="UpdateBtn" xml:space="preserve">
    <value>更新</value>
  </data>
  <data name="UpdateEntry_Title" xml:space="preserve">
    <value>更新条目</value>
  </data>
  <data name="WarningDialog_AcceptBtn" xml:space="preserve">
    <value>继续</value>
  </data>
  <data name="WarningDialog_QuitBtn" xml:space="preserve">
    <value>退出</value>
  </data>
  <data name="WarningDialog_Text" xml:space="preserve">
    <value>这是 Hosts 域名表文件编辑器。
错误修改域名表可能会导致无法解析域名、访问网站,因此请谨慎使用。</value>
    <comment>"Hosts" refers to the system hosts file, do not loc</comment>
  </data>
  <data name="WarningDialog_Title" xml:space="preserve">
    <value>警告</value>
  </data>
  <data name="WindowAdminTitle" xml:space="preserve">
    <value>管理员权限: 域名表编辑器</value>
    <comment>Title of the window when running as administrator. "Hosts File Editor" is the name of the utility. "Hosts" refers to the system hosts file, do not loc</comment>
  </data>
  <data name="WindowTitle" xml:space="preserve">
    <value>域名表编辑器</value>
    <comment>Title of the window when running as user. "Hosts File Editor" is the name of the utility. "Hosts" refers to the system hosts file, do not loc</comment>
  </data>
</root>

================================================
FILE: PowerToys/src/modules/MeasureTool/MeasureToolUI/Strings/en-us/Resources.resw
================================================
<?xml version="1.0" encoding="utf-8"?>
<root>  
    <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xsd:element name="root" msdata:IsDataSet="true">
            <xsd:complexType>
                <xsd:choice maxOccurs="unbounded">
                    <xsd:element name="data">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
                            </xsd:sequence>
                            <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
                            <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
                            <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
                        </xsd:complexType>
                    </xsd:element>
                    <xsd:element name="resheader">
                        <xsd:complexType>
                            <xsd:sequence>
                                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                            </xsd:sequence>
                            <xsd:attribute name="name" type="xsd:string" use="required" />
                        </xsd:complexType>
                    </xsd:element>
                </xsd:choice>
            </xsd:complexType>
        </xsd:element>
    </xsd:schema>
    <resheader name="resmimetype">
        <value>text/microsoft-resx</value>
    </resheader>
    <resheader name="version">
        <value>1.3</value>
    </resheader>
    <resheader name="reader">
        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    </resheader>
    <resheader name="writer">
        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
    </resheader>
    <data name="BtnBounds.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
        <value>框选 (Ctrl+1)</value>
    </data>
    <data name="BtnBoundsTooltip.Text" xml:space="preserve">
        <value>框选 (Ctrl+1)</value>
    </data>
    <data name="BtnSpacing.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
        <value>间距 (Ctrl+2)</value>
    </data>
    <data name="BtnSpacingTooltip.Text" xml:space="preserve">
        <value>间距 (Ctrl+2)</value>
    </data>
    <data name="BtnHorizontalSpacing.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
        <value>水平间距 (Ctrl+3)</value>
    </data>
    <data name="BtnHorizontalSpacingTooltip.Text" xml:space="preserve">
        <value>水平间距 (Ctrl+3)</value>
    </data>
    <data name="BtnVerticalSpacing.[using:Microsoft.UI.Xaml.Automation]AutomationProperties.Name" xml:space="preserve">
        <value>垂直间距 (Ctrl+4)</value>
    </data>
    <data name="BtnVerticalSpacingTooltip.Text" xml:space="preserve">
        <value>垂直间距 (Ctrl+4)</value>
    </data>
    <data name="BtnClosePanelTooltip.Text" xml:space="preserve">
        <value>关闭 (Esc)</value>
    </data>
    <data name="MeasurementUnitAbbrPixel" xml:space="preserve">
        <value>像素</value>
    </data>
    <data name="MeasurementUnitAbbrInch" xml:space="preserve">
        <value>英寸</value>
    </data>
    <data name="MeasurementUnitAbbrCentimetre" xml:space="preserve">
        <value>厘米</value>
    </data>
    <data name="MeasurementUnitAbbrMillimetre" xml:space="preserve">
        <value>毫米</value>
    </data>
</root>

================================================
FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.Clipboard.cs
================================================
// Copyright (c) Microsoft Corporation
// The Microsoft Corporation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

using Microsoft.PowerToys.Telemetry;

// <summary>
//     Clipboard related routines.
// </summary>
// <history>
//     2008 created by Truong Do (ductdo).
//     2009-... modified by Truong Do (TruongDo).
//     2023- Included in PowerToys.
// </history>
using MouseWithoutBorders.Class;
using MouseWithoutBorders.Core;
using MouseWithoutBorders.Exceptions;

using SystemClipboard = System.Windows.Forms.Clipboard;
using Thread = MouseWithoutBorders.Core.Thread;

namespace MouseWithoutBorders
{
    internal partial class Common
    {
        internal static readonly char[] Comma = new char[] { ',' };
        internal static readonly char[] Star = new char[] { '*' };
        internal static readonly char[] NullSeparator = new char[] { '\0' };

        internal const uint BIG_CLIPBOARD_DATA_TIMEOUT = 60000; // [CN] 30s -> 60s
        private const uint MAX_CLIPBOARD_DATA_SIZE_CAN_BE_SENT_INSTANTLY_TCP = 1024 * 1024; // 1MB
        private const uint MAX_CLIPBOARD_FILE_SIZE_CAN_BE_SENT = 500 * 1024 * 1024; // 100MB [CN]-> 500MB
        private const int TEXT_HEADER_SIZE = 12;
        private const int DATA_SIZE = 48;
        private const string TEXT_TYPE_SEP = "{4CFF57F7-BEDD-43d5-AE8F-27A61E886F2F}";
        private static long lastClipboardEventTime;
        private static string lastMachineWithClipboardData;
        private static string lastDragDropFile;
#pragma warning disable SA1307 // Accessible fields should begin with upper-case letter
        internal static long clipboardCopiedTime;
#pragma warning restore SA1307

        internal static ID LastIDWithClipboardData { get; set; }

        internal static string LastDragDropFile
        {
            get => Common.lastDragDropFile;
            set => Common.lastDragDropFile = value;
        }

        internal static string LastMachineWithClipboardData
        {
            get => Common.lastMachineWithClipboardData;
            set => Common.lastMachineWithClipboardData = value;
        }

        internal static long LastClipboardEventTime
        {
            get => Common.lastClipboardEventTime;
            set => Common.lastClipboardEventTime = value;
        }

        internal static IntPtr NextClipboardViewer { get; set; }

        internal static bool IsClipboardDataImage { get; private set; }

        internal static byte[] LastClipboardData { get; private set; }

        private static object lastClipboardObject = string.Empty;

        internal static bool HasSwitchedMachineSinceLastCopy { get; set; }

        internal static bool CheckClipboardEx(ByteArrayOrString data, bool isFilePath)
        {
            Logger.LogDebug($"{nameof(CheckClipboardEx)}: ShareClipboard = {Setting.Values.ShareClipboard}, TransferFile = {Setting.Values.TransferFile}, data = {data}.");
            Logger.LogDebug($"{nameof(CheckClipboardEx)}: {nameof(Setting.Values.OneWayClipboardMode)} = {Setting.Values.OneWayClipboardMode}.");

            if (!Setting.Values.ShareClipboard)
            {
                return false;
            }

            if (Common.RunWithNoAdminRight && Setting.Values.OneWayClipboardMode)
            {
                return false;
            }

            if (GetTick() - LastClipboardEventTime < 1000)
            {
                Logger.LogDebug("GetTick() - lastClipboardEventTime < 1000");
                LastClipboardEventTime = GetTick();
                return false;
            }

            LastClipboardEventTime = GetTick();

            try
            {
                IsClipboardDataImage = false;
                LastClipboardData = null;
                LastDragDropFile = null;
                GC.Collect();

                string stringData = null;
                byte[] byteData = null;

                if (data.IsByteArray)
                {
                    byteData = data.GetByteArray();
                }
                else
                {
                    stringData = data.GetString();
                }

                if (stringData != null)
                {
                    if (!HasSwitchedMachineSinceLastCopy)
                    {
                        if (lastClipboardObject is string lastStringData && lastStringData.Equals(stringData, StringComparison.OrdinalIgnoreCase))
                        {
                            Logger.LogDebug("CheckClipboardEx: Same string data.");
                            return false;
                        }
                    }

                    HasSwitchedMachineSinceLastCopy = false;

                    if (isFilePath)
                    {
                        Logger.LogDebug("Clipboard contains FileDropList");

                        if (!Setting.Values.TransferFile)
                        {
                            Logger.LogDebug("TransferFile option is unchecked.");
                            return false;
                        }

                        string filePath = stringData;

                        _ = Common.ImpersonateLoggedOnUserAndDoSomething(() =>
                        {
                            if (File.Exists(filePath) || Directory.Exists(filePath))
                            {
                                if (File.Exists(filePath) && new FileInfo(filePath).Length <= MAX_CLIPBOARD_FILE_SIZE_CAN_BE_SENT)
                                {
                                    Logger.LogDebug("Clipboard contains: " + filePath);
                                    LastDragDropFile = filePath;
                                    SendClipboardBeat();
                                    SetToggleIcon(new int[TOGGLE_ICONS_SIZE] { ICON_BIG_CLIPBOARD, -1, ICON_BIG_CLIPBOARD, -1 });
                                }
                                else
                                {
                                    if (Directory.Exists(filePath))
                                    {
                                        Logger.LogDebug("Clipboard contains a directory: " + filePath);
                                        LastDragDropFile = filePath;
                                        SendClipboardBeat();
                                    }
                                    else
                                    {
                                        LastDragDropFile = filePath + " - 文件过大无法粘贴,请改为拖放文件!";
                                        SendClipboardBeat();
                                        Logger.Log("Clipboard: File too big: " + filePath);
                                    }

                                    SetToggleIcon(new int[TOGGLE_ICONS_SIZE] { ICON_ERROR, -1, ICON_ERROR, -1 });
                                }
                            }
                            else
                            {
                                Logger.Log("CheckClipboardEx: File not found: " + filePath);
                            }
                        });
                    }
                    else
                    {
                        byte[] texts = Common.GetBytesU(stringData);

                        using MemoryStream ms = new();
                        using (DeflateStream s = new(ms, CompressionMode.Compress, true))
                        {
                            s.Write(texts, 0, texts.Length);
                        }

                        Logger.LogDebug("Plain/Zip = " + texts.Length.ToString(CultureInfo.CurrentCulture) + "/" +
                            ms.Length.ToString(CultureInfo.CurrentCulture));

                        LastClipboardData = ms.GetBuffer();
                    }
                }
                else if (byteData != null)
                {
                    if (!HasSwitchedMachineSinceLastCopy)
                    {
                        if (lastClipboardObject is byte[] lastByteData && Enumerable.SequenceEqual(lastByteData, byteData))
                        {
                            Logger.LogDebug("CheckClipboardEx: Same byte[] data.");
                            return false;
                        }
                    }

                    HasSwitchedMachineSinceLastCopy = false;

                    Logger.LogDebug("Clipboard contains image");
                    IsClipboardDataImage = true;
                    LastClipboardData = byteData;
                }
                else
                {
                    Logger.LogDebug("*** Clipboard contains something else!");
                    return false;
                }

                lastClipboardObject = data;

                if (LastClipboardData != null && LastClipboardData.Length > 0)
                {
                    if (LastClipboardData.Length > MAX_CLIPBOARD_DATA_SIZE_CAN_BE_SENT_INSTANTLY_TCP)
                    {
                        SendClipboardBeat();
                        SetToggleIcon(new int[TOGGLE_ICONS_SIZE] { ICON_BIG_CLIPBOARD, -1, ICON_BIG_CLIPBOARD, -1 });
                    }
                    else
                    {
                        SetToggleIcon(new int[TOGGLE_ICONS_SIZE] { ICON_SMALL_CLIPBOARD, -1, -1, -1 });
                        SendClipboardDataUsingTCP(LastClipboardData, IsClipboardDataImage);
                    }

                    return true;
                }
            }
            catch (Exception e)
            {
                Logger.Log(e);
            }

            return false;
        }

        private static void SendClipboardDataUsingTCP(byte[] bytes, bool image)
        {
            if (Sk == null)
            {
                return;
            }

            new Task(() =>
            {
                // SuppressFlow fixes an issue on service mode, where the helper process can't get enough permissions to be started again.
                // More details can be found on: https://github.com/microsoft/PowerToys/pull/36892
                using var asyncFlowControl = ExecutionContext.SuppressFlow();

                System.Threading.Thread thread = Thread.CurrentThread;
                thread.Name = $"{nameof(SendClipboardDataUsingTCP)}.{thread.ManagedThreadId}";
                Thread.UpdateThreads(thread);
                int l = bytes.Length;
                int index = 0;
                int len;
                DATA package = new();
                byte[] buf = new byte[PACKAGE_SIZE_EX];
                int dataStart = PACKAGE_SIZE_EX - DATA_SIZE;

                while (true)
                {
                    if ((index + DATA_SIZE) > l)
                    {
                        len = l - index;
                        Array.Clear(buf, 0, PACKAGE_SIZE_EX);
                    }
                    else
                    {
                        len = DATA_SIZE;
                    }

                    Array.Copy(bytes, index, buf, dataStart, len);
                    package.Bytes = buf;

                    package.Type = image ? PackageType.ClipboardImage : PackageType.ClipboardText;
                    package.Des = ID.ALL;
                    SkSend(package, (uint)MachineID, false);

                    index += DATA_SIZE;
                    if (index >= l)
                    {
                        break;
                    }
                }

                package.Type = PackageType.ClipboardDataEnd;
                package.Des = ID.ALL;
                SkSend(package, (uint)MachineID, false);
            }).Start();
        }

        internal static void ReceiveClipboardDataUsingTCP(DATA data, bool image, TcpSk tcp)
        {
            try
            {
                if (Sk == null || RunOnLogonDesktop || RunOnScrSaverDesktop)
                {
                    return;
                }

                MemoryStream m = new();
                int dataStart = PACKAGE_SIZE_EX - DATA_SIZE;
                m.Write(data.Bytes, dataStart, DATA_SIZE);
                int unexpectedCount = 0;

                bool done = false;
                do
                {
                    data = SocketStuff.TcpReceiveData(tcp, out int err);

                    switch (data.Type)
                    {
                        case PackageType.ClipboardImage:
                        case PackageType.ClipboardText:
                            m.Write(data.Bytes, dataStart, DATA_SIZE);
                            break;

                        case PackageType.ClipboardDataEnd:
                            done = true;
                            break;

                        default:
                            Receiver.ProcessPackage(data, tcp);
                            if (++unexpectedCount > 100)
                            {
                                Logger.Log("ReceiveClipboardDataUsingTCP: unexpectedCount > 100!");
                                done = true;
                            }

                            break;
                    }
                }
                while (!done);

                LastClipboardEventTime = GetTick();

                if (image)
                {
                    Image im = Image.FromStream(m);
                    Clipboard.SetImage(im);
                    LastClipboardEventTime = GetTick();
                }
                else
                {
                    Common.SetClipboardData(m.GetBuffer());
                    LastClipboardEventTime = GetTick();
                }

                m.Dispose();

                SetToggleIcon(new int[TOGGLE_ICONS_SIZE] { ICON_SMALL_CLIPBOARD, -1, ICON_SMALL_CLIPBOARD, -1 });
            }
            catch (Exception e)
            {
                Logger.Log("ReceiveClipboardDataUsingTCP: " + e.Message);
            }
        }

        private static readonly Lock ClipboardThreadOldLock = new();
        private static System.Threading.Thread clipboardThreadOld;

        internal static void GetRemoteClipboard(string postAction)
        {
            if (!RunOnLogonDesktop && !RunOnScrSaverDesktop)
            {
                if (Common.LastMachineWithClipboardData == null ||
                    Common.LastMachineWithClipboardData.Length < 1)
                {
                    return;
                }

                new Task(() =>
                {
                    // SuppressFlow fixes an issue on service mode, where the helper process can't get enough permissions to be started again.
                    // More details can be found on: https://github.com/microsoft/PowerToys/pull/36892
                    using var asyncFlowControl = ExecutionContext.SuppressFlow();

                    System.Threading.Thread thread = Thread.CurrentThread;
                    thread.Name = $"{nameof(ConnectAndGetData)}.{thread.ManagedThreadId}";
                    Thread.UpdateThreads(thread);
                    ConnectAndGetData(postAction);
                }).Start();
            }
        }

        private static Stream m;

        private static void ConnectAndGetData(object postAction)
        {
            if (Sk == null)
            {
                Logger.Log("ConnectAndGetData: Sk == null!");
                return;
            }

            string remoteMachine;
            TcpClient clipboardTcpClient = null;
            string postAct = (string)postAction;

            Logger.LogDebug("ConnectAndGetData.postAction: " + postAct);

            ClipboardPostAction clipboardPostAct = postAct.Contains("mspaint,") ? ClipboardPostAction.Mspaint
                : postAct.Equals("desktop", StringComparison.OrdinalIgnoreCase) ? ClipboardPostAction.Desktop
                : ClipboardPostAction.Other;

            try
            {
                remoteMachine = postAct.Contains("mspaint,") ? postAct.Split(Comma)[1] : Common.LastMachineWithClipboardData;

                remoteMachine = remoteMachine.Trim();

                if (!IsConnectedByAClientSocketTo(remoteMachine))
                {
                    Logger.Log($"No potential inbound connection from {MachineName} to {remoteMachine}, ask for a push back instead.");
                    ID machineId = MachinePool.ResolveID(remoteMachine);

                    if (machineId != ID.NONE)
                    {
                        SkSend(
                            new DATA()
                            {
                                Type = PackageType.ClipboardAsk,
                                Des = machineId,
                                MachineName = MachineName,
                                PostAction = clipboardPostAct,
                            },
                            null,
                            false);
                    }
                    else
                    {
                        Logger.Log($"Unable to resolve {remoteMachine} to its long IP.");
                    }

                    return;
                }

                ShowToolTip("正在连接 " + remoteMachine, 2000, ToolTipIcon.Info, Setting.Values.ShowClipNetStatus);

                clipboardTcpClient = ConnectToRemoteClipboardSocket(remoteMachine);
            }
            catch (ThreadAbortException)
            {
                Logger.Log("The current thread is being aborted (1).");
                if (clipboardTcpClient != null && clipboardTcpClient.Connected)
                {
                    clipboardTcpClient.Client.Close();
                }

                return;
            }
            catch (Exception e)
            {
                Logger.Log(e);
                Common.SetToggleIcon(new int[Common.TOGGLE_ICONS_SIZE]
                {
                    Common.ICON_BIG_CLIPBOARD,
                    -1, Common.ICON_BIG_CLIPBOARD, -1,
                });
                ShowToolTip(e.Message, 1000, ToolTipIcon.Warning, Setting.Values.ShowClipNetStatus);
                return;
            }

            bool clientPushData = false;

            if (!ShakeHand(ref remoteMachine, clipboardTcpClient.Client, out Stream enStream, out Stream deStream, ref clientPushData, ref clipboardPostAct))
            {
                return;
            }

            ReceiveAndProcessClipboardData(remoteMachine, clipboardTcpClient.Client, enStream, deStream, postAct);
        }

        internal static void ReceiveAndProcessClipboardData(string remoteMachine, Socket s, Stream enStream, Stream deStream, string postAct)
        {
            lock (ClipboardThreadOldLock)
            {
                // Do not enable two connections at the same time.
                if (clipboardThreadOld != null && clipboardThreadOld.ThreadState != System.Threading.ThreadState.AbortRequested
                    && clipboardThreadOld.ThreadState != System.Threading.ThreadState.Aborted && clipboardThreadOld.IsAlive
                    && clipboardThreadOld.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)
                {
                    if (clipboardThreadOld.Join(3000))
                    {
                        if (m != null)
                        {
                            m.Flush();
                            m.Close();
                            m = null;
                        }
                    }
                }

                clipboardThreadOld = Thread.CurrentThread;
            }

            try
            {
                byte[] header = new byte[1024];
                byte[] buf = new byte[NETWORK_STREAM_BUF_SIZE];
                string fileName = null;
                string tempFile = "data", savingFolder = string.Empty;
                Common.ToggleIconsIndex = 0;
                int rv;
                long receivedCount = 0;

                if ((rv = deStream.ReadEx(header, 0, header.Length)) < header.Length)
                {
                    Logger.Log("Reading header failed: " + rv.ToString(CultureInfo.CurrentCulture));
                    Common.SetToggleIcon(new int[Common.TOGGLE_ICONS_SIZE]
                    {
                        Common.ICON_BIG_CLIPBOARD,
                        -1, -1, -1,
                    });
                    return;
                }

                fileName = Common.GetStringU(header).Replace("\0", string.Empty);
                Logger.LogDebug("Header: " + fileName);
                string[] headers = fileName.Split(Star);

                if (headers.Length < 2 || !long.TryParse(headers[0], out long dataSize))
                {
                    Logger.Log(string.Format(
                        CultureInfo.CurrentCulture,
                        "Reading header failed: {0}:{1}",
                        headers.Length,
                        fileName));
                    Common.SetToggleIcon(new int[Common.TOGGLE_ICONS_SIZE]
                    {
                        Common.ICON_BIG_CLIPBOARD,
                        -1, -1, -1,
                    });
                    return;
                }

                fileName = headers[1];

                Logger.LogDebug(string.Format(
                    CultureInfo.CurrentCulture,
                    "Receiving {0}:{1} from {2}...",
                    Path.GetFileName(fileName),
                    dataSize,
                    remoteMachine));
                ShowToolTip(
                    string.Format(
                        CultureInfo.CurrentCulture,
                        "正在从 {1} 接收 {0} ...",
                        Path.GetFileName(fileName),
                        remoteMachine),
                    5000,
                    ToolTipIcon.Info,
                    Setting.Values.ShowClipNetStatus);
                if (fileName.StartsWith("image", StringComparison.CurrentCultureIgnoreCase) ||
                    fileName.StartsWith("text", StringComparison.CurrentCultureIgnoreCase))
                {
                    m = new MemoryStream();
                }
                else
                {
                    if (postAct.Equals("desktop", StringComparison.OrdinalIgnoreCase))
                    {
                        _ = ImpersonateLoggedOnUserAndDoSomething(() =>
                        {
                            savingFolder = Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\MouseWithoutBorders\\";

                            if (!Directory.Exists(savingFolder))
                            {
                                _ = Directory.CreateDirectory(savingFolder);
                            }
                        });

                        tempFile = savingFolder + Path.GetFileName(fileName);
                        m = new FileStream(tempFile, FileMode.Create);
                    }
                    else if (postAct.Contains("mspaint"))
                    {
                        tempFile = GetMyStorageDir() + @"ScreenCapture-" +
                            remoteMachine + ".png";
                        m = new FileStream(tempFile, FileMode.Create);
                    }
                    else
                    {
                        tempFile = GetMyStorageDir();
                        tempFile += Path.GetFileName(fileName);
                        m = new FileStream(tempFile, FileMode.Create);
                    }

                    Logger.Log("==> " + tempFile);
                }

                ShowToolTip(
                    string.Format(
                        CultureInfo.CurrentCulture,
                        "正在从 {1} 接收 {0} ...",
                        Path.GetFileName(fileName),
                        remoteMachine),
                    5000,
                    ToolTipIcon.Info,
                    Setting.Values.ShowClipNetStatus);

                do
                {
                    rv = deStream.ReadEx(buf, 0, buf.Length);

                    if (rv > 0)
                    {
                        receivedCount += rv;

                        if (receivedCount > dataSize)
                        {
                            rv -= (int)(receivedCount - dataSize);
                        }

                        m.Write(buf, 0, rv);
                    }

                    if (Common.ToggleIcons == null)
                    {
                        Common.SetToggleIcon(new int[Common.TOGGLE_ICONS_SIZE]
                        {
                                    Common.ICON_SMALL_CLIPBOARD,
                                    -1, Common.ICON_SMALL_CLIPBOARD, -1,
                        });
                    }

                    string text = string.Format(CultureInfo.CurrentCulture, "{0}KB received: {1}", m.Length / 1024, Path.GetFileName(fileName));

                    DoSomethingInUIThread(() =>
                    {
                        MainForm.SetTrayIconText(text);
                    });
                }
                while (rv > 0);

                if (m != null && fileName != null)
                {
                    m.Flush();
                    Logger.LogDebug(m.Length.ToString(CultureInfo.CurrentCulture) + " bytes received.");
                    Common.LastClipboardEventTime = Common.GetTick();
                    string toolTipText = null;
                    string sizeText = m.Length >= 1024
                        ? (m.Length / 1024).ToString(CultureInfo.CurrentCulture) + "KB"
                        : m.Length.ToString(CultureInfo.CurrentCulture) + "Bytes";

                    PowerToysTelemetry.Log.WriteEvent(new MouseWithoutBorders.Telemetry.MouseWithoutBordersClipboardFileTransferEvent());

                    if (fileName.StartsWith("image", StringComparison.CurrentCultureIgnoreCase))
                    {
                        Clipboard.SetImage(Image.FromStream(m));
                        toolTipText = string.Format(
                            CultureInfo.CurrentCulture,
                            "{0} {1} 来自 {2} 已存入剪贴板.",
                            sizeText,
                            "image",
                            remoteMachine);
                    }
                    else if (fileName.StartsWith("text", StringComparison.CurrentCultureIgnoreCase))
                    {
                        byte[] data = (m as MemoryStream).GetBuffer();
                        toolTipText = string.Format(
                            CultureInfo.CurrentCulture,
                            "{0} {1} 来自 {2} 已存入剪贴板.",
                            sizeText,
                            "text",
                            remoteMachine);
                        Common.SetClipboardData(data);
                    }
                    else if (tempFile != null)
                    {
                        if (postAct.Equals("desktop", StringComparison.OrdinalIgnoreCase))
                        {
                            toolTipText = string.Format(
                                CultureInfo.CurrentCulture,
                                "{0} {1} 来自 {2}!",
                                sizeText,
                                Path.GetFileName(fileName),
                                remoteMachine);

                            _ = ImpersonateLoggedOnUserAndDoSomething(() =>
                            {
                                ProcessStartInfo startInfo = new();
                                startInfo.UseShellExecute = true;
                                startInfo.WorkingDirectory = savingFolder;
                                startInfo.FileName = savingFolder;
                                startInfo.Verb = "open";
                                _ = Process.Start(startInfo);
                            });
                        }
                        else if (postAct.Contains("mspaint"))
                        {
                            m.Close();
                            m = null;
                            OpenImage(tempFile);
                            toolTipText = string.Format(
                                CultureInfo.CurrentCulture,
                                "{0} {1} 来自 {2} 已放入画图.",
                                sizeText,
                                Path.GetFileName(tempFile),
                                remoteMachine);
                        }
                        else
                        {
                            StringCollection filePaths = new()
                            {
                                tempFile,
                            };
                            Clipboard.SetFileDropList(filePaths);
                            toolTipText = string.Format(
                                CultureInfo.CurrentCulture,
                                "{0} {1} 来自 {2} 已存入剪贴板.",
                                sizeText,
                                Path.GetFileName(fileName),
                                remoteMachine);
                        }
                    }

                    if (!string.IsNullOrWhiteSpace(toolTipText))
                    {
                        Common.ShowToolTip(toolTipText, 5000, ToolTipIcon.Info, Setting.Values.ShowClipNetStatus);
                    }

                    DoSomethingInUIThread(() =>
                    {
                        MainForm.UpdateNotifyIcon();
                    });

                    m?.Close();
                    m = null;
                }
            }
            catch (ThreadAbortException)
            {
                Logger.Log("The current thread is being aborted (3).");
                s.Close();

                if (m != null)
                {
                    m.Close();
                    m = null;
                }

                return;
            }
            catch (Exception e)
            {
                if (e is IOException)
                {
                    string log = $"{nameof(ReceiveAndProcessClipboardData)}: Exception accessing the socket: {e.InnerException?.GetType()}/{e.Message}. (This is expected when the remote machine closes the connection during desktop switch or reconnection.)";
                    Logger.Log(log);
                }
                else
                {
                    Logger.Log(e);
                }

                Common.SetToggleIcon(new int[Common.TOGGLE_ICONS_SIZE]
                {
                    Common.ICON_BIG_CLIPBOARD,
                    -1, Common.ICON_BIG_CLIPBOARD, -1,
                });
                ShowToolTip(e.Message, 1000, ToolTipIcon.Info, Setting.Values.ShowClipNetStatus);

                if (m != null)
                {
                    m.Close();
                    m = null;
                }

                return;
            }

            s.Close();
        }

        internal static bool ShakeHand(ref string remoteName, Socket s, out Stream enStream, out Stream deStream, ref bool clientPushData, ref ClipboardPostAction postAction)
        {
            const int CLIPBOARD_HANDSHAKE_TIMEOUT = 30;
            s.ReceiveTimeout = CLIPBOARD_HANDSHAKE_TIMEOUT * 1000;
            s.NoDelay = true;
            s.SendBufferSize = s.ReceiveBufferSize = 1024000;

            bool handShaken = false;
            enStream = deStream = null;

            try
            {
                DATA package = new()
                {
                    Type = clientPushData ? PackageType.ClipboardPush : PackageType.Clipboard,
                    PostAction = postAction,
                    Src = MachineID,
                    MachineName = MachineName,
                };

                byte[] buf = new byte[PACKAGE_SIZE_EX];

                NetworkStream ns = new(s);
                enStream = Common.GetEncryptedStream(ns);
                Common.SendOrReceiveARandomDataBlockPerInitialIV(enStream);
                Logger.LogDebug($"{nameof(ShakeHand)}: Writing header package.");
                enStream.Write(package.Bytes, 0, PACKAGE_SIZE_EX);

                Logger.LogDebug($"{nameof(ShakeHand)}: Sent: clientPush={clientPushData}, postAction={postAction}.");

                deStream = Common.GetDecryptedStream(ns);
                Common.SendOrReceiveARandomDataBlockPerInitialIV(deStream, false);

                Logger.LogDebug($"{nameof(ShakeHand)}: Reading header package.");

                int bytesReceived = deStream.ReadEx(buf, 0, Common.PACKAGE_SIZE_EX);
                package.Bytes = buf;

                string name = "Unknown";

                if (bytesReceived == Common.PACKAGE_SIZE_EX)
                {
                    if (package.Type is PackageType.Clipboard or PackageType.ClipboardPush)
                    {
                        name = remoteName = package.MachineName;

                        Logger.LogDebug($"{nameof(ShakeHand)}: Connection from {name}:{package.Src}");

                        if (Common.MachinePool.ResolveID(name) == package.Src && Common.IsConnectedTo(package.Src))
                        {
                            clientPushData = package.Type == PackageType.ClipboardPush;
                            postAction = package.PostAction;
                            handShaken = true;
                            Logger.LogDebug($"{nameof(ShakeHand)}: Received: clientPush={clientPushData}, postAction={postAction}.");
                        }
                        else
                        {
                            Logger.LogDebug($"{nameof(ShakeHand)}: No active connection to the machine: {name}.");
                        }
                    }
                    else
                    {
                        Logger.LogDebug($"{nameof(ShakeHand)}: Unexpected package type: {package.Type}.");
                    }
                }
                else
                {
                    Logger.LogDebug($"{nameof(ShakeHand)}: BytesTransferred != PACKAGE_SIZE_EX: {bytesReceived}");
                }

                if (!handShaken)
                {
                    string msg = $"剪贴板连接被拒绝: {name}:{remoteName}/{package.Src}\r\n\r\n请确保软件版本相同.";
                    Logger.Log(msg);
                    Common.ShowToolTip(msg, 3000, ToolTipIcon.Warning);
                    Common.SetToggleIcon(new int[Common.TOGGLE_ICONS_SIZE] { Common.ICON_BIG_CLIPBOARD, -1, -1, -1 });
                }
            }
            catch (ThreadAbortException)
            {
                Logger.Log($"{nameof(ShakeHand)}: The current thread is being aborted.");
                s.Close();
            }
            catch (Exception e)
            {
                if (e is IOException)
                {
                    string log = $"{nameof(ShakeHand)}: Exception accessing the socket: {e.InnerException?.GetType()}/{e.Message}. (This is expected when the remote machine closes the connection during desktop switch or reconnection.)";
                    Logger.Log(log);
                }
                else
                {
                    Logger.Log(e);
                }

                Common.SetToggleIcon(new int[Common.TOGGLE_ICONS_SIZE]
                {
                    Common.ICON_BIG_CLIPBOARD,
                    -1, Common.ICON_BIG_CLIPBOARD, -1,
                });
                MainForm.UpdateNotifyIcon();
                ShowToolTip(e.Message + "\r\n\r\n请确保软件版本相同.", 1000, ToolTipIcon.Warning, Setting.Values.ShowClipNetStatus);

                if (m != null)
                {
                    m.Close();
                    m = null;
                }
            }

            return handShaken;
        }

        internal static TcpClient ConnectToRemoteClipboardSocket(string remoteMachine)
        {
            TcpClient clipboardTcpClient;
            clipboardTcpClient = new TcpClient(AddressFamily.InterNetworkV6);
            clip
Download .txt
gitextract_lcydtlch/

├── LICENSE
├── Patcher/
│   ├── 安装.CMD
│   └── 安装组策略.cmd
├── PowerToys/
│   ├── global.json
│   └── src/
│       ├── ActionRunner/
│       │   └── Resources.resx
│       ├── Monaco/
│       │   └── index.html
│       ├── Update/
│       │   └── Resources.resx
│       ├── Version.props
│       ├── common/
│       │   ├── interop/
│       │   │   └── keyboard_layout.cpp
│       │   └── sysinternals/
│       │       └── Eula/
│       │           └── eula.c
│       ├── gpo/
│       │   └── assets/
│       │       └── zh-CN/
│       │           └── PowerToys.adml
│       ├── modules/
│       │   ├── AdvancedPaste/
│       │   │   └── AdvancedPaste/
│       │   │       └── Strings/
│       │   │           └── en-us/
│       │   │               └── Resources.resw
│       │   ├── CropAndLock/
│       │   │   └── CropAndLock/
│       │   │       └── main.cpp
│       │   ├── EnvironmentVariables/
│       │   │   └── EnvironmentVariablesUILib/
│       │   │       └── Strings/
│       │   │           └── en-us/
│       │   │               └── Resources.resw
│       │   ├── FileLocksmith/
│       │   │   ├── FileLocksmithContextMenu/
│       │   │   │   ├── Resources.resx
│       │   │   │   └── dllmain.cpp
│       │   │   ├── FileLocksmithExt/
│       │   │   │   └── Resources.resx
│       │   │   └── FileLocksmithUI/
│       │   │       └── Strings/
│       │   │           └── en-us/
│       │   │               └── Resources.resw
│       │   ├── Hosts/
│       │   │   └── HostsUILib/
│       │   │       └── Strings/
│       │   │           └── en-us/
│       │   │               └── Resources.resw
│       │   ├── MeasureTool/
│       │   │   └── MeasureToolUI/
│       │   │       └── Strings/
│       │   │           └── en-us/
│       │   │               └── Resources.resw
│       │   ├── MouseWithoutBorders/
│       │   │   ├── App/
│       │   │   │   ├── Class/
│       │   │   │   │   ├── Common.Clipboard.cs
│       │   │   │   │   ├── Common.Encryption.cs
│       │   │   │   │   ├── Common.Event.cs
│       │   │   │   │   ├── Common.Helper.cs
│       │   │   │   │   ├── Common.MachineStuff.cs
│       │   │   │   │   ├── Common.Service.cs
│       │   │   │   │   ├── EasyMouseOption.cs
│       │   │   │   │   ├── Extensions.cs
│       │   │   │   │   ├── IClipboardHelper.cs
│       │   │   │   │   ├── InputHook.cs
│       │   │   │   │   ├── Program.cs
│       │   │   │   │   └── SocketStuff.cs
│       │   │   │   ├── Control/
│       │   │   │   │   ├── Machine.cs
│       │   │   │   │   └── Machine.designer.cs
│       │   │   │   ├── Core/
│       │   │   │   │   └── Receiver.cs
│       │   │   │   ├── Form/
│       │   │   │   │   ├── Settings/
│       │   │   │   │   │   ├── SettingsFormPage.Designer.cs
│       │   │   │   │   │   ├── SettingsFormPage.cs
│       │   │   │   │   │   ├── SetupPage1.Designer.cs
│       │   │   │   │   │   ├── SetupPage2a.Designer.cs
│       │   │   │   │   │   ├── SetupPage2aa.Designer.cs
│       │   │   │   │   │   ├── SetupPage2ab.Designer.cs
│       │   │   │   │   │   ├── SetupPage2b.Designer.cs
│       │   │   │   │   │   ├── SetupPage3a.Designer.cs
│       │   │   │   │   │   ├── SetupPage3a.cs
│       │   │   │   │   │   ├── SetupPage4.Designer.cs
│       │   │   │   │   │   └── SetupPage5.Designer.cs
│       │   │   │   │   ├── frmAbout.Designer.cs
│       │   │   │   │   ├── frmAbout.cs
│       │   │   │   │   ├── frmInputCallback.cs
│       │   │   │   │   ├── frmLogon.Designer.cs
│       │   │   │   │   ├── frmMatrix.Designer.cs
│       │   │   │   │   ├── frmMatrix.cs
│       │   │   │   │   ├── frmMatrix.resx
│       │   │   │   │   ├── frmMessage.Designer.cs
│       │   │   │   │   ├── frmScreen.Designer.cs
│       │   │   │   │   └── frmScreen.cs
│       │   │   │   └── Helper/
│       │   │   │       └── FormHelper.cs
│       │   │   └── ModuleInterface/
│       │   │       └── dllmain.cpp
│       │   ├── NewPlus/
│       │   │   ├── NewShellExtensionContextMenu/
│       │   │   │   ├── NewShellExtensionContextMenu.vcxproj
│       │   │   │   ├── NewShellExtensionContextMenu.vcxproj.filters
│       │   │   │   ├── TemplateExamples/
│       │   │   │   │   ├── 模板文件夹里的一切都会出现在新建+菜单中.txt
│       │   │   │   │   └── 示例文件夹/
│       │   │   │   │       ├── 另一个示例文本文件.txt
│       │   │   │   │       └── 示例文本文件.txt
│       │   │   │   └── resources.resx
│       │   │   └── NewShellExtensionContextMenu.win10/
│       │   │       └── resources.resx
│       │   ├── PowerOCR/
│       │   │   └── PowerOCR/
│       │   │       └── Properties/
│       │   │           └── Resources.resx
│       │   ├── ShortcutGuide/
│       │   │   └── ShortcutGuide/
│       │   │       └── Resources.resx
│       │   ├── Workspaces/
│       │   │   ├── WorkspacesEditor/
│       │   │   │   ├── Models/
│       │   │   │   │   └── Project.cs
│       │   │   │   └── Properties/
│       │   │   │       └── Resources.resx
│       │   │   ├── WorkspacesLauncher/
│       │   │   │   └── Resource.resx
│       │   │   ├── WorkspacesLauncherUI/
│       │   │   │   └── Properties/
│       │   │   │       └── Resources.resx
│       │   │   └── WorkspacesSnapshotTool/
│       │   │       └── Resource.resx
│       │   ├── ZoomIt/
│       │   │   └── ZoomIt/
│       │   │       ├── ZoomIt.rc
│       │   │       └── Zoomit.cpp
│       │   ├── alwaysontop/
│       │   │   └── AlwaysOnTop/
│       │   │       └── Resources.resx
│       │   ├── awake/
│       │   │   └── Awake/
│       │   │       ├── Core/
│       │   │       │   └── Constants.cs
│       │   │       └── Properties/
│       │   │           └── Resources.resx
│       │   ├── colorPicker/
│       │   │   └── ColorPickerUI/
│       │   │       ├── Properties/
│       │   │       │   └── Resources.resx
│       │   │       └── ViewModels/
│       │   │           └── ColorEditorViewModel.cs
│       │   ├── fancyzones/
│       │   │   ├── FancyZonesLib/
│       │   │   │   └── Resources.resx
│       │   │   └── editor/
│       │   │       └── FancyZonesEditor/
│       │   │           └── Properties/
│       │   │               └── Resources.resx
│       │   ├── imageresizer/
│       │   │   ├── ImageResizerContextMenu/
│       │   │   │   └── Resources.resx
│       │   │   ├── dll/
│       │   │   │   └── Resources.resx
│       │   │   └── ui/
│       │   │       ├── Properties/
│       │   │       │   └── Resources.resx
│       │   │       └── Views/
│       │   │           ├── EnumValueConverter.cs
│       │   │           └── InputPage.xaml
│       │   ├── keyboardmanager/
│       │   │   ├── KeyboardManagerEditor/
│       │   │   │   └── Resources.resx
│       │   │   └── KeyboardManagerEngineLibrary/
│       │   │       └── KeyboardEventHandlers.cpp
│       │   ├── launcher/
│       │   │   ├── Plugins/
│       │   │   │   ├── Community.PowerToys.Run.Plugin.UnitConverter/
│       │   │   │   │   ├── InputInterpreter.cs
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Community.PowerToys.Run.Plugin.VSCodeWorkspaces/
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Community.PowerToys.Run.Plugin.ValueGenerator/
│       │   │   │   │   ├── Generators/
│       │   │   │   │   │   ├── Base64/
│       │   │   │   │   │   │   ├── Base64DecodeRequest.cs
│       │   │   │   │   │   │   └── Base64Request.cs
│       │   │   │   │   │   ├── GUID/
│       │   │   │   │   │   │   └── GUIDRequest.cs
│       │   │   │   │   │   └── Uri/
│       │   │   │   │   │       ├── DataEscapeRequest.cs
│       │   │   │   │   │       ├── DataUnescapeRequest.cs
│       │   │   │   │   │       ├── HexEscapeRequest.cs
│       │   │   │   │   │       ├── HexUnescapeRequest.cs
│       │   │   │   │   │       ├── UrlDecodeRequest.cs
│       │   │   │   │   │       └── UrlEncodeRequest.cs
│       │   │   │   │   ├── InputParser.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Community.PowerToys.Run.Plugin.WebSearch/
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.Plugin.Folder/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.Plugin.Indexer/
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.Plugin.Program/
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   ├── Programs/
│       │   │   │   │   │   └── UWPApplication.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.Plugin.Shell/
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.Plugin.Uri/
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.Plugin.WindowWalker/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.Calculator/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.History/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.OneNote/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.PowerToys/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.Registry/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.Service/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.System/
│       │   │   │   │   ├── Components/
│       │   │   │   │   │   └── ResultHelper.cs
│       │   │   │   │   ├── Main.cs
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.TimeDate/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   ├── Microsoft.PowerToys.Run.Plugin.WindowsSettings/
│       │   │   │   │   └── Properties/
│       │   │   │   │       └── Resources.resx
│       │   │   │   └── Microsoft.PowerToys.Run.Plugin.WindowsTerminal/
│       │   │   │       ├── Main.cs
│       │   │   │       └── Properties/
│       │   │   │           └── Resources.resx
│       │   │   └── PowerLauncher/
│       │   │       └── Properties/
│       │   │           └── Resources.resx
│       │   ├── peek/
│       │   │   └── Peek.UI/
│       │   │       └── Strings/
│       │   │           └── en-us/
│       │   │               └── Resources.resw
│       │   ├── powerrename/
│       │   │   ├── PowerRenameContextMenu/
│       │   │   │   └── Resources.resx
│       │   │   ├── PowerRenameUILib/
│       │   │   │   ├── PowerRenameXAML/
│       │   │   │   │   └── MainWindow.xaml.cpp
│       │   │   │   └── Strings/
│       │   │   │       └── en-us/
│       │   │   │           └── Resources.resw
│       │   │   └── dll/
│       │   │       └── Resources.resx
│       │   ├── previewpane/
│       │   │   ├── GcodePreviewHandler/
│       │   │   │   └── Properties/
│       │   │   │       └── Resource.resx
│       │   │   ├── MarkdownPreviewHandler/
│       │   │   │   └── Properties/
│       │   │   │       └── Resources.resx
│       │   │   ├── MonacoPreviewHandler/
│       │   │   │   └── Properties/
│       │   │   │       └── Resources.resx
│       │   │   ├── PdfPreviewHandler/
│       │   │   │   └── Properties/
│       │   │   │       └── Resources.resx
│       │   │   ├── QoiPreviewHandler/
│       │   │   │   └── Properties/
│       │   │   │       └── Resource.resx
│       │   │   ├── SvgPreviewHandler/
│       │   │   │   └── Properties/
│       │   │   │       └── Resource.resx
│       │   │   └── powerpreview/
│       │   │       └── Resources.resx
│       │   └── registrypreview/
│       │       ├── RegistryPreview/
│       │       │   └── RegistryPreviewXAML/
│       │       │       └── MainWindow.xaml.cs
│       │       └── RegistryPreviewUILib/
│       │           └── Strings/
│       │               └── en-US/
│       │                   └── Resources.resw
│       ├── runner/
│       │   ├── Resources.resx
│       │   └── main.cpp
│       └── settings-ui/
│           ├── Settings.UI/
│           │   ├── Assets/
│           │   │   └── Settings/
│           │   │       └── Scripts/
│           │   │           ├── CheckCmdNotFoundRequirements.ps1
│           │   │           ├── DisableModule.ps1
│           │   │           ├── EnableModule.ps1
│           │   │           ├── InstallPowerShell7.ps1
│           │   │           └── InstallWinGetClientModule.ps1
│           │   ├── Converters/
│           │   │   └── ZoomItTypeSpeedSliderConverter.cs
│           │   ├── SettingsXAML/
│           │   │   ├── App.xaml.cs
│           │   │   ├── OOBE/
│           │   │   │   └── Views/
│           │   │   │       ├── OobeShellPage.xaml
│           │   │   │       └── OobeShellPage.xaml.cs
│           │   │   └── Views/
│           │   │       ├── ColorPickerPage.xaml
│           │   │       ├── ImageResizerPage.xaml
│           │   │       ├── MouseUtilsPage.xaml
│           │   │       ├── MouseWithoutBordersPage.xaml
│           │   │       ├── PowerLauncherPage.xaml
│           │   │       ├── PowerOcrPage.xaml
│           │   │       ├── PowerPreviewPage.xaml
│           │   │       ├── PowerRenamePage.xaml
│           │   │       └── ZoomItPage.xaml
│           │   ├── Strings/
│           │   │   └── en-us/
│           │   │       └── Resources.resw
│           │   └── ViewModels/
│           │       ├── CmdNotFoundViewModel.cs
│           │       ├── DashboardViewModel.cs
│           │       └── PowerAccentViewModel.cs
│           └── Settings.UI.Library/
│               └── ColorFormatModel.cs
├── README.md
└── Tools/
    ├── README.md
    ├── autosort.py
    ├── autosort_newgptbroken.py
    ├── autosort_old.py
    ├── blank
    ├── clean.cmd
    ├── clean.txt
    ├── modify.cmd
    ├── modify_arm64.cmd
    ├── zhcn_modify_list.txt
    ├── zhcn_modify_list2.txt
    └── zhcn_modify_list2.txt.bak
Download .txt
SYMBOL INDEX (948 symbols across 81 files)

FILE: PowerToys/src/common/interop/keyboard_layout.cpp
  function DWORD (line 30) | DWORD LayoutMap::GetKeyFromName(const std::wstring& name)
  function mapKeycodeToUnicode (line 66) | bool mapKeycodeToUnicode(const int vCode, HKL layout, const BYTE* keySta...

FILE: PowerToys/src/common/sysinternals/Eula/eula.c
  function BOOL (line 75) | static BOOL EulaCenter( HWND hwndChild, HWND hwndParent )
  function BOOL (line 130) | static BOOL PrintRichedit( HWND hRichedit )
  function DWORD (line 231) | DWORD CALLBACK StreamCallback( DWORD_PTR dwCookie, LPBYTE pbBuff, LONG c...
  function INT_PTR (line 243) | static INT_PTR CALLBACK EulaProc( HWND hwndDlg, UINT uMsg, WPARAM wParam...
  function WORD (line 288) | static WORD * Align2( WORD * pos )
  function WORD (line 292) | static WORD * Align4( WORD * pos )
  function CopyText (line 297) | static int CopyText( WORD * pos, const WCHAR * text )
  function BOOL (line 304) | BOOL ShowEulaInternal( const TCHAR * ToolName, DWORD eulaAccepted )
  function BOOL (line 448) | BOOL ShowEulaW( const TCHAR * ToolName, int *argc, PWCHAR argv[] )
  function BOOL (line 494) | BOOL ShowEula( const TCHAR * ToolName, int *argc, PTCHAR argv[] )
  function BOOL (line 531) | BOOL IsIoTEdition()
  function BOOL (line 553) | BOOL IsRemoteOnlyEdition()
  function BOOL (line 575) | BOOL IsRunningRemotely()
  function DWORD (line 582) | DWORD ShowEulaConsole()
  function ShowEulaConsoleNoPrompt (line 610) | void ShowEulaConsoleNoPrompt()
  function BOOL (line 620) | BOOL IsEulaAcceptedValueExist(HKEY hKeyRoot, LPCTSTR lpSubKey)
  function BOOL (line 646) | BOOL IsEulaRegkeyAdded(const TCHAR * ToolName)
  function BOOL (line 674) | BOOL IsEulaSwitchAppended(int *argc, PTCHAR argv[])
  function BOOL (line 699) | BOOL IsEulaAccepted(const TCHAR * ToolName, int *argc, PTCHAR argv[])

FILE: PowerToys/src/modules/CropAndLock/CropAndLock/main.cpp
  type winrt (line 22) | namespace winrt
  type util (line 30) | namespace util
  function wWinMain (line 38) | int WINAPI wWinMain(_In_ HINSTANCE, _In_opt_ HINSTANCE, _In_ PWSTR lpCmd...

FILE: PowerToys/src/modules/FileLocksmith/FileLocksmithContextMenu/dllmain.cpp
  function BOOL (line 26) | BOOL APIENTRY DllMain( HMODULE hModule,
  function FileLocksmithContextMenuCommand (line 44) | FileLocksmithContextMenuCommand final : public RuntimeClass<RuntimeClass...
  function EXPCMDFLAGS (line 48) | virtual const EXPCMDFLAGS Flags() { return ECF_DEFAULT; }
  function EXPCMDSTATE (line 49) | virtual const EXPCMDSTATE State(_In_opt_ IShellItemArray* selection) { r...
  function IFACEMETHODIMP (line 52) | IFACEMETHODIMP GetTitle(_In_opt_ IShellItemArray* items, _Outptr_result_...
  function IFACEMETHODIMP (line 57) | IFACEMETHODIMP GetIcon(_In_opt_ IShellItemArray*, _Outptr_result_nullonf...
  function IFACEMETHODIMP (line 65) | IFACEMETHODIMP GetToolTip(_In_opt_ IShellItemArray*, _Outptr_result_null...
  function IFACEMETHODIMP (line 71) | IFACEMETHODIMP GetCanonicalName(_Out_ GUID* guidCommandName)
  function IFACEMETHODIMP (line 77) | IFACEMETHODIMP GetState(_In_opt_ IShellItemArray* selection, _In_ BOOL o...
  function IFACEMETHODIMP (line 94) | IFACEMETHODIMP Invoke(_In_opt_ IShellItemArray* selection, _In_opt_ IBin...
  function IFACEMETHODIMP (line 161) | IFACEMETHODIMP GetFlags(_Out_ EXPCMDFLAGS* flags)
  function IFACEMETHODIMP (line 166) | IFACEMETHODIMP EnumSubCommands(_COM_Outptr_ IEnumExplorerCommand** enumC...
  function IFACEMETHODIMP (line 173) | IFACEMETHODIMP SetSite(_In_ IUnknown* site) noexcept
  function IFACEMETHODIMP (line 178) | IFACEMETHODIMP GetSite(_In_ REFIID riid, _COM_Outptr_ void** site) noexc...
  function STDAPI (line 191) | STDAPI DllGetActivationFactory(_In_ HSTRING activatableClassId, _COM_Out...
  function STDAPI (line 196) | STDAPI DllCanUnloadNow()
  function STDAPI (line 201) | STDAPI DllGetClassObject(_In_ REFCLSID rclsid, _In_ REFIID riid, _COM_Ou...

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.Clipboard.cs
  class Common (line 39) | internal partial class Common
    method CheckClipboardEx (line 88) | internal static bool CheckClipboardEx(ByteArrayOrString data, bool isF...
    method SendClipboardDataUsingTCP (line 256) | private static void SendClipboardDataUsingTCP(byte[] bytes, bool image)
    method ReceiveClipboardDataUsingTCP (line 311) | internal static void ReceiveClipboardDataUsingTCP(DATA data, bool imag...
    method GetRemoteClipboard (line 381) | internal static void GetRemoteClipboard(string postAction)
    method ConnectAndGetData (line 407) | private static void ConnectAndGetData(object postAction)
    method ReceiveAndProcessClipboardData (line 493) | internal static void ReceiveAndProcessClipboardData(string remoteMachi...
    method ShakeHand (line 795) | internal static bool ShakeHand(ref string remoteName, Socket s, out St...
    method ConnectToRemoteClipboardSocket (line 908) | internal static TcpClient ConnectToRemoteClipboardSocket(string remote...
    method SetClipboardData (line 941) | internal static void SetClipboardData(byte[] data)
  class Clipboard (line 1037) | internal static class Clipboard
    method SetFileDropList (line 1039) | public static void SetFileDropList(StringCollection filePaths)
    method SetImage (line 1076) | public static void SetImage(Image image)
    method SetText (line 1107) | public static void SetText(string text)
    method SetDataObject (line 1138) | public static void SetDataObject(DataObject dataObject)

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.Encryption.cs
  class Common (line 25) | internal partial class Common
    method KeyDisplayedText (line 75) | internal static string KeyDisplayedText(string key)
    method InitEncryption (line 95) | internal static void InitEncryption()
    method GenLegalKey (line 119) | internal static byte[] GenLegalKey()
    method GenLegalIV (line 142) | private static byte[] GenLegalIV()
    method GetEncryptedStream (line 158) | internal static Stream GetEncryptedStream(Stream encryptedStream)
    method GetDecryptedStream (line 165) | internal static Stream GetDecryptedStream(Stream encryptedStream)
    method Get24BitHash (line 172) | internal static uint Get24BitHash(string st)
    method GetDebugInfo (line 201) | internal static string GetDebugInfo(string st)
    method CreateDefaultKey (line 206) | internal static string CreateDefaultKey()
    method CreateRandomKey (line 213) | public static string CreateRandomKey()
    method IsKeyValid (line 239) | internal static bool IsKeyValid(string key, out string error)

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.Event.cs
  class Common (line 28) | internal partial class Common
    method Common (line 39) | static Common()
    method MouseEvent (line 65) | [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveCo...
    method IsSwitchingByMouseEnabled (line 150) | internal static bool IsSwitchingByMouseEnabled()
    method PrepareToSwitchToMachine (line 155) | internal static void PrepareToSwitchToMachine(ID newDesMachineID, Poin...
    method SaveSwitchCount (line 235) | internal static void SaveSwitchCount()
    method KeybdEvent (line 247) | internal static void KeybdEvent(KEYBDDATA e)

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.Helper.cs
  class Common (line 30) | internal partial class Common
    method WatchDogThread (line 38) | private static void WatchDogThread()
    method HelperThread (line 73) | private static void HelperThread()
    method MainFormDotEx (line 133) | internal static void MainFormDotEx(bool bCheckTS)
    method MainForm3Pixels (line 193) | internal static void MainForm3Pixels()
    method MainFormDot (line 225) | internal static void MainFormDot()
    method ToggleIcon (line 245) | internal static void ToggleIcon()
    method RunDDHelper (line 265) | internal static void RunDDHelper(bool cleanUp = false)
    method SendMessageToHelper (line 347) | internal static int SendMessageToHelper(int msg, IntPtr wparam, IntPtr...
    method IsWindows8AndUp (line 367) | internal static bool IsWindows8AndUp()
    method GetMiniLog (line 373) | internal static string GetMiniLog(IEnumerable<ControlCollection> optio...
    method GetUserName (line 438) | internal static bool GetUserName()
    method ShowOneWayModeMessage (line 460) | internal static void ShowOneWayModeMessage()
    method ApplyCADSetting (line 472) | internal static void ApplyCADSetting()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.MachineStuff.cs
  type MachineInf (line 29) | internal struct MachineInf
  class MyRectangle (line 36) | internal class MyRectangle
  class Common (line 44) | internal partial class Common
    method MoveToMyNeighbourIfNeeded (line 91) | static bool MoveToMyNeighbourIfNeeded(int x, int y)
    method ConvertToUniversalValue (line 196) | private static Point ConvertToUniversalValue(Point p, MyRectangle r)
    method MoveToMyNeighbourIfNeeded (line 218) | internal static Point MoveToMyNeighbourIfNeeded(int x, int y, ID desMa...
    method MoveRight (line 302) | [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveCo...
    method MoveLeft (line 442) | [SuppressMessage("Microsoft.Maintainability", "CA1502:AvoidExcessiveCo...
    method MoveUp (line 551) | private static Point MoveUp(int x, int y)
    method MoveDown (line 620) | private static Point MoveDown(int x, int y)
    method RemoveDeadMachines (line 690) | internal static bool RemoveDeadMachines(ID ip)
    method RemoveDeadMachines (line 711) | internal static void RemoveDeadMachines()
    method AddToMachinePool (line 727) | internal static string AddToMachinePool(DATA package)
    method UpdateClientSockets (line 794) | internal static void UpdateClientSockets(string logHeader)
    method ShowSetupForm (line 808) | internal static void ShowSetupForm(bool reopenSockets = false)
    method CloseSetupForm (line 844) | internal static void CloseSetupForm()
    method ShowMachineMatrix (line 853) | internal static void ShowMachineMatrix()
    method UpdateMachinePoolStringSetting (line 962) | internal static void UpdateMachinePoolStringSetting()
    method SendMachineMatrix (line 967) | internal static void SendMachineMatrix()
    method UpdateMachineMatrix (line 993) | internal static void UpdateMachineMatrix(DATA package)
    method SwitchToMachine (line 1023) | internal static void SwitchToMachine(string name)
    method SwitchToMultipleMode (line 1045) | internal static void SwitchToMultipleMode(bool multipleMode, bool cent...
    method CheckSecondInstance (line 1067) | internal static bool CheckSecondInstance(bool sendMessage = false)
    method AssertOneInstancePerDesktopSession (line 1081) | internal static void AssertOneInstancePerDesktopSession()
    method IdFromName (line 1093) | internal static ID IdFromName(string name)
    method NameFromID (line 1098) | internal static string NameFromID(ID id)
    method InMachineMatrix (line 1111) | internal static bool InMachineMatrix(string name)
    method ClearComputerMatrix (line 1129) | internal static void ClearComputerMatrix()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.Service.cs
  class Common (line 30) | internal partial class Common
    method StartMouseWithoutBordersService (line 35) | internal static void StartMouseWithoutBordersService(string desktopToR...
    method StartServiceAndSendLogoffSignal (line 138) | internal static void StartServiceAndSendLogoffSignal()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/EasyMouseOption.cs
  type EasyMouseOption (line 7) | internal enum EasyMouseOption : int

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/Extensions.cs
  class Extensions (line 16) | internal static class Extensions
    method ReadEx (line 18) | internal static int ReadEx(this Stream st, byte[] buf, int bufIndex, i...
    method KillProcess (line 32) | internal static void KillProcess(this Process process, bool keepTrying...

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/IClipboardHelper.cs
  type ByteArrayOrString (line 36) | [JsonObject(MemberSerialization.OptIn)]
    type ValueType (line 39) | private enum ValueType
    method ByteArrayOrString (line 51) | public ByteArrayOrString(byte[] byteArray)
    method ByteArrayOrString (line 58) | public ByteArrayOrString(string str)
    method ShouldSerializeByteArray (line 91) | public bool ShouldSerializeByteArray() => IsByteArray;
    method ShouldSerializeString (line 93) | public bool ShouldSerializeString() => IsString;
    method GetByteArray (line 95) | public byte[] GetByteArray()
    method GetString (line 105) | public string GetString()
  type IClipboardHelper (line 120) | public interface IClipboardHelper
    method SendLog (line 122) | void SendLog(string log);
    method SendDragFile (line 124) | void SendDragFile(string fileName);
    method SendClipboardData (line 126) | void SendClipboardData(ByteArrayOrString data, bool isFilePath);
  class ClipboardHelper (line 130) | public class ClipboardHelper : IClipboardHelper
    method SendLog (line 132) | public void SendLog(string log)
    method SendDragFile (line 155) | public void SendDragFile(string fileName)
    method SendClipboardData (line 160) | public void SendClipboardData(ByteArrayOrString data, bool isFilePath)
  class IpcChannel (line 167) | internal sealed class IpcChannel<T>
    method StartIpcServer (line 170) | public static T StartIpcServer(string pipeName, CancellationToken canc...
  class IpcHelper (line 216) | internal sealed class IpcHelper
    method CleanupStream (line 222) | private static void CleanupStream()
    method CreateIpcServer (line 234) | internal static void CreateIpcServer(bool cleanup)
    method CreateIpcClient (line 258) | internal static IClipboardHelper CreateIpcClient()
  class EventLogger (line 279) | internal static class EventLogger
    method LogEvent (line 287) | internal static void LogEvent(string message, EventLogEntryType logTyp...
  class ClipboardMMHelper (line 306) | internal static class ClipboardMMHelper
    method Log (line 312) | private static void Log(string log)
    method Log (line 317) | private static void Log(Exception e)
    method HookClipboard (line 322) | internal static void HookClipboard(FormHelper f)
    method UnhookClipboard (line 362) | internal static void UnhookClipboard()
    method ReHookClipboard (line 376) | private static void ReHookClipboard()
    method UpdateNextClipboardViewer (line 382) | internal static bool UpdateNextClipboardViewer(Message m)
    method PassMessageToTheNextViewer (line 393) | internal static void PassMessageToTheNextViewer(Message m)
    method ContainsFileDropList (line 401) | public static bool ContainsFileDropList()
    method ContainsImage (line 423) | public static bool ContainsImage()
    method ContainsText (line 445) | public static bool ContainsText()
    method GetFileDropList (line 467) | public static StringCollection GetFileDropList()
    method GetImage (line 489) | public static Image GetImage()
    method GetText (line 511) | public static string GetText(TextDataFormat format)
    method SetImage (line 537) | public static void SetImage(Image image)
    method SetText (line 566) | public static void SetText(string text)
  class SharedConst (line 598) | internal sealed class SharedConst
  class Common (line 603) | internal sealed partial class Common
    method Retry (line 607) | internal static T Retry<T>(string name, Func<T> func, Action<string> l...

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/InputHook.cs
  class InputHook (line 30) | internal class InputHook
    type MouseHookStruct (line 36) | [StructLayout(LayoutKind.Sequential)]
    type MouseLLHookStruct (line 46) | [StructLayout(LayoutKind.Sequential)]
    type KeyboardHookStruct (line 56) | [StructLayout(LayoutKind.Sequential)]
    method InputHook (line 94) | internal InputHook()
    method Start (line 104) | internal void Start()
    method Stop (line 159) | internal void Stop()
    method LParamToMouseLLHookStruct (line 189) | private static MouseLLHookStruct LParamToMouseLLHookStruct(IntPtr lParam)
    method LParamToKeyboardHookStruct (line 197) | private static KeyboardHookStruct LParamToKeyboardHookStruct(IntPtr lP...
    method MouseHookProc (line 205) | private int MouseHookProc(int nCode, int wParam, IntPtr lParam)
    method KeyboardHookProc (line 337) | private int KeyboardHookProc(int nCode, int wParam, IntPtr lParam)
    method ProcessKeyEx (line 371) | private bool ProcessKeyEx(int vkCode, int flags, KEYBDDATA hookCallbac...
    method UpdateEasyMouseKeyDown (line 467) | private void UpdateEasyMouseKeyDown(VK vkCode)
    method ResetModifiersState (line 477) | private void ResetModifiersState(HotkeySettings matchingHotkey)
    method GetVkCodesList (line 485) | private List<short> GetVkCodesList(HotkeySettings hotkey)
    method ProcessHotKeys (line 516) | private bool ProcessHotKeys(int vkCode, KEYBDDATA hookCallbackKeybdData)
    method Switch2 (line 626) | private static bool Switch2(int index)
    method ResetLastSwitchKeys (line 660) | internal void ResetLastSwitchKeys()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/Program.cs
  class Program (line 47) | internal static class Program
    method Main (line 55) | [STAThread]
    type ISettingsSyncHelper (line 240) | private interface ISettingsSyncHelper
      type MachineSocketState (line 242) | [JsonObject(MemberSerialization.OptIn)]
      method Shutdown (line 255) | void Shutdown();
      method Reconnect (line 257) | void Reconnect();
      method GenerateNewKey (line 259) | void GenerateNewKey();
      method ConnectToMachine (line 261) | void ConnectToMachine(string machineName, string securityKey);
      method RequestMachineSocketStateAsync (line 263) | Task<MachineSocketState[]> RequestMachineSocketStateAsync();
    class SettingsSyncHelper (line 266) | private sealed class SettingsSyncHelper : ISettingsSyncHelper
      method RequestMachineSocketStateAsync (line 268) | public Task<ISettingsSyncHelper.MachineSocketState[]> RequestMachine...
      method ConnectToMachine (line 289) | public void ConnectToMachine(string pcName, string securityKey)
      method GenerateNewKey (line 312) | public void GenerateNewKey()
      method Reconnect (line 327) | public void Reconnect()
      method Shutdown (line 347) | public void Shutdown()
    method StartSettingSyncThread (line 364) | internal static void StartSettingSyncThread()
    method StartInputCallbackThread (line 372) | internal static void StartInputCallbackThread()
    method InputCallbackThread (line 380) | private static void InputCallbackThread()
    method StartService (line 395) | internal static void StartService()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Class/SocketStuff.cs
  type SocketStatus (line 53) | internal enum SocketStatus : int
  class TcpSk (line 67) | internal class TcpSk : IDisposable
    method TcpSk (line 69) | public TcpSk(bool isClient, Socket s, SocketStatus status, string mach...
    method Dispose (line 138) | public void Dispose()
  class SocketStuff (line 148) | internal class SocketStuff
    method SocketStuff (line 178) | internal SocketStuff(int port, bool byUser)
    method Close (line 355) | internal void Close(bool sentWait)
    method CreateSocket (line 474) | private Exception CreateSocket()
    method TcpSendData (line 496) | private static int TcpSendData(TcpSk tcp, byte[] bytes)
    method ProcessReceivedDataEx (line 530) | private static void ProcessReceivedDataEx(byte[] buf)
    method TcpReceiveData (line 557) | internal static DATA TcpReceiveData(TcpSk tcp, out int bytesReceived)
    method PreProcessData (line 611) | private static void PreProcessData(PackageType type)
    method TcpSend (line 661) | internal int TcpSend(TcpSk tcp, DATA data)
    method TCPServerThread (line 682) | private void TCPServerThread(object param)
    method GetMachineNameFromSocket (line 732) | private static string GetMachineNameFromSocket(Socket socket)
    method AddSocket (line 763) | private void AddSocket(Socket s)
    method StartNewTcpServer (line 771) | private void StartNewTcpServer(TcpSk tcp, string machineName)
    method UpdateTCPClients (line 796) | internal void UpdateTCPClients()
    method IsBadIP (line 841) | private static bool IsBadIP(string machineName, IPAddress ip)
    method AddBadIP (line 849) | private static void AddBadIP(string machineName, IPAddress ip)
    method ClearBadIPs (line 872) | internal static void ClearBadIPs()
    method StartNewTcpClient (line 883) | internal void StartNewTcpClient(string machineName)
    method CheckForSameSubNet (line 1064) | private bool CheckForSameSubNet(List<IPAddress> validatedAddresses, st...
    method GetMyIPv4Addresses (line 1108) | private IEnumerable<IPAddress> GetMyIPv4Addresses()
    method StartNewTcpClientThread (line 1128) | private void StartNewTcpClientThread(string machineName, IPAddress ip)
    method FlagReopenSocketIfNeeded (line 1238) | private void FlagReopenSocketIfNeeded(Exception e)
    method MainTCPRoutine (line 1260) | private void MainTCPRoutine(TcpSk tcp, string machineName, bool isClient)
    method AcceptConnectionAndSendClipboardData (line 1566) | private static void AcceptConnectionAndSendClipboardData(object param)
    method SendOrReceiveClipboardData (line 1632) | internal static void SendOrReceiveClipboardData(Socket s)
    method SendClipboardData (line 1672) | internal static void SendClipboardData(Socket s, Stream ecStream)
    method SendFileEx (line 1812) | private static bool SendFileEx(Socket s, Stream ecStream, string fileN...
    method SendFile (line 1863) | private static bool SendFile(Socket s, Stream ecStream, string fileName)
    method SendData (line 1882) | private static bool SendData(Socket s, Stream ecStream, byte[] data)
    method AddTcpSocket (line 1932) | private TcpSk AddTcpSocket(bool isClient, Socket s, SocketStatus statu...
    method AddTcpSocket (line 1948) | private TcpSk AddTcpSocket(bool isClient, Socket s, SocketStatus statu...
    method UpdateTcpSockets (line 1964) | private void UpdateTcpSockets(TcpSk tcp, SocketStatus status)
    method PreventDoS (line 2094) | private void PreventDoS(List<TcpSk> sockets)

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Control/Machine.cs
  class Machine (line 22) | internal partial class Machine : UserControl
    method Machine (line 31) | internal Machine()
    method PictureBoxLogo_MouseDown (line 103) | private void PictureBoxLogo_MouseDown(object sender, MouseEventArgs e)
    method CheckBoxEnabled_CheckedChanged (line 116) | private void CheckBoxEnabled_CheckedChanged(object sender, EventArgs e)
    method StatusString (line 121) | private static string StatusString(SocketStatus status)
    method PictureBoxLogo_Paint (line 210) | private void PictureBoxLogo_Paint(object sender, PaintEventArgs e)

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Control/Machine.designer.cs
  class Machine (line 3) | partial class Machine
    method Dispose (line 14) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 29) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Core/Receiver.cs
  class Receiver (line 28) | internal static class Receiver
    method PreProcess (line 40) | private static bool PreProcess(DATA package)
    method ProcessPackage (line 86) | internal static void ProcessPackage(DATA package, TcpSk tcp)
    method GetNameOfMachineWithClipboardData (line 406) | internal static void GetNameOfMachineWithClipboardData(DATA package)
    method SignalBigClipboardData (line 424) | private static void SignalBigClipboardData()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SettingsFormPage.Designer.cs
  class SettingsFormPage (line 3) | partial class SettingsFormPage
    method Dispose (line 14) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 29) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SettingsFormPage.cs
  class SettingsFormPage (line 13) | public partial class SettingsFormPage : UserControl
    method SettingsFormPage (line 23) | public SettingsFormPage()
    method OnPageClosing (line 28) | public virtual void OnPageClosing()
    method SendNextPage (line 32) | protected void SendNextPage(SettingsFormPage page)
    method CreateBackPage (line 37) | protected virtual SettingsFormPage CreateBackPage()
    method GetSecureKey (line 42) | protected string GetSecureKey()
    method BackButton_Click (line 47) | private void BackButton_Click(object sender, EventArgs e)
    method ButtonSkip_Click (line 52) | private void ButtonSkip_Click(object sender, EventArgs e)

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage1.Designer.cs
  class SetupPage1 (line 5) | partial class SetupPage1
    method Dispose (line 16) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 31) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2a.Designer.cs
  class SetupPage2a (line 5) | partial class SetupPage2a
    method Dispose (line 16) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 31) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2aa.Designer.cs
  class SetupPage2aa (line 5) | partial class SetupPage2aa
    method Dispose (line 16) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 31) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2ab.Designer.cs
  class SetupPage2ab (line 5) | partial class SetupPage2ab
    method Dispose (line 16) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 31) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2b.Designer.cs
  class SetupPage2b (line 5) | partial class SetupPage2b
    method Dispose (line 16) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 31) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage3a.Designer.cs
  class SetupPage3a (line 5) | partial class SetupPage3a
    method Dispose (line 16) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 31) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage3a.cs
  class SetupPage3a (line 16) | public partial class SetupPage3a : SettingsFormPage
    method SetupPage3a (line 39) | public SetupPage3a()
    method ShowStatus (line 45) | private void ShowStatus(string status)
    method OnPageClosing (line 51) | public override void OnPageClosing()
    method OnLoad (line 57) | protected override void OnLoad(EventArgs e)
    method AnimationTimerTick (line 107) | private void AnimationTimerTick(object sender, EventArgs e)
    method UpdateAnimation (line 112) | private void UpdateAnimation()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage4.Designer.cs
  class SetupPage4 (line 5) | partial class SetupPage4
    method Dispose (line 16) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 31) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage5.Designer.cs
  class SetupPage5 (line 5) | partial class SetupPage5
    method Dispose (line 16) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 31) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/frmAbout.Designer.cs
  class FrmAbout (line 3) | partial class FrmAbout
    method Dispose (line 13) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 28) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/frmAbout.cs
  class FrmAbout (line 20) | internal partial class FrmAbout : System.Windows.Forms.Form, IDisposable
    method FrmAbout (line 22) | internal FrmAbout()
    method FrmAbout_FormClosed (line 119) | private void FrmAbout_FormClosed(object sender, FormClosedEventArgs e)

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/frmInputCallback.cs
  class FrmInputCallback (line 25) | internal partial class FrmInputCallback : System.Windows.Forms.Form
    method FrmInputCallback (line 27) | internal FrmInputCallback()
    method FrmInputCallback_Load (line 32) | private void FrmInputCallback_Load(object sender, EventArgs e)
    method FrmInputCallback_Shown (line 41) | private void FrmInputCallback_Shown(object sender, EventArgs e)
    method FrmInputCallback_FormClosing (line 47) | private void FrmInputCallback_FormClosing(object sender, FormClosingEv...
    method InstallKeyboardAndMouseHook (line 55) | internal void InstallKeyboardAndMouseHook()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/frmLogon.Designer.cs
  class frmLogon (line 3) | partial class frmLogon
    method Dispose (line 14) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 29) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/frmMatrix.Designer.cs
  class FrmMatrix (line 8) | partial class FrmMatrix
    method Dispose (line 19) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 34) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/frmMatrix.cs
  class FrmMatrix (line 40) | internal partial class FrmMatrix : System.Windows.Forms.Form, IDisposable
    method FrmMatrix (line 49) | internal FrmMatrix()
    method ButtonCancel_Click (line 62) | private void ButtonCancel_Click(object sender, EventArgs e)
    method ButtonOK_Click (line 69) | private void ButtonOK_Click(object sender, EventArgs e)
    method UpdateKeyTextBox (line 133) | internal void UpdateKeyTextBox()
    method InitAll (line 139) | private void InitAll()
    method LoadMachines (line 148) | private void LoadMachines()
    method CheckBoxShowKey_CheckedChanged (line 198) | private void CheckBoxShowKey_CheckedChanged(object sender, EventArgs e)
    method FrmMatrix_Shown (line 203) | private void FrmMatrix_Shown(object sender, EventArgs e)
    method FrmMatrix_FormClosed (line 248) | private void FrmMatrix_FormClosed(object sender, FormClosedEventArgs e)
    method PaintMyLogo (line 273) | private void PaintMyLogo()
    method AddNewMachine (line 338) | private void AddNewMachine()
    method HelperTimer_Tick (line 372) | private void HelperTimer_Tick(object sender, EventArgs e)
    method ShowKeyErrorMsg (line 497) | private void ShowKeyErrorMsg(string msg)
    method UpdateKey (line 504) | private bool UpdateKey(string newKey)
    method CreateMachines (line 531) | private void CreateMachines()
    method ArrangeMachines (line 547) | private void ArrangeMachines()
    method M_EnabledChanged (line 561) | private void M_EnabledChanged(object sender, EventArgs e)
    method Machine_MouseDown (line 585) | private void Machine_MouseDown(object sender, MouseEventArgs e)
    method Form_DragEnter (line 604) | private void Form_DragEnter(object sender, DragEventArgs e)
    method IsOnSameRow (line 611) | private bool IsOnSameRow(Machine m1, Machine m2)
    method IsOnSameCol (line 616) | private bool IsOnSameCol(Machine m1, Machine m2)
    method Form_DragOver (line 623) | private void Form_DragOver(object sender, DragEventArgs e)
    method Form_DragDrop (line 698) | private void Form_DragDrop(object sender, DragEventArgs e)
    method FrmMatrix_DragLeave (line 721) | private void FrmMatrix_DragLeave(object sender, EventArgs e)
    method LoadSettingsToUI (line 727) | private void LoadSettingsToUI()
    method ShowTip (line 750) | internal void ShowTip(ToolTipIcon icon, string text, int duration)
    method LinkLabelHelp_LinkClicked (line 762) | private void LinkLabelHelp_LinkClicked(object sender, LinkLabelLinkCli...
    method CheckBoxShareClipboard_CheckedChanged (line 768) | private void CheckBoxShareClipboard_CheckedChanged(object sender, Even...
    method CheckBoxTransferFile_CheckedChanged (line 777) | private void CheckBoxTransferFile_CheckedChanged(object sender, EventA...
    method CheckBoxDisableCAD_CheckedChanged (line 786) | private void CheckBoxDisableCAD_CheckedChanged(object sender, EventArg...
    method FrmMatrix_Load (line 795) | private void FrmMatrix_Load(object sender, EventArgs e)
    method RadioButton_CheckedChanged (line 911) | private void RadioButton_CheckedChanged(object sender, EventArgs e)
    method ComboBoxShowSettings_TextChanged (line 923) | private void ComboBoxShowSettings_TextChanged(object sender, EventArgs e)
    method ComboBoxExitMM_TextChanged (line 928) | private void ComboBoxExitMM_TextChanged(object sender, EventArgs e)
    method ComboBoxLockMachine_TextChanged (line 933) | private void ComboBoxLockMachine_TextChanged(object sender, EventArgs e)
    method ComboBoxSwitchToAllPC_TextChanged (line 947) | private void ComboBoxSwitchToAllPC_TextChanged(object sender, EventArg...
    method CheckBoxHideLogo_CheckedChanged (line 966) | private void CheckBoxHideLogo_CheckedChanged(object sender, EventArgs e)
    method ShowUpdateMessage (line 971) | private void ShowUpdateMessage()
    method CheckBoxBlockScreenSaver_CheckedChanged (line 1017) | private void CheckBoxBlockScreenSaver_CheckedChanged(object sender, Ev...
    method ComboBoxReconnect_TextChanged (line 1023) | private void ComboBoxReconnect_TextChanged(object sender, EventArgs e)
    method CheckBoxCircle_CheckedChanged (line 1038) | private void CheckBoxCircle_CheckedChanged(object sender, EventArgs e)
    method CheckBoxBlockMouseAtCorners_CheckedChanged (line 1048) | private void CheckBoxBlockMouseAtCorners_CheckedChanged(object sender,...
    method CheckBoxHideMouse_CheckedChanged (line 1054) | private void CheckBoxHideMouse_CheckedChanged(object sender, EventArgs e)
    method ComboBoxEasyMouseOption_TextChanged (line 1060) | private void ComboBoxEasyMouseOption_TextChanged(object sender, EventA...
    method ComboBoxEasyMouse_TextChanged (line 1073) | private void ComboBoxEasyMouse_TextChanged(object sender, EventArgs e)
    method CheckBoxMouseMoveRelatively_CheckedChanged (line 1088) | private void CheckBoxMouseMoveRelatively_CheckedChanged(object sender,...
    method CheckBoxDrawMouse_CheckedChanged (line 1094) | private void CheckBoxDrawMouse_CheckedChanged(object sender, EventArgs e)
    method CheckBoxTwoRow_CheckedChanged (line 1104) | private void CheckBoxTwoRow_CheckedChanged(object sender, EventArgs e)
    method ButtonNewKey_Click (line 1110) | private void ButtonNewKey_Click(object sender, EventArgs e)
    method CheckBoxClipNetStatus_CheckedChanged (line 1126) | private void CheckBoxClipNetStatus_CheckedChanged(object sender, Event...
    method CheckBoxSendLog_CheckedChanged (line 1132) | private void CheckBoxSendLog_CheckedChanged(object sender, EventArgs e)
    method FrmMatrix_Resize (line 1137) | private void FrmMatrix_Resize(object sender, EventArgs e)
    method CheckBoxReverseLookup_CheckedChanged (line 1151) | private void CheckBoxReverseLookup_CheckedChanged(object sender, Event...
    method CheckBoxVKMap_CheckedChanged (line 1157) | private void CheckBoxVKMap_CheckedChanged(object sender, EventArgs e)
    method LinkLabelMiniLog_LinkClicked (line 1164) | private void LinkLabelMiniLog_LinkClicked(object sender, LinkLabelLink...
    method ComboBoxScreenCapture_TextChanged (line 1172) | private void ComboBoxScreenCapture_TextChanged(object sender, EventArg...
    method LinkLabelReConfigure_LinkClicked (line 1177) | private void LinkLabelReConfigure_LinkClicked(object sender, LinkLabel...
    method CheckBoxSameSubNet_CheckedChanged (line 1195) | private void CheckBoxSameSubNet_CheckedChanged(object sender, EventArg...
    method PaintMyLogo (line 1202) | private void PaintMyLogo()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/frmMessage.Designer.cs
  class FrmMessage (line 3) | partial class FrmMessage
    method Dispose (line 14) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 29) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/frmScreen.Designer.cs
  class FrmScreen (line 3) | partial class FrmScreen
    method Dispose (line 14) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 29) | private void InitializeComponent()

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Form/frmScreen.cs
  class FrmScreen (line 52) | internal partial class FrmScreen : System.Windows.Forms.Form
    method FrmScreen (line 73) | internal FrmScreen()
    method FrmScreen_FormClosing (line 93) | private void FrmScreen_FormClosing(object sender, FormClosingEventArgs e)
    method Destroy (line 109) | internal void Destroy()
    method Quit (line 130) | internal void Quit(bool cleanup, bool isFormClosing)
    method MenuExit_Click (line 164) | private void MenuExit_Click(object sender, EventArgs e)
    method MenuOnClick (line 171) | internal void MenuOnClick(object sender, EventArgs e)
    method UpdateMenu (line 177) | internal void UpdateMenu()
    method FrmScreen_Load (line 245) | private void FrmScreen_Load(object sender, EventArgs e)
    method HelperTimer_Tick (line 308) | private void HelperTimer_Tick(object sender, EventArgs e)
    method MenuMachineMatrix_Click (line 602) | private void MenuMachineMatrix_Click(object sender, EventArgs e)
    method FrmScreen_MouseMove (line 607) | private void FrmScreen_MouseMove(object sender, MouseEventArgs e)
    method ChangeIcon (line 621) | internal void ChangeIcon(int iconCode)
    method MenuAllPC_Click (line 702) | internal void MenuAllPC_Click(object sender, EventArgs e)
    method UpdateMultipleModeIconAndMenu (line 710) | internal void UpdateMultipleModeIconAndMenu()
    method WndProc (line 721) | protected override void WndProc(ref Message m)
    method NotifyIcon_MouseDown (line 855) | private void NotifyIcon_MouseDown(object sender, MouseEventArgs e)
    method SetTrayIconText (line 863) | internal void SetTrayIconText(string value)
    method UpdateNotifyIcon (line 873) | internal void UpdateNotifyIcon()
    method ShowToolTip (line 903) | internal void ShowToolTip(string txt, int timeOutInMilliseconds, ToolT...
    method MenuSendScreenCaptureClick (line 923) | private void MenuSendScreenCaptureClick(object sender, EventArgs e)
    method MenuGetScreenCaptureClick (line 941) | private void MenuGetScreenCaptureClick(object sender, EventArgs e)
    method FrmScreen_Shown (line 950) | private void FrmScreen_Shown(object sender, EventArgs e)
    method MenuAbout_Click (line 968) | private void MenuAbout_Click(object sender, EventArgs e)
    method ShowMouseWithoutBordersUiOnWinLogonDesktop (line 981) | private void ShowMouseWithoutBordersUiOnWinLogonDesktop(bool initMenuS...
    method HideMenuWhenRunOnLogonDesktop (line 1005) | internal void HideMenuWhenRunOnLogonDesktop()
    method MainMenu_MouseLeave (line 1021) | private void MainMenu_MouseLeave(object sender, EventArgs e)
    method ShowMessageOnLogonDesktop (line 1037) | internal void ShowMessageOnLogonDesktop(bool turnOff)
    method PaintMyNameOnDesktop (line 1102) | internal void PaintMyNameOnDesktop()
    method MenuHelp_Click (line 1196) | private void MenuHelp_Click(object sender, EventArgs e)
    method MenuReinstallKeyboardAndMouseHook_Click (line 1200) | internal void MenuReinstallKeyboardAndMouseHook_Click(object sender, E...
    method MenuGenDumpFile_Click (line 1216) | private void MenuGenDumpFile_Click(object sender, EventArgs e)
    method MainMenu_Opening (line 1221) | private void MainMenu_Opening(object sender, CancelEventArgs e)

FILE: PowerToys/src/modules/MouseWithoutBorders/App/Helper/FormHelper.cs
  class FormHelper (line 19) | public partial class FormHelper : System.Windows.Forms.Form
    type FocusArea (line 31) | private struct FocusArea
      method FocusArea (line 36) | internal FocusArea(RectangleF rec, Color color)
    method FormHelper (line 46) | public FormHelper()
    method SetDPIAwareness (line 62) | private void SetDPIAwareness()
    method QuitDueToCommunicationError (line 95) | private void QuitDueToCommunicationError()
    method FormHelper_DragEnter (line 118) | private void FormHelper_DragEnter(object sender, DragEventArgs e)
    method TimerHelper_Tick (line 145) | private void TimerHelper_Tick(object sender, EventArgs e)
    method FormHelper_Shown (line 157) | private void FormHelper_Shown(object sender, EventArgs e)
    method SendLog (line 163) | internal void SendLog(string log)
    method GetTick (line 175) | private long GetTick() // ms
    method GetClipboardText (line 180) | private string GetClipboardText()
    method WndProc (line 236) | protected override void WndProc(ref Message m)
    method SetForeGround (line 462) | private bool SetForeGround()
    method LogForeGroundWindow (line 481) | private bool LogForeGroundWindow(string logTag)
    method AssignEventHandlers (line 497) | private void AssignEventHandlers(PictureBox p)
    method MouseMoveHandler (line 504) | private void MouseMoveHandler()
    method MouseDownMoveHandler (line 551) | private void MouseDownMoveHandler()
    method MouseUpHandler (line 611) | private void MouseUpHandler(bool canceled = false, bool rightMouseButt...
    method FormHelper_FormClosed (line 693) | private void FormHelper_FormClosed(object sender, FormClosedEventArgs e)
    method FormHelper_LocationChanged (line 698) | private void FormHelper_LocationChanged(object sender, EventArgs e)
    method FormHelper_KeyDown (line 710) | private void FormHelper_KeyDown(object sender, KeyEventArgs e)
    method FormHelper_KeyUp (line 723) | private void FormHelper_KeyUp(object sender, KeyEventArgs e)
    method FormHelper_FormClosing (line 741) | private void FormHelper_FormClosing(object sender, FormClosingEventArg...
    method FormHelper_MouseDown (line 749) | private void FormHelper_MouseDown(object sender, MouseEventArgs e)
    method FormHelper_MouseMove (line 756) | private void FormHelper_MouseMove(object sender, MouseEventArgs e)
    method FormHelper_MouseUp (line 768) | private void FormHelper_MouseUp(object sender, MouseEventArgs e)
    method PointInStandardDPI (line 773) | private Point PointInStandardDPI(Point p)
    method RectangleFInStandardDPI (line 781) | private RectangleF RectangleFInStandardDPI(RectangleF r)

FILE: PowerToys/src/modules/MouseWithoutBorders/ModuleInterface/dllmain.cpp
  function BOOL (line 19) | BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID ...
  function GetUserSid (line 37) | bool GetUserSid(const wchar_t* username, PSID& sid)
  function GetCurrentUserSid (line 65) | std::wstring GetCurrentUserSid()
  function escapeDoubleQuotes (line 96) | std::wstring escapeDoubleQuotes(const std::wstring& input)
  class MouseWithoutBorders (line 118) | class MouseWithoutBorders : public PowertoyModuleIface
    method is_enabled_by_default (line 128) | bool is_enabled_by_default() const override
    method is_process_running (line 133) | bool is_process_running()
    method launch_process (line 138) | void launch_process()
    method unregister_service (line 161) | void unregister_service()
    method register_service (line 205) | void
    method update_state_from_settings (line 364) | void update_state_from_settings(const PowerToysSettings::PowerToyValue...
    method MouseWithoutBorders (line 404) | MouseWithoutBorders()
    method gpo_policy_enabled_configuration (line 425) | virtual powertoys_gpo::gpo_rule_configured_t gpo_policy_enabled_config...
    method shutdown_process (line 430) | void shutdown_process(HANDLE handle)
    method shutdown_processes (line 455) | void shutdown_processes()
    method destroy (line 473) | virtual void destroy() override
    method wchar_t (line 480) | virtual const wchar_t* get_name() override
    method get_config (line 485) | virtual bool get_config(wchar_t* buffer, int* buffer_size) override
    method wchar_t (line 495) | virtual const wchar_t* get_key() override
    method set_config (line 500) | virtual void set_config(const wchar_t* config) override
    method enable (line 519) | virtual void enable()
    method disable (line 528) | virtual void disable()
    method is_enabled (line 546) | virtual bool is_enabled() override
    method launch_add_firewall_process (line 551) | void launch_add_firewall_process()
    method call_custom_action (line 586) | virtual void call_custom_action(const wchar_t* action) override
  function PowertoyModuleIface (line 610) | __declspec(dllexport) PowertoyModuleIface* __cdecl powertoy_create()

FILE: PowerToys/src/modules/Workspaces/WorkspacesEditor/Models/Project.cs
  class Project (line 21) | public class Project : INotifyPropertyChanged
    method Project (line 201) | public Project(Project selectedProject)
    method Project (line 229) | public Project(ProjectData.ProjectWrapper project)
    method OnPropertyChanged (line 314) | public void OnPropertyChanged(PropertyChangedEventArgs e)
    method Initialize (line 319) | public async void Initialize(Theme currentTheme)
    method GetCommonBounds (line 327) | private Rectangle GetCommonBounds()
    method UpdateAfterLaunchAndEdit (line 345) | public void UpdateAfterLaunchAndEdit(Project projectBeforeLaunch)
    method CloseExpanders (line 363) | internal void CloseExpanders()
    method GetMonitorForApp (line 371) | internal MonitorSetup GetMonitorForApp(Application app)

FILE: PowerToys/src/modules/ZoomIt/ZoomIt/Zoomit.cpp
  type winrt (line 32) | namespace winrt
  type util (line 45) | namespace util
  function SaveToClipboard (line 196) | bool SaveToClipboard( const WCHAR* filePath, HWND hwnd )
  function OutputDebug (line 241) | void OutputDebug(const TCHAR* format, ...)
  function InitializeFonts (line 271) | void InitializeFonts( HWND hwnd, HFONT *bold )
  function EnsureForeground (line 310) | void EnsureForeground()
  function RestoreForeground (line 321) | void RestoreForeground()
  function VOID (line 340) | VOID ErrorDialog( HWND hParent, PCTSTR message, DWORD _Error )
  function VOID (line 364) | VOID ErrorDialogString( HWND hParent, PCTSTR Message, const wchar_t *_Er...
  function SetAutostartFilePath (line 394) | void SetAutostartFilePath()
  function ConfigureAutostart (line 420) | bool ConfigureAutostart( HWND hParent, bool Enable )
  function IsAutostartConfigured (line 471) | bool IsAutostartConfigured()
  function BOOL (line 503) | BOOL
  function BOOLEAN (line 529) | BOOLEAN ExtractImageResource( PTCHAR ResourceName, PTCHAR TargetFile )
  function DWORD (line 565) | DWORD
  function BOOLEAN (line 626) | BOOLEAN IsPresentationMode()
  function LONG (line 642) | LONG EnableDisableSecondaryDisplay( HWND hWnd, BOOLEAN Enable,
  function GetLineBounds (line 726) | Gdiplus::Rect GetLineBounds( POINT p1, POINT p2, int penWidth )
  function InvalidateGdiplusRect (line 741) | void InvalidateGdiplusRect(HWND hWnd, Gdiplus::Rect BoundsRect)
  function BYTE (line 784) | BYTE* CreateBitmapMemoryDIB(HDC hdcScreenCompat, HDC hBitmapDc, Gdiplus:...
  function BlurScreen (line 851) | void BlurScreen(HDC hdcScreenCompat, Gdiplus::Rect* lineBounds,
  function BitmapBlur (line 900) | void BitmapBlur(Gdiplus::Bitmap* hBitmap)
  function DrawBlurredShape (line 931) | void DrawBlurredShape( DWORD Shape, Gdiplus::Pen *pen, HDC hdcScreenComp...
  function ColorFromColorRef (line 1016) | Gdiplus::Color ColorFromColorRef(DWORD colorRef) {
  function AdjustHighlighterColor (line 1032) | void AdjustHighlighterColor(BYTE* red, BYTE* green, BYTE* blue) {
  function COLORREF (line 1048) | COLORREF BlendColors(COLORREF color1, const Gdiplus::Color& color2) {
  function DrawHighlightedShape (line 1096) | void DrawHighlightedShape( DWORD Shape, HDC hdcScreenCompat, Gdiplus::Br...
  function HBITMAP (line 1200) | HBITMAP CreateFadedDesktopBackground( HDC hdc, LPRECT rcScreen, LPRECT r...
  function AdjustToMoveBoundary (line 1245) | void AdjustToMoveBoundary( float zoomLevel, int *coordinate, int cursor,...
  function GetZoomedTopLeftCoordinates (line 1261) | void GetZoomedTopLeftCoordinates( float zoomLevel, POINT *cursorPos, int...
  function ScaleImage (line 1280) | void ScaleImage( HDC hdcDst, float xDst, float yDst, float wDst, float h...
  function GetEncoderClsid (line 1300) | int GetEncoderClsid(const WCHAR* format, CLSID* pClsid)
  function ConvertToUnicode (line 1337) | void
  function HBITMAP (line 1359) | HBITMAP LoadImageFile( PTCHAR Filename )
  function DWORD (line 1382) | DWORD SavePng( PTCHAR Filename, HBITMAP hBitmap )
  function EnableDisableTrayIcon (line 1400) | void EnableDisableTrayIcon( HWND hWnd, BOOLEAN Enable )
  function EnableDisableOpacity (line 1420) | void EnableDisableOpacity( HWND hWnd, BOOLEAN Enable )
  function EnableDisableScreenSaver (line 1447) | void EnableDisableScreenSaver( BOOLEAN Enable )
  function EnableDisableStickyKeys (line 1459) | void EnableDisableStickyKeys( BOOLEAN Enable )
  function DWORD (line 1498) | constexpr DWORD GetKeyMod( DWORD Key )
  function INT_PTR (line 1514) | INT_PTR CALLBACK AdvancedBreakProc( HWND hDlg, UINT message, WPARAM wPar...
  function INT_PTR (line 1747) | INT_PTR CALLBACK OptionsTabProc( HWND hDlg, UINT message,
  function VOID (line 1855) | VOID OptionsAddTabs( HWND hOptionsDlg, HWND hTabCtrl )
  function UnregisterAllHotkeys (line 1903) | void UnregisterAllHotkeys( HWND hWnd )
  function RegisterAllHotkeys (line 1924) | void RegisterAllHotkeys(HWND hWnd)
  function UpdateDrawTabHeaderFont (line 1955) | void UpdateDrawTabHeaderFont()
  function INT_PTR (line 1999) | INT_PTR CALLBACK OptionsProc( HWND hDlg, UINT message,
  function DeleteDrawUndoList (line 2368) | void DeleteDrawUndoList( P_DRAW_UNDO *DrawUndoList )
  function BOOLEAN (line 2389) | BOOLEAN PopDrawUndo( HDC hDc, P_DRAW_UNDO *DrawUndoList,
  function DeleteOldestUndo (line 2418) | void DeleteOldestUndo( P_DRAW_UNDO *DrawUndoList )
  function P_DRAW_UNDO (line 2447) | P_DRAW_UNDO GetOldestUndo(P_DRAW_UNDO DrawUndoList)
  function PushDrawUndo (line 2468) | void PushDrawUndo( HDC hDc, P_DRAW_UNDO *DrawUndoList, int width, int he...
  function DeleteTypedText (line 2518) | void DeleteTypedText( P_TYPED_KEY *TypedKeyList )
  function BlankScreenArea (line 2535) | void BlankScreenArea( HDC hDc, PRECT Rc, int BlankMode )
  function ClearTypingCursor (line 2554) | void ClearTypingCursor( HDC hdcScreenCompat, HDC hdcScreenCursorCompat, ...
  function DrawTypingCursor (line 2573) | void DrawTypingCursor( HWND hWnd, POINT *textPt, HDC hdcScreenCompat,
  function RECT (line 2612) | RECT BoundMouse( float zoomLevel, MONITORINFO *monInfo, int width, int h...
  function DrawArrow (line 2640) | void DrawArrow( HDC hdc, int x1, int y1, int x2, int y2, double length, ...
  function VOID (line 2731) | VOID DrawShape( DWORD Shape, HDC hDc, RECT *Rect, bool UseGdiPlus = false )
  function VOID (line 2832) | VOID SendPenMessage(HWND hWnd, UINT Message, LPARAM lParam)
  function LPARAM (line 2860) | LPARAM ScalePenPosition( float zoomLevel, MONITORINFO *monInfo, RECT bou...
  function BOOLEAN (line 2909) | BOOLEAN DrawHighlightedCursor( float ZoomLevel, int Width, int Height )
  function InvalidateCursorMoveArea (line 2928) | void InvalidateCursorMoveArea( HWND hWnd, float zoomLevel, int width, in...
  function SaveCursorArea (line 2955) | void SaveCursorArea( HDC hDcTarget, HDC hDcSource, POINT pt )
  function RestoreCursorArea (line 2969) | void RestoreCursorArea( HDC hDcTarget, HDC hDcSource, POINT pt )
  function DrawCursor (line 2984) | void DrawCursor( HDC hDcTarget, POINT pt, float ZoomLevel, int Width, in...
  function ResizePen (line 3058) | void ResizePen( HWND hWnd, HDC hdcScreenCompat, HDC hdcScreenCursorCompa...
  function IsPenInverted (line 3105) | bool IsPenInverted( WPARAM wParam )
  function CaptureScreenshotAsync (line 3122) | std::future<winrt::com_ptr<ID3D11Texture2D>> CaptureScreenshotAsync(winr...
  function CaptureScreenshot (line 3170) | winrt::com_ptr<ID3D11Texture2D>CaptureScreenshot(winrt::DirectXPixelForm...
  function CopyD3DTexture (line 3199) | inline auto CopyD3DTexture(winrt::com_ptr<ID3D11Device> const& device,
  function PrepareStagingTexture (line 3227) | inline auto PrepareStagingTexture(winrt::com_ptr<ID3D11Device> const& de...
  function GetBytesPerPixel (line 3247) | inline size_t
  function CopyBytesFromTexture (line 3345) | inline auto CopyBytesFromTexture(winrt::com_ptr<ID3D11Texture2D> const& ...
  function StopRecording (line 3384) | void StopRecording()
  function GetUniqueRecordingFilename (line 3423) | auto GetUniqueRecordingFilename()
  function StartRecordingAsync (line 3447) | winrt::fire_and_forget StartRecordingAsync( HWND hWnd, LPRECT rcCrop, HW...
  function UpdateMonitorInfo (line 3583) | void UpdateMonitorInfo( POINT point, MONITORINFO* monInfo )
  function HRESULT (line 3609) | HRESULT OpenPowerToysSettingsApp()
  function ShowMainWindow (line 3654) | void ShowMainWindow(HWND hWnd, const MONITORINFO& monInfo, int width, in...
  function HRESULT (line 7313) | HRESULT __stdcall WrapCreateDirect3D11DeviceFromDXGIDevice(
  function HRESULT (line 7323) | HRESULT __stdcall WrapCreateDirect3D11SurfaceFromDXGISurface(
  function HRESULT (line 7333) | HRESULT __stdcall WrapD3D11CreateDevice(
  function HWND (line 7358) | HWND InitInstance( HINSTANCE hInstance, int nCmdShow )
  function wWinMain (line 7426) | int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrev...

FILE: PowerToys/src/modules/awake/Awake/Core/Constants.cs
  class Constants (line 7) | internal static class Constants

FILE: PowerToys/src/modules/colorPicker/ColorPickerUI/ViewModels/ColorEditorViewModel.cs
  class ColorEditorViewModel (line 26) | [Export(typeof(IColorEditorViewModel))]
    method ColorEditorViewModel (line 35) | [ImportingConstructor]
    method Initialize (line 115) | public void Initialize()
    method ColorsHistory_CollectionChanged (line 137) | private void ColorsHistory_CollectionChanged(object sender, System.Col...
    method DeleteSelectedColors (line 151) | private void DeleteSelectedColors(object selectedColors)
    method ExportSelectedColorsByColor (line 165) | private void ExportSelectedColorsByColor(object selectedColors)
    method ExportSelectedColorsByFormat (line 170) | private void ExportSelectedColorsByFormat(object selectedColors)
    method ExportColors (line 175) | private void ExportColors(object colorsToExport, GroupExportedColorsBy...
    method ComputeWhichIndexToSelectAfterDeletion (line 202) | private static int ComputeWhichIndexToSelectAfterDeletion(int colorsCo...
    method SetupAllColorRepresentations (line 244) | private void SetupAllColorRepresentations()
    method VisibleColorFormats_CollectionChanged (line 340) | private void VisibleColorFormats_CollectionChanged(object sender, Syst...
    method SetupAvailableColorRepresentations (line 345) | private void SetupAvailableColorRepresentations()

FILE: PowerToys/src/modules/imageresizer/ui/Views/EnumValueConverter.cs
  class EnumValueConverter (line 17) | [ValueConversion(typeof(Enum), typeof(string))]
    method Convert (line 20) | public object Convert(object value, Type targetType, object parameter,...
    method ConvertBack (line 71) | public object ConvertBack(object value, Type targetType, object parame...

FILE: PowerToys/src/modules/keyboardmanager/KeyboardManagerEngineLibrary/KeyboardEventHandlers.cpp
  function GeneratedByKBM (line 31) | bool GeneratedByKBM(const LowlevelKeyboardEvent* data)
  function UpdateNumpadWithShift (line 36) | void UpdateNumpadWithShift(LowlevelKeyboardEvent* data, State& state)
  type KeyboardEventHandlers (line 89) | namespace KeyboardEventHandlers
    function HandleSingleKeyRemapEvent (line 92) | intptr_t HandleSingleKeyRemapEvent(KeyboardManagerInput::InputInterfac...
    function HandleShortcutRemapEvent (line 270) | intptr_t HandleShortcutRemapEvent(KeyboardManagerInput::InputInterface...
    function URL_encode (line 1009) | std::wstring URL_encode(const std::wstring& filepath)
    function ConvertPathToURI (line 1034) | std::wstring ConvertPathToURI(const std::wstring& filePath)
    function ResetAllOtherStartedChords (line 1043) | void ResetAllOtherStartedChords(State& state, const std::optional<std:...
    function ResetAllStartedChords (line 1054) | void ResetAllStartedChords(State& state, const std::optional<std::wstr...
    function ResetChordsResults (line 1059) | ResetChordsResults ResetChordsIfNeeded(LowlevelKeyboardEvent* data, St...
    type handle_data (line 1109) | struct handle_data
    function HWND (line 1116) | HWND FindMainWindow(unsigned long process_id, const bool allowNonVisible)
    function BOOL (line 1135) | BOOL CALLBACK EnumWindowsCallbackAllowNonVisible(HWND handle, LPARAM l...
    function BOOL (line 1150) | BOOL CALLBACK EnumWindowsCallback(HWND handle, LPARAM lParam)
    function GetProcessesIdByName (line 1167) | std::vector<DWORD> GetProcessesIdByName(const std::wstring& processName)
    function DWORD (line 1194) | DWORD GetProcessIdByName(const std::wstring& processName)
    function GetFileNameFromPath (line 1223) | std::wstring GetFileNameFromPath(const std::wstring& fullPath)
    function toast (line 1233) | void toast(param::hstring const& message1, param::hstring const& messa...
    function CreateOrShowProcessForShortcut (line 1273) | void CreateOrShowProcessForShortcut(Shortcut shortcut) noexcept
    function CloseProcessByName (line 1399) | void CloseProcessByName(const std::wstring& fileNamePart)
    function TerminateProcessesByName (line 1452) | void TerminateProcessesByName(const std::wstring& fileNamePart)
    function HideProgram (line 1480) | bool HideProgram(DWORD pid, std::wstring programName, int retryCount)
    function ShowProgram (line 1521) | bool ShowProgram(DWORD pid, std::wstring programName, bool isNewProces...
    function HandleOSLevelShortcutRemapEvent (line 1674) | intptr_t HandleOSLevelShortcutRemapEvent(KeyboardManagerInput::InputIn...
    function HandleAppSpecificShortcutRemapEvent (line 1687) | intptr_t HandleAppSpecificShortcutRemapEvent(KeyboardManagerInput::Inp...
    function ResetIfModifierKeyForLowerLevelKeyHandlers (line 1745) | void ResetIfModifierKeyForLowerLevelKeyHandlers(KeyboardManagerInput::...
    function HandleSingleKeyToTextRemapEvent (line 1763) | intptr_t HandleSingleKeyToTextRemapEvent(KeyboardManagerInput::InputIn...

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/InputInterpreter.cs
  class InputInterpreter (line 16) | public static class InputInterpreter
    method RegexSplitter (line 20) | public static string[] RegexSplitter(string[] split)
    method InputSpaceInserter (line 28) | public static void InputSpaceInserter(ref string[] split)
    method ShorthandFeetInchHandler (line 49) | public static void ShorthandFeetInchHandler(ref string[] split, Cultur...
    method DegreePrefixer (line 120) | public static void DegreePrefixer(ref string[] split)
    method KPHHandler (line 294) | public static void KPHHandler(ref string[] split)
    method MetreToMeter (line 310) | public static void MetreToMeter(ref string[] split)
    method GallonHandler (line 319) | public static void GallonHandler(ref string[] split, CultureInfo culture)
    method OunceHandler (line 352) | public static void OunceHandler(ref string[] split, CultureInfo culture)
    method Parse (line 386) | public static ConvertModel Parse(Query query)

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/Main.cs
  class Main (line 21) | public class Main : IPlugin, IPluginI18n, IContextMenu, IDisposable
    method Init (line 35) | public void Init(PluginInitContext context)
    method Query (line 44) | public List<Result> Query(Query query)
    method GetResult (line 60) | [System.Diagnostics.CodeAnalysis.SuppressMessage("StyleCop.CSharp.Layo...
    method CreateContextMenuEntry (line 108) | private ContextMenuResult CreateContextMenuEntry(UnitConversionResult ...
    method LoadContextMenus (line 141) | public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
    method GetTranslatedPluginTitle (line 155) | public string GetTranslatedPluginTitle()
    method GetTranslatedPluginDescription (line 160) | public string GetTranslatedPluginDescription()
    method OnThemeChanged (line 165) | private void OnThemeChanged(Theme currentTheme, Theme newTheme)
    method UpdateIconPath (line 170) | private static void UpdateIconPath(Theme theme)
    method Dispose (line 182) | public void Dispose()
    method Dispose (line 188) | protected virtual void Dispose(bool disposing)

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Main.cs
  class Main (line 24) | public class Main : IPlugin, IPluginI18n, IContextMenu
    method Main (line 34) | public Main()
    method Query (line 43) | public List<Result> Query(Query query)
    method Init (line 173) | public void Init(PluginInitContext context)
    method LoadContextMenus (line 178) | public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
    method CopyToClipboard (line 222) | private bool CopyToClipboard(string path)
    method OpenInConsole (line 236) | private bool OpenInConsole(string path)
    method OpenInExplorer (line 250) | private bool OpenInExplorer(string path)
    method HandleError (line 261) | private void HandleError(string msg, Exception exception = null, bool ...
    method GetTranslatedPluginTitle (line 280) | public string GetTranslatedPluginTitle()
    method GetTranslatedPluginDescription (line 285) | public string GetTranslatedPluginDescription()

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Base64/Base64DecodeRequest.cs
  class Base64DecodeRequest (line 13) | public class Base64DecodeRequest : IComputeRequest
    method Base64DecodeRequest (line 25) | public Base64DecodeRequest(string dataToDecode)
    method Compute (line 30) | public bool Compute()
    method ResultToString (line 47) | public string ResultToString()

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Base64/Base64Request.cs
  class Base64Request (line 12) | public class Base64Request : IComputeRequest
    method Base64Request (line 24) | public Base64Request(byte[] dataToEncode)
    method Compute (line 29) | public bool Compute()
    method ResultToString (line 46) | public string ResultToString()

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/GUID/GUIDRequest.cs
  class GUIDRequest (line 11) | public class GUIDRequest : IComputeRequest
    method GUIDRequest (line 39) | public GUIDRequest(int version, string guidNamespace = null, string na...
    method Compute (line 85) | public bool Compute()
    method ResultToString (line 116) | public string ResultToString()

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Uri/DataEscapeRequest.cs
  class DataEscapeRequest (line 12) | public class DataEscapeRequest : IComputeRequest
    method DataEscapeRequest (line 24) | public DataEscapeRequest(string dataToEscape)
    method Compute (line 29) | public bool Compute()
    method ResultToString (line 46) | public string ResultToString()

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Uri/DataUnescapeRequest.cs
  class DataUnescapeRequest (line 13) | public class DataUnescapeRequest : IComputeRequest
    method DataUnescapeRequest (line 25) | public DataUnescapeRequest(string dataToUnescape)
    method Compute (line 30) | public bool Compute()
    method ResultToString (line 47) | public string ResultToString()

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Uri/HexEscapeRequest.cs
  class HexEscapeRequest (line 13) | public class HexEscapeRequest : IComputeRequest
    method HexEscapeRequest (line 25) | public HexEscapeRequest(string dataToEscape)
    method Compute (line 36) | public bool Compute()
    method ResultToString (line 54) | public string ResultToString()

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Uri/HexUnescapeRequest.cs
  class HexUnescapeRequest (line 13) | public class HexUnescapeRequest : IComputeRequest
    method HexUnescapeRequest (line 25) | public HexUnescapeRequest(string dataToUnescape)
    method Compute (line 30) | public bool Compute()
    method ResultToString (line 51) | public string ResultToString()

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Uri/UrlDecodeRequest.cs
  class UrlDecodeRequest (line 15) | public class UrlDecodeRequest : IComputeRequest
    method UrlDecodeRequest (line 27) | public UrlDecodeRequest(string dataToDecode)
    method Compute (line 32) | public bool Compute()
    method ResultToString (line 49) | public string ResultToString()

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Uri/UrlEncodeRequest.cs
  class UrlEncodeRequest (line 14) | public class UrlEncodeRequest : IComputeRequest
    method UrlEncodeRequest (line 26) | public UrlEncodeRequest(string dataToEncode)
    method Compute (line 31) | public bool Compute()
    method ResultToString (line 48) | public string ResultToString()

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/InputParser.cs
  class InputParser (line 18) | public class InputParser
    method ParseInput (line 20) | public IComputeRequest ParseInput(Query query)

FILE: PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.WebSearch/Main.cs
  class Main (line 22) | public class Main : IPlugin, IPluginI18n, IContextMenu, ISettingProvider...
    method LoadContextMenus (line 58) | public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
    method Query (line 63) | public List<Result> Query(Query query)
    method Init (line 171) | public void Init(PluginInitContext context)
    method GetTranslatedPluginTitle (line 189) | public string GetTranslatedPluginTitle()
    method GetTranslatedPluginDescription (line 194) | public string GetTranslatedPluginDescription()
    method OnThemeChanged (line 199) | private void OnThemeChanged(Theme oldtheme, Theme newTheme)
    method UpdateIconPath (line 204) | private void UpdateIconPath(Theme theme)
    method CreateSettingPanel (line 216) | public Control CreateSettingPanel()
    method UpdateSettings (line 221) | public void UpdateSettings(PowerLauncherPluginSettings settings)
    method ReloadData (line 226) | public void ReloadData()
    method Dispose (line 237) | public void Dispose()
    method Dispose (line 243) | protected virtual void Dispose(bool disposing)

FILE: PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Indexer/Main.cs
  class Main (line 25) | internal class Main : ISettingProvider, IPlugin, ISavable, IPluginI18n, ...
    method Save (line 84) | public void Save()
    method Query (line 90) | public List<Result> Query(Query query, bool isFullQuery)
    method Query (line 191) | public List<Result> Query(Query query)
    method Init (line 197) | public void Init(PluginInitContext context)
    method UpdateIconPath (line 209) | private void UpdateIconPath(Theme theme)
    method OnThemeChanged (line 221) | private void OnThemeChanged(Theme currentTheme, Theme newTheme)
    method GetTranslatedPluginTitle (line 227) | public string GetTranslatedPluginTitle()
    method GetTranslatedPluginDescription (line 233) | public string GetTranslatedPluginDescription()
    method LoadContextMenus (line 238) | public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
    method UpdateSettings (line 243) | public void UpdateSettings(PowerLauncherPluginSettings settings)
    method CreateSettingPanel (line 261) | public Control CreateSettingPanel()
    method Dispose (line 266) | protected virtual void Dispose(bool disposing)
    method Dispose (line 278) | public void Dispose()

FILE: PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Main.cs
  class Main (line 23) | public class Main : IPlugin, IPluginI18n, IContextMenu, ISavable, IDispo...
    method Main (line 51) | public Main()
    method Save (line 63) | public void Save()
    method Query (line 68) | public List<Result> Query(Query query)
    method Query (line 86) | private IEnumerable<Result> Query(string program, string programArgume...
    method Init (line 106) | public void Init(PluginInitContext context)
    method OnThemeChanged (line 128) | public void OnThemeChanged(Theme currentTheme, Theme newTheme)
    method UpdateUWPIconPath (line 133) | public void UpdateUWPIconPath(Theme theme)
    method IndexPrograms (line 144) | public void IndexPrograms()
    method GetTranslatedPluginTitle (line 154) | public string GetTranslatedPluginTitle()
    method GetTranslatedPluginDescription (line 159) | public string GetTranslatedPluginDescription()
    method LoadContextMenus (line 164) | public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
    method StartProcess (line 177) | public static void StartProcess(Func<ProcessStartInfo, Process> runPro...
    method Dispose (line 196) | public void Dispose()
    method Dispose (line 202) | protected virtual void Dispose(bool disposing)

FILE: PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/UWPApplication.cs
  class UWPApplication (line 35) | [Serializable]
    method Score (line 80) | private int Score(string query)
    method SetSubtitle (line 89) | private static string SetSubtitle()
    method Result (line 94) | public Result Result(string query, string queryArguments, IPublicAPI api)
    method ContextMenus (line 130) | public List<ContextMenuResult> ContextMenus(string queryArguments, IPu...
    method Launch (line 206) | private async void Launch(IPublicAPI api, string queryArguments)
    method UWPApplication (line 226) | public UWPApplication(IAppxManifestApplication manifestApp, UWP package)
    method IfApplicationCanRunElevated (line 258) | private bool IfApplicationCanRunElevated()
    method ResourceFromPri (line 295) | internal string ResourceFromPri(string packageFullName, string resourc...
    method LogoUriFromManifest (line 394) | internal string LogoUriFromManifest(IAppxManifestApplication app)
    method UpdateLogoPath (line 408) | public void UpdateLogoPath(Theme theme)
    method SetScaleIcons (line 421) | private bool SetScaleIcons(string path, string colorscheme, bool highC...
    method SetTargetSizeIcon (line 471) | private bool SetTargetSizeIcon(string path, string colorscheme, bool h...
    method SetColoredIcon (line 525) | private bool SetColoredIcon(string path, string colorscheme)
    method SetHighContrastIcon (line 554) | private bool SetHighContrastIcon(string path, string colorscheme)
    method LogoPathFromUri (line 583) | internal void LogoPathFromUri(string uri, Theme theme)
    method Logo (line 629) | public ImageSource Logo()
    method PlatedImage (line 645) | private ImageSource PlatedImage(BitmapImage image)
    method ImageFromPath (line 713) | private BitmapImage ImageFromPath(string path)
    method ToString (line 737) | public override string ToString()
  type LogoType (line 743) | public enum LogoType

FILE: PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Shell/Main.cs
  class Main (line 29) | public class Main : IPlugin, IPluginI18n, ISettingProvider, IContextMenu...
    method Main (line 81) | public Main()
    method Save (line 87) | public void Save()
    method Query (line 92) | public List<Result> Query(Query query)
    method GetHistoryCmds (line 123) | private List<Result> GetHistoryCmds(string cmd, Result result)
    method GetCurrentCmd (line 154) | private Result GetCurrentCmd(string cmd)
    method ResultsFromlHistory (line 172) | private List<Result> ResultsFromlHistory()
    method PrepareProcessStartInfo (line 191) | private ProcessStartInfo PrepareProcessStartInfo(string command, RunAs...
    type RunAsType (line 350) | private enum RunAsType
    method Execute (line 357) | private void Execute(Func<ProcessStartInfo, Process> startProcess, Pro...
    method ExistInPath (line 377) | private static bool ExistInPath(string filename)
    method Init (line 407) | public void Init(PluginInitContext context)
    method UpdateIconPath (line 415) | private void UpdateIconPath(Theme theme)
    method OnThemeChanged (line 427) | private void OnThemeChanged(Theme currentTheme, Theme newTheme)
    method CreateSettingPanel (line 432) | public Control CreateSettingPanel()
    method GetTranslatedPluginTitle (line 437) | public string GetTranslatedPluginTitle()
    method GetTranslatedPluginDescription (line 442) | public string GetTranslatedPluginDescription()
    method LoadContextMenus (line 447) | public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
    method UpdateSettings (line 484) | public void UpdateSettings(PowerLauncherPluginSettings settings)

FILE: PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Uri/Main.cs
  class Main (line 18) | public class Main : IPlugin, IPluginI18n, IContextMenu, ISavable, IReloa...
    method Main (line 26) | public Main()
    method LoadContextMenus (line 44) | public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
    method Query (line 49) | public List<Result> Query(Query query)
    method Init (line 130) | public void Init(PluginInitContext context)
    method GetTranslatedPluginTitle (line 138) | public string GetTranslatedPluginTitle()
    method GetTranslatedPluginDescription (line 143) | public string GetTranslatedPluginDescription()
    method Save (line 148) | public void Save()
    method OnThemeChanged (line 153) | private void OnThemeChanged(Theme oldtheme, Theme newTheme)
    method UpdateIconPath (line 158) | private void UpdateIconPath(Theme theme)
    method ReloadData (line 170) | public void ReloadData()
    method Dispose (line 180) | public void Dispose()
    method Dispose (line 186) | protected virtual void Dispose(bool disposing)

FILE: PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System/Components/ResultHelper.cs
  class ResultHelper (line 18) | internal static class ResultHelper
    method ExecuteCommand (line 22) | internal static bool ExecuteCommand(bool confirm, string confirmationM...
    method CopyToClipBoard (line 42) | internal static bool CopyToClipBoard(in string text)
    method EmptyRecycleBinAsync (line 57) | internal static async void EmptyRecycleBinAsync(bool settingEmptyRBSuc...
    method GetContextMenuForResult (line 68) | internal static List<ContextMenuResult> GetContextMenuForResult(Result...
    method EmptyRecycleBinTask (line 113) | private static void EmptyRecycleBinTask(bool settingEmptyRBSuccesMsg)

FILE: PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System/Main.cs
  class Main (line 21) | public class Main : IPlugin, IPluginI18n, ISettingProvider, IContextMenu...
    method Init (line 82) | public void Init(PluginInitContext context)
    method Query (line 97) | public List<Result> Query(Query query)
    method Query (line 147) | public List<Result> Query(Query query, bool delayedExecution)
    method LoadContextMenus (line 190) | public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
    method UpdateIconTheme (line 195) | private void UpdateIconTheme(Theme theme)
    method OnThemeChanged (line 207) | private void OnThemeChanged(Theme currentTheme, Theme newTheme)
    method GetTranslatedPluginDescription (line 212) | public string GetTranslatedPluginDescription()
    method GetTranslatedPluginTitle (line 217) | public string GetTranslatedPluginTitle()
    method CreateSettingPanel (line 222) | public Control CreateSettingPanel()
    method UpdateSettings (line 227) | public void UpdateSettings(PowerLauncherPluginSettings settings)

FILE: PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsTerminal/Main.cs
  class Main (line 22) | public class Main : IPlugin, IContextMenu, IPluginI18n, ISettingProvider
    method Init (line 65) | public void Init(PluginInitContext context)
    method Query (line 70) | public List<Result> Query(Query query)
    method LoadContextMenus (line 107) | public List<ContextMenuResult> LoadContextMenus(Result selectedResult)
    method GetTranslatedPluginTitle (line 136) | public string GetTranslatedPluginTitle()
    method GetTranslatedPluginDescription (line 141) | public string GetTranslatedPluginDescription()
    method Launch (line 146) | private void Launch(string id, string profile)
    method LaunchElevated (line 164) | private void LaunchElevated(string id, string profile)
    method CreateSettingPanel (line 180) | public Control CreateSettingPanel()
    method UpdateSettings (line 185) | public void UpdateSettings(PowerLauncherPluginSettings settings)
    method GetLogo (line 203) | private BitmapImage GetLogo(TerminalPackage terminal)

FILE: PowerToys/src/modules/powerrename/PowerRenameUILib/PowerRenameXAML/MainWindow.xaml.cpp
  function handleTheme (line 45) | void handleTheme()
  function FindScrollViewer (line 59) | winrt::Microsoft::UI::Xaml::Controls::ScrollViewer FindScrollViewer(winr...
  function FindFirstExplorerItemRecursive (line 82) | PowerRenameUI::ExplorerItem FindFirstExplorerItemRecursive(winrt::Micros...
  type winrt::PowerRenameUI::implementation (line 104) | namespace winrt::PowerRenameUI::implementation
    function hstring (line 344) | hstring MainWindow::OriginalCount()
    function hstring (line 356) | hstring MainWindow::RenamedCount()
    function HRESULT (line 440) | HRESULT MainWindow::CreateShellItemArrayFromPaths(
    function HRESULT (line 487) | HRESULT MainWindow::InitAutoComplete()
    function HRESULT (line 525) | HRESULT MainWindow::EnumerateShellItems(_In_ IEnumShellItems* enumShel...
    function HRESULT (line 839) | HRESULT MainWindow::ReadSettings()
    function HRESULT (line 867) | HRESULT MainWindow::WriteSettings()
    function HRESULT (line 908) | HRESULT MainWindow::OpenSettingsApp()
    function HRESULT (line 1046) | HRESULT MainWindow::OnRename(_In_ IPowerRenameItem* /*renameItem*/)
    function HRESULT (line 1052) | HRESULT MainWindow::OnRegExCompleted(_In_ DWORD)
    function HRESULT (line 1066) | HRESULT MainWindow::OnRenameCompleted(bool closeUIWindowAfterRenaming)

FILE: PowerToys/src/modules/registrypreview/RegistryPreview/RegistryPreviewXAML/MainWindow.xaml.cs
  class MainWindow (line 19) | public sealed partial class MainWindow : WindowEx
    method MainWindow (line 32) | internal MainWindow()
    method MainWindow_Activated (line 92) | private void MainWindow_Activated(object sender, WindowActivatedEventA...
    method Grid_Loaded (line 106) | private void Grid_Loaded(object sender, RoutedEventArgs e)
    method UpdateWindowTitle (line 112) | public void UpdateWindowTitle(string title)

FILE: PowerToys/src/runner/main.cpp
  function chdir_current_executable (line 67) | void chdir_current_executable()
  function create_msi_mutex (line 79) | inline wil::unique_mutex_nothrow create_msi_mutex()
  function open_menu_from_another_instance (line 84) | void open_menu_from_another_instance(std::optional<std::string> settings...
  function runner (line 95) | int runner(bool isProcessElevated, bool openSettings, std::string settin...
  type SpecialMode (line 237) | enum class SpecialMode
  function SpecialMode (line 245) | SpecialMode should_run_in_special_mode(const int n_cmd_args, LPWSTR* cmd...
  function win32_toast_notification_COM_server_mode (line 266) | int win32_toast_notification_COM_server_mode()
  type toast_notification_handler_result (line 272) | enum class toast_notification_handler_result
  function toast_notification_handler_result (line 278) | toast_notification_handler_result toast_notification_handler(const std::...
  function WinMain (line 316) | int WINAPI WinMain(HINSTANCE /*hInstance*/, HINSTANCE /*hPrevInstance*/,...

FILE: PowerToys/src/settings-ui/Settings.UI.Library/ColorFormatModel.cs
  class ColorFormatModel (line 12) | public class ColorFormatModel : INotifyPropertyChanged
    method ColorFormatModel (line 23) | public ColorFormatModel(string name, string format, bool isShown)
    method ColorFormatModel (line 31) | public ColorFormatModel()
    method OnPropertyChanged (line 175) | private void OnPropertyChanged([CallerMemberName] string propertyName ...

FILE: PowerToys/src/settings-ui/Settings.UI/Converters/ZoomItTypeSpeedSliderConverter.cs
  class ZoomItTypeSpeedSliderConverter (line 12) | public sealed partial class ZoomItTypeSpeedSliderConverter : IValueConve...
    method Convert (line 14) | public object Convert(object value, Type targetType, object parameter,...
    method ConvertBack (line 25) | public object ConvertBack(object value, Type targetType, object parame...

FILE: PowerToys/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs
  class App (line 31) | public partial class App : Application
    type Arguments (line 33) | private enum Arguments
    method App (line 80) | public App()
    method App_UnhandledException (line 102) | private void App_UnhandledException(object sender, Microsoft.UI.Xaml.U...
    method OpenSettingsWindow (line 107) | public static void OpenSettingsWindow(Type type = null, bool ensurePag...
    method OnLaunchedToSetSetting (line 129) | private void OnLaunchedToSetSetting(string[] cmdArgs)
    method OnLaunchedToSetAdditionalSetting (line 145) | private void OnLaunchedToSetAdditionalSetting(string[] cmdArgs)
    method OnLaunchedToGetSetting (line 164) | private void OnLaunchedToGetSetting(string[] cmdArgs)
    method OnLaunchedFromRunner (line 181) | private void OnLaunchedFromRunner(string[] cmdArgs)
    method OnLaunched (line 292) | protected override void OnLaunched(Microsoft.UI.Xaml.LaunchActivatedEv...
    method ShowMessageDialogAndExit (line 332) | private async void ShowMessageDialogAndExit(string content, string tit...
    method ShowMessageDialog (line 334) | private async void ShowMessageDialog(string content, string title = null)
    method ShowDialogAsync (line 343) | public static Task<IUICommand> ShowDialogAsync(string content, string ...
    method GetTwoWayIPCManager (line 356) | public static TwoWayPipeMessageIPCManaged GetTwoWayIPCManager()
    method IsDarkTheme (line 361) | public static bool IsDarkTheme()
    method UpdateUIThemeMethod (line 366) | public static int UpdateUIThemeMethod(string themeName)
    method ClearSettingsWindow (line 380) | public static void ClearSettingsWindow()
    method GetSettingsWindow (line 385) | public static MainWindow GetSettingsWindow()
    method GetOobeWindow (line 390) | public static OobeWindow GetOobeWindow()
    method GetFlyoutWindow (line 395) | public static FlyoutWindow GetFlyoutWindow()
    method SetOobeWindow (line 400) | public static void SetOobeWindow(OobeWindow window)
    method SetFlyoutWindow (line 405) | public static void SetFlyoutWindow(FlyoutWindow window)
    method ClearOobeWindow (line 410) | public static void ClearOobeWindow()
    method ClearFlyoutWindow (line 415) | public static void ClearFlyoutWindow()
    method GetPage (line 420) | public static Type GetPage(string settingWindow)

FILE: PowerToys/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeShellPage.xaml.cs
  class OobeShellPage (line 19) | public sealed partial class OobeShellPage : UserControl
    method SetRunSharedEventCallback (line 23) | public static void SetRunSharedEventCallback(Func<string> implementation)
    method SetColorPickerSharedEventCallback (line 30) | public static void SetColorPickerSharedEventCallback(Func<string> impl...
    method SetOpenMainWindowCallback (line 37) | public static void SetOpenMainWindowCallback(Action<Type> implementation)
    method OobeShellPage (line 59) | public OobeShellPage()
    method OnClosing (line 219) | public void OnClosing()
    method NavigateToModule (line 228) | public void NavigateToModule(PowerToysModules selectedModule)
    method NavigationView_SelectionChanged (line 240) | private void NavigationView_SelectionChanged(Microsoft.UI.Xaml.Control...
    method SetTitleBar (line 303) | private void SetTitleBar()
    method ShellPage_Loaded (line 316) | private void ShellPage_Loaded(object sender, RoutedEventArgs e)
    method NavigationView_DisplayModeChanged (line 321) | private void NavigationView_DisplayModeChanged(NavigationView sender, ...
    method PaneToggleBtn_Click (line 337) | private void PaneToggleBtn_Click(object sender, RoutedEventArgs e)

FILE: PowerToys/src/settings-ui/Settings.UI/ViewModels/CmdNotFoundViewModel.cs
  class CmdNotFoundViewModel (line 22) | public class CmdNotFoundViewModel : Observable
    method CmdNotFoundViewModel (line 49) | public CmdNotFoundViewModel()
    method InitializeEnabledValue (line 54) | private void InitializeEnabledValue()
    method RunPowerShellOrPreviewScript (line 139) | public string RunPowerShellOrPreviewScript(string powershellExecutable...
    method RunPowerShellScript (line 151) | public string RunPowerShellScript(string powershellExecutable, string ...
    method CheckCommandNotFoundRequirements (line 180) | public void CheckCommandNotFoundRequirements()
    method InstallPowerShell7 (line 250) | public void InstallPowerShell7()
    method InstallWinGetClientModule (line 266) | public void InstallWinGetClientModule()
    method InstallModule (line 283) | public void InstallModule()
    method UninstallModule (line 300) | public void UninstallModule()

FILE: PowerToys/src/settings-ui/Settings.UI/ViewModels/DashboardViewModel.cs
  class DashboardViewModel (line 25) | public class DashboardViewModel : Observable
    method DashboardViewModel (line 46) | public DashboardViewModel(ISettingsRepository<GeneralSettings> setting...
    method AddDashboardListItem (line 70) | private void AddDashboardListItem(ModuleType moduleType)
    method LoadKBMSettingsFromJson (line 91) | private void LoadKBMSettingsFromJson()
    method UpdateKBMItems (line 106) | private void UpdateKBMItems()
    method GetKBMProfile (line 112) | private KeyboardManagerProfile GetKBMProfile()
    method GetKBMSettings (line 120) | private KeyboardManagerSettings GetKBMSettings()
    method EnabledChangedOnUI (line 127) | private void EnabledChangedOnUI(DashboardListItem dashboardListItem)
    method ModuleEnabledChangedOnSettingsPage (line 139) | public void ModuleEnabledChangedOnSettingsPage()
    method GetModuleItems (line 169) | private ObservableCollection<DashboardModuleItem> GetModuleItems(Modul...
    method GetModuleItemsAlwaysOnTop (line 204) | private ObservableCollection<DashboardModuleItem> GetModuleItemsAlways...
    method GetModuleItemsAwake (line 214) | private ObservableCollection<DashboardModuleItem> GetModuleItemsAwake()
    method GetModuleItemsColorPicker (line 223) | private ObservableCollection<DashboardModuleItem> GetModuleItemsColorP...
    method GetModuleItemsCropAndLock (line 235) | private ObservableCollection<DashboardModuleItem> GetModuleItemsCropAn...
    method GetModuleItemsEnvironmentVariables (line 247) | private ObservableCollection<DashboardModuleItem> GetModuleItemsEnviro...
    method GetModuleItemsFancyZones (line 256) | private ObservableCollection<DashboardModuleItem> GetModuleItemsFancyZ...
    method GetModuleItemsFileLocksmith (line 275) | private ObservableCollection<DashboardModuleItem> GetModuleItemsFileLo...
    method GetModuleItemsFindMyMouse (line 284) | private ObservableCollection<DashboardModuleItem> GetModuleItemsFindMy...
    method GetModuleItemsHosts (line 312) | private ObservableCollection<DashboardModuleItem> GetModuleItemsHosts()
    method GetModuleItemsImageResizer (line 321) | private ObservableCollection<DashboardModuleItem> GetModuleItemsImageR...
    method GetModuleItemsKeyboardManager (line 330) | private ObservableCollection<DashboardModuleItem> GetModuleItemsKeyboa...
    method GetModuleItemsMouseHighlighter (line 350) | private ObservableCollection<DashboardModuleItem> GetModuleItemsMouseH...
    method GetModuleItemsMouseJump (line 360) | private ObservableCollection<DashboardModuleItem> GetModuleItemsMouseJ...
    method GetModuleItemsMousePointerCrosshairs (line 370) | private ObservableCollection<DashboardModuleItem> GetModuleItemsMouseP...
    method GetModuleItemsMouseWithoutBorders (line 380) | private ObservableCollection<DashboardModuleItem> GetModuleItemsMouseW...
    method GetModuleItemsAdvancedPaste (line 389) | private ObservableCollection<DashboardModuleItem> GetModuleItemsAdvanc...
    method GetModuleItemsPeek (line 411) | private ObservableCollection<DashboardModuleItem> GetModuleItemsPeek()
    method GetModuleItemsPowerRename (line 421) | private ObservableCollection<DashboardModuleItem> GetModuleItemsPowerR...
    method GetModuleItemsPowerLauncher (line 430) | private ObservableCollection<DashboardModuleItem> GetModuleItemsPowerL...
    method GetModuleItemsPowerAccent (line 440) | private ObservableCollection<DashboardModuleItem> GetModuleItemsPowerA...
    method GetModuleItemsWorkspaces (line 460) | private ObservableCollection<DashboardModuleItem> GetModuleItemsWorksp...
    method GetModuleItemsRegistryPreview (line 473) | private ObservableCollection<DashboardModuleItem> GetModuleItemsRegist...
    method GetModuleItemsMeasureTool (line 482) | private ObservableCollection<DashboardModuleItem> GetModuleItemsMeasur...
    method GetModuleItemsShortcutGuide (line 492) | private ObservableCollection<DashboardModuleItem> GetModuleItemsShortc...
    method GetModuleItemsPowerOCR (line 507) | private ObservableCollection<DashboardModuleItem> GetModuleItemsPowerO...
    method GetModuleItemsNewPlus (line 517) | private ObservableCollection<DashboardModuleItem> GetModuleItemsNewPlus()
    method GetModuleItemsZoomIt (line 526) | private ObservableCollection<DashboardModuleItem> GetModuleItemsZoomIt()
    method SWVersionButtonClicked (line 535) | internal void SWVersionButtonClicked()
    method EnvironmentVariablesLaunchClicked (line 540) | private void EnvironmentVariablesLaunchClicked(object sender, RoutedEv...
    method HostLaunchClicked (line 547) | private void HostLaunchClicked(object sender, RoutedEventArgs e)
    method FancyZoneLaunchClicked (line 554) | private void FancyZoneLaunchClicked(object sender, RoutedEventArgs e)
    method WorkspacesLaunchClicked (line 560) | private void WorkspacesLaunchClicked(object sender, RoutedEventArgs e)
    method KbmKeyLaunchClicked (line 566) | private void KbmKeyLaunchClicked(object sender, RoutedEventArgs e)
    method KbmShortcutLaunchClicked (line 573) | private void KbmShortcutLaunchClicked(object sender, RoutedEventArgs e)
    method RegistryPreviewLaunchClicked (line 580) | private void RegistryPreviewLaunchClicked(object sender, RoutedEventAr...
    method DashboardListItemClick (line 586) | internal void DashboardListItemClick(object sender)

FILE: PowerToys/src/settings-ui/Settings.UI/ViewModels/PowerAccentViewModel.cs
  class PowerAccentViewModel (line 18) | public class PowerAccentViewModel : Observable
    method PowerAccentViewModel (line 90) | public PowerAccentViewModel(ISettingsUtils settingsUtils, ISettingsRep...
    method InitializeEnabledValue (line 136) | private void InitializeEnabledValue()
    method InitializeLanguages (line 154) | private void InitializeLanguages()
    method RaisePropertyChanged (line 365) | private void RaisePropertyChanged([CallerMemberName] string propertyNa...
    method RefreshEnabledState (line 378) | public void RefreshEnabledState()

FILE: Tools/autosort.py
  function main (line 13) | def main():
  function get_power_toys_versions (line 33) | def get_power_toys_versions():
  function get_latest_version (line 42) | def get_latest_version(versions):
  function initall (line 54) | def initall(latest_version):
  function sort_label (line 97) | def sort_label(dic):
  function replace_translations_in_file (line 111) | def replace_translations_in_file(file_path, lab2cn, sortedlab2cn, lab2xx):

FILE: Tools/autosort_newgptbroken.py
  function get_power_toys_versions (line 9) | def get_power_toys_versions():
  function get_latest_version (line 15) | def get_latest_version(versions):
  function get_translations_and_replacements (line 26) | def get_translations_and_replacements(latest_version):
  function sort_translations (line 61) | def sort_translations(translations):
  function replace_translations_in_file (line 71) | def replace_translations_in_file(file_path, original_texts, sorted_trans...
  function main (line 83) | def main():
Condensed preview — 183 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,749K chars).
[
  {
    "path": "LICENSE",
    "chars": 1066,
    "preview": "MIT License\n\nCopyright (c) 2022 Zetaspace\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\n"
  },
  {
    "path": "Patcher/安装.CMD",
    "chars": 6326,
    "preview": "@echo off\nchcp 65001>nul\ncolor f0\nif not exist \"%~dp0组策略文件\\安装组策略.cmd\" echo 检测到文件缺失,请解压后运行!&pause&exit\necho 请允许管理员权限以便安装,"
  },
  {
    "path": "Patcher/安装组策略.cmd",
    "chars": 438,
    "preview": "chcp 65001>nul\n@echo off\necho 正在安装 PowerToys 组策略...\n%1 mshta vbscript:CreateObject(\"Shell.Application\").ShellExecute(\"cm"
  },
  {
    "path": "PowerToys/global.json",
    "chars": 47,
    "preview": "{\n  \"sdk\": {\n    \"allowPrerelease\": false\n  }\n}"
  },
  {
    "path": "PowerToys/src/ActionRunner/Resources.resx",
    "chars": 3188,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSch"
  },
  {
    "path": "PowerToys/src/Monaco/index.html",
    "chars": 6939,
    "preview": "<!doctype HTML>\n<html>\n<head>\n    <script>\n        // Set variables\n\n        // Get URL parameters:\n        // `code` c"
  },
  {
    "path": "PowerToys/src/Update/Resources.resx",
    "chars": 3591,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSch"
  },
  {
    "path": "PowerToys/src/Version.props",
    "chars": 306,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild"
  },
  {
    "path": "PowerToys/src/common/interop/keyboard_layout.cpp",
    "chars": 13607,
    "preview": "#include \"pch.h\"\n#include <array>\n#include <algorithm>\n\n#include \"keyboard_layout_impl.h\"\n#include \"shared_constants.h\""
  },
  {
    "path": "PowerToys/src/common/sysinternals/Eula/eula.c",
    "chars": 36327,
    "preview": "#pragma once\n\n#pragma warning( disable: 4996) \n\n#include <windows.h>\n#include <stdio.h>\n#include <tchar.h>\n#include <Ri"
  },
  {
    "path": "PowerToys/src/gpo/assets/zh-CN/PowerToys.adml",
    "chars": 12015,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Copyright (c) Microsoft Corporation.\n     Licensed under the MIT License. --"
  },
  {
    "path": "PowerToys/src/modules/AdvancedPaste/AdvancedPaste/Strings/en-us/Resources.resw",
    "chars": 10850,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/CropAndLock/CropAndLock/main.cpp",
    "chars": 10212,
    "preview": "#include \"pch.h\"\n#include \"SettingsWindow.h\"\n#include \"OverlayWindow.h\"\n#include \"CropAndLockWindow.h\"\n#include \"Thumbn"
  },
  {
    "path": "PowerToys/src/modules/EnvironmentVariables/EnvironmentVariablesUILib/Strings/en-us/Resources.resw",
    "chars": 11205,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/FileLocksmith/FileLocksmithContextMenu/Resources.resx",
    "chars": 6066,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/FileLocksmith/FileLocksmithContextMenu/dllmain.cpp",
    "chars": 5722,
    "preview": "// dllmain.cpp : Defines the entry point for the DLL application.\n#include \"pch.h\"\n\n#include <common/telemetry/EtwTrace/"
  },
  {
    "path": "PowerToys/src/modules/FileLocksmith/FileLocksmithExt/Resources.resx",
    "chars": 6111,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/FileLocksmith/FileLocksmithUI/Strings/en-us/Resources.resw",
    "chars": 7792,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/Hosts/HostsUILib/Strings/en-us/Resources.resw",
    "chars": 14879,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/MeasureTool/MeasureToolUI/Strings/en-us/Resources.resw",
    "chars": 3865,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>  \n    <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XM"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.Clipboard.cs",
    "chars": 44629,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.Encryption.cs",
    "chars": 8069,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.Event.cs",
    "chars": 9864,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.Helper.cs",
    "chars": 18707,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.MachineStuff.cs",
    "chars": 41629,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Class/Common.Service.cs",
    "chars": 5823,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Class/EasyMouseOption.cs",
    "chars": 346,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Class/Extensions.cs",
    "chars": 1926,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Class/IClipboardHelper.cs",
    "chars": 18274,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Class/InputHook.cs",
    "chars": 24589,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Class/Program.cs",
    "chars": 16220,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Class/SocketStuff.cs",
    "chars": 88184,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Control/Machine.cs",
    "chars": 6055,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Control/Machine.designer.cs",
    "chars": 6039,
    "preview": "namespace MouseWithoutBorders\n{\n    partial class Machine\n    {\n        /// <summary> \n        /// Required designer va"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Core/Receiver.cs",
    "chars": 16316,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SettingsFormPage.Designer.cs",
    "chars": 4053,
    "preview": "namespace MouseWithoutBorders\n{\n    partial class SettingsFormPage\n    {\n        /// <summary> \n        /// Required de"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SettingsFormPage.cs",
    "chars": 1758,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage1.Designer.cs",
    "chars": 9759,
    "preview": "using System.Windows.Forms;\n\nnamespace MouseWithoutBorders\n{\n    partial class SetupPage1\n    {\n        /// <summary> \n"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2a.Designer.cs",
    "chars": 12464,
    "preview": "namespace MouseWithoutBorders\n{\n    using System.Windows.Forms;\n\n    partial class SetupPage2a\n    {\n        /// <summar"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2aa.Designer.cs",
    "chars": 4497,
    "preview": "using System.Windows.Forms;\n\nnamespace MouseWithoutBorders\n{\n    partial class SetupPage2aa\n    {\n        /// <summary> "
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2ab.Designer.cs",
    "chars": 7759,
    "preview": "using System.Windows.Forms;\n\nnamespace MouseWithoutBorders\n{\n    partial class SetupPage2ab\n    {\n        /// <summary> "
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage2b.Designer.cs",
    "chars": 10052,
    "preview": "using System.Windows.Forms;\n\nnamespace MouseWithoutBorders\n{\n    partial class SetupPage2b\n    {\n        /// <summary> \n"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage3a.Designer.cs",
    "chars": 5884,
    "preview": "using System.Windows.Forms;\n\nnamespace MouseWithoutBorders\n{\n    partial class SetupPage3a\n    {\n        /// <summary> \n"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage3a.cs",
    "chars": 4821,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n// "
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage4.Designer.cs",
    "chars": 9788,
    "preview": "using System.Windows.Forms;\n\nnamespace MouseWithoutBorders\n{\n    partial class SetupPage4\n    {\n        /// <summary> \n "
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/Settings/SetupPage5.Designer.cs",
    "chars": 7429,
    "preview": "using System.Windows.Forms;\n\nnamespace MouseWithoutBorders\n{\n    partial class SetupPage5\n    {\n        /// <summary> \n "
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/frmAbout.Designer.cs",
    "chars": 8447,
    "preview": "namespace MouseWithoutBorders\n{\n    partial class FrmAbout\n    {\n        /// <summary>\n        /// Required designer va"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/frmAbout.cs",
    "chars": 5837,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/frmInputCallback.cs",
    "chars": 3208,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/frmLogon.Designer.cs",
    "chars": 3192,
    "preview": "namespace MouseWithoutBorders\n{\n    partial class frmLogon\n    {\n        /// <summary>\n        /// Required designer va"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/frmMatrix.Designer.cs",
    "chars": 61252,
    "preview": "using System.Windows.Forms;\nusing System.Collections.Generic;\nusing System.Drawing;\nusing Windows.UI.Notifications;\n\nna"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/frmMatrix.cs",
    "chars": 45499,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/frmMatrix.resx",
    "chars": 15592,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prima"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/frmMessage.Designer.cs",
    "chars": 7575,
    "preview": "namespace MouseWithoutBorders\n{\n    partial class FrmMessage\n    {\n        /// <summary>\n        /// Required designer "
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/frmScreen.Designer.cs",
    "chars": 15989,
    "preview": "namespace MouseWithoutBorders\n{\n    partial class FrmScreen\n    {\n        /// <summary>\n        /// Required designer v"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Form/frmScreen.cs",
    "chars": 48075,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/App/Helper/FormHelper.cs",
    "chars": 27586,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/MouseWithoutBorders/ModuleInterface/dllmain.cpp",
    "chars": 19606,
    "preview": "#include \"pch.h\"\n#include <interface/powertoy_module_interface.h>\n#include <common/SettingsAPI/settings_objects.h>\n#inc"
  },
  {
    "path": "PowerToys/src/modules/NewPlus/NewShellExtensionContextMenu/NewShellExtensionContextMenu.vcxproj",
    "chars": 12067,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msb"
  },
  {
    "path": "PowerToys/src/modules/NewPlus/NewShellExtensionContextMenu/NewShellExtensionContextMenu.vcxproj.filters",
    "chars": 6723,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "PowerToys/src/modules/NewPlus/NewShellExtensionContextMenu/TemplateExamples/模板文件夹里的一切都会出现在新建+菜单中.txt",
    "chars": 53,
    "preview": "访问 https://aka.ms/PowerToysOverview_NewPlus 了解如何使用新建+"
  },
  {
    "path": "PowerToys/src/modules/NewPlus/NewShellExtensionContextMenu/TemplateExamples/示例文件夹/另一个示例文本文件.txt",
    "chars": 9,
    "preview": "另一个示例文本文件"
  },
  {
    "path": "PowerToys/src/modules/NewPlus/NewShellExtensionContextMenu/TemplateExamples/示例文件夹/示例文本文件.txt",
    "chars": 6,
    "preview": "示例文本文件"
  },
  {
    "path": "PowerToys/src/modules/NewPlus/NewShellExtensionContextMenu/resources.resx",
    "chars": 6376,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/NewPlus/NewShellExtensionContextMenu.win10/resources.resx",
    "chars": 6376,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/PowerOCR/PowerOCR/Properties/Resources.resx",
    "chars": 6577,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/ShortcutGuide/ShortcutGuide/Resources.resx",
    "chars": 7396,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/Workspaces/WorkspacesEditor/Models/Project.cs",
    "chars": 15785,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n// "
  },
  {
    "path": "PowerToys/src/modules/Workspaces/WorkspacesEditor/Properties/Resources.resx",
    "chars": 12217,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prima"
  },
  {
    "path": "PowerToys/src/modules/Workspaces/WorkspacesLauncher/Resource.resx",
    "chars": 6290,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/Workspaces/WorkspacesLauncherUI/Properties/Resources.resx",
    "chars": 5960,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prima"
  },
  {
    "path": "PowerToys/src/modules/Workspaces/WorkspacesSnapshotTool/Resource.resx",
    "chars": 6220,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/ZoomIt/ZoomIt/ZoomIt.rc",
    "chars": 16506,
    "preview": "// Microsoft Visual C++ generated resource script.\n//\n#include \"resource.h\"\n\n// version.h and branding.h are different i"
  },
  {
    "path": "PowerToys/src/modules/ZoomIt/ZoomIt/Zoomit.cpp",
    "chars": 292263,
    "preview": "//============================================================================\n//\n// Zoomit\n// Copyright (C) Mark Russi"
  },
  {
    "path": "PowerToys/src/modules/alwaysontop/AlwaysOnTop/Resources.resx",
    "chars": 6265,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/awake/Awake/Core/Constants.cs",
    "chars": 1053,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/awake/Awake/Properties/Resources.resx",
    "chars": 9668,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/colorPicker/ColorPickerUI/Properties/Resources.resx",
    "chars": 16374,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/colorPicker/ColorPickerUI/ViewModels/ColorEditorViewModel.cs",
    "chars": 14071,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/fancyzones/FancyZonesLib/Resources.resx",
    "chars": 14143,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/fancyzones/editor/FancyZonesEditor/Properties/Resources.resx",
    "chars": 17001,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prima"
  },
  {
    "path": "PowerToys/src/modules/imageresizer/ImageResizerContextMenu/Resources.resx",
    "chars": 5902,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/imageresizer/dll/Resources.resx",
    "chars": 6402,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/imageresizer/ui/Properties/Resources.resx",
    "chars": 11650,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/imageresizer/ui/Views/EnumValueConverter.cs",
    "chars": 2224,
    "preview": "#pragma warning disable IDE0073\n// Copyright (c) Brice Lambson\n// The Brice Lambson licenses this file to you under the"
  },
  {
    "path": "PowerToys/src/modules/imageresizer/ui/Views/InputPage.xaml",
    "chars": 14314,
    "preview": "<UserControl\n    x:Class=\"ImageResizer.Views.InputPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/present"
  },
  {
    "path": "PowerToys/src/modules/keyboardmanager/KeyboardManagerEditor/Resources.resx",
    "chars": 17304,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/keyboardmanager/KeyboardManagerEngineLibrary/KeyboardEventHandlers.cpp",
    "chars": 91800,
    "preview": "#include \"pch.h\"\n#include <shellapi.h>\n#include \"KeyboardEventHandlers.h\"\n\n#include <common/interop/shared_constants.h>"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/InputInterpreter.cs",
    "chars": 23301,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n// "
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/Main.cs",
    "chars": 7231,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.UnitConverter/Properties/Resources.resx",
    "chars": 6160,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Main.cs",
    "chars": 11107,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.VSCodeWorkspaces/Properties/Resources.resx",
    "chars": 7356,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Base64/Base64DecodeRequest.cs",
    "chars": 1513,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Base64/Base64Request.cs",
    "chars": 1351,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/GUID/GUIDRequest.cs",
    "chars": 3699,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Uri/DataEscapeRequest.cs",
    "chars": 1352,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Uri/DataUnescapeRequest.cs",
    "chars": 1542,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Uri/HexEscapeRequest.cs",
    "chars": 1619,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Uri/HexUnescapeRequest.cs",
    "chars": 1695,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Uri/UrlDecodeRequest.cs",
    "chars": 1563,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Generators/Uri/UrlEncodeRequest.cs",
    "chars": 1391,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/InputParser.cs",
    "chars": 9130,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.ValueGenerator/Properties/Resources.resx",
    "chars": 8252,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.WebSearch/Main.cs",
    "chars": 8574,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Community.PowerToys.Run.Plugin.WebSearch/Properties/Resources.resx",
    "chars": 6511,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Folder/Properties/Resources.resx",
    "chars": 7713,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Indexer/Main.cs",
    "chars": 11691,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Indexer/Properties/Resources.resx",
    "chars": 7940,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Main.cs",
    "chars": 7822,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Programs/UWPApplication.cs",
    "chars": 29863,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Program/Properties/Resources.resx",
    "chars": 7696,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Shell/Main.cs",
    "chars": 19445,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n// "
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Shell/Properties/Resources.resx",
    "chars": 7991,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Uri/Main.cs",
    "chars": 6812,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n// "
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.Uri/Properties/Resources.resx",
    "chars": 6457,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.Plugin.WindowWalker/Properties/Resources.resx",
    "chars": 9371,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Calculator/Properties/Resources.resx",
    "chars": 8647,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.History/Properties/Resources.resx",
    "chars": 6024,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.OneNote/Properties/Resources.resx",
    "chars": 5888,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.PowerToys/Properties/Resources.resx",
    "chars": 8025,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Registry/Properties/Resources.resx",
    "chars": 8210,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.Service/Properties/Resources.resx",
    "chars": 8775,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System/Components/ResultHelper.cs",
    "chars": 6022,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System/Main.cs",
    "chars": 11199,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n// "
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.System/Properties/Resources.resx",
    "chars": 18662,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.TimeDate/Properties/Resources.resx",
    "chars": 15820,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsSettings/Properties/Resources.resx",
    "chars": 71470,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsTerminal/Main.cs",
    "chars": 7617,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n// "
  },
  {
    "path": "PowerToys/src/modules/launcher/Plugins/Microsoft.PowerToys.Run.Plugin.WindowsTerminal/Properties/Resources.resx",
    "chars": 6816,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/launcher/PowerLauncher/Properties/Resources.resx",
    "chars": 8860,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/peek/Peek.UI/Strings/en-us/Resources.resw",
    "chars": 14805,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/powerrename/PowerRenameContextMenu/Resources.resx",
    "chars": 6009,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/powerrename/PowerRenameUILib/PowerRenameXAML/MainWindow.xaml.cpp",
    "chars": 40985,
    "preview": "#include \"pch.h\"\n#include \"MainWindow.xaml.h\"\n#if __has_include(\"MainWindow.g.cpp\")\n#include \"MainWindow.g.cpp\"\n#endif\n"
  },
  {
    "path": "PowerToys/src/modules/powerrename/PowerRenameUILib/Strings/en-us/Resources.resw",
    "chars": 16375,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/powerrename/dll/Resources.resx",
    "chars": 7507,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/previewpane/GcodePreviewHandler/Properties/Resource.resx",
    "chars": 6200,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/previewpane/MarkdownPreviewHandler/Properties/Resources.resx",
    "chars": 6302,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/previewpane/MonacoPreviewHandler/Properties/Resources.resx",
    "chars": 6751,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/previewpane/PdfPreviewHandler/Properties/Resources.resx",
    "chars": 6445,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/previewpane/QoiPreviewHandler/Properties/Resource.resx",
    "chars": 6075,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/previewpane/SvgPreviewHandler/Properties/Resource.resx",
    "chars": 6133,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/previewpane/powerpreview/Resources.resx",
    "chars": 8979,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/modules/registrypreview/RegistryPreview/RegistryPreviewXAML/MainWindow.xaml.cs",
    "chars": 5380,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n// "
  },
  {
    "path": "PowerToys/src/modules/registrypreview/RegistryPreviewUILib/Strings/en-US/Resources.resw",
    "chars": 10950,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/runner/Resources.resx",
    "chars": 5869,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSch"
  },
  {
    "path": "PowerToys/src/runner/main.cpp",
    "chars": 20015,
    "preview": "#include \"pch.h\"\n#include <ShellScalingApi.h>\n#include <lmcons.h>\n#include <filesystem>\n#include <sstream>\n#include \"tra"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/Assets/Settings/Scripts/CheckCmdNotFoundRequirements.ps1",
    "chars": 2203,
    "preview": "Write-Host $PSVersionTable\nif ($PSVersionTable.PSVersion -ge 7.4)\n{\n  Write-Host \"已安装 PowerShell 7.4 或更高版本.\"\n  # This me"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/Assets/Settings/Scripts/DisableModule.ps1",
    "chars": 1052,
    "preview": "$profileContent = Get-Content $PROFILE\n\n$newContent = \"\"\n$linesToDeleteFound = $False\n$atLeastOneInstanceFound = $False\n"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/Assets/Settings/Scripts/EnableModule.ps1",
    "chars": 2969,
    "preview": "[CmdletBinding()]\nParam(\n  [Parameter(Mandatory=$True,Position=1)]\n  [string]$scriptPath\n)\n\nWrite-Host \"Enabling experim"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/Assets/Settings/Scripts/InstallPowerShell7.ps1",
    "chars": 3493,
    "preview": "\nif ((Get-AppxPackage microsoft.DesktopAppInstaller).Version -ge [System.Version]\"1.21\")\n{\n  Write-Host \"已安装 winget, 即将开"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/Assets/Settings/Scripts/InstallWinGetClientModule.ps1",
    "chars": 1655,
    "preview": "$wingetModules = Get-Module -ListAvailable -Name Microsoft.WinGet.Client\nif ($wingetModules)\n{\n  $needsUpdate = $true;\n "
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/Converters/ZoomItTypeSpeedSliderConverter.cs",
    "chars": 1071,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/SettingsXAML/App.xaml.cs",
    "chars": 17624,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n// "
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeShellPage.xaml",
    "chars": 9413,
    "preview": "<UserControl\n    x:Class=\"Microsoft.PowerToys.Settings.UI.OOBE.Views.OobeShellPage\"\n    xmlns=\"http://schemas.microsoft"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/SettingsXAML/OOBE/Views/OobeShellPage.xaml.cs",
    "chars": 15069,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n// "
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/SettingsXAML/Views/ColorPickerPage.xaml",
    "chars": 12338,
    "preview": "<Page\n    x:Class=\"Microsoft.PowerToys.Settings.UI.Views.ColorPickerPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/SettingsXAML/Views/ImageResizerPage.xaml",
    "chars": 21400,
    "preview": "<Page\n    x:Class=\"Microsoft.PowerToys.Settings.UI.Views.ImageResizerPage\"\n    xmlns=\"http://schemas.microsoft.com/winf"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseUtilsPage.xaml",
    "chars": 27456,
    "preview": "<Page\n    x:Class=\"Microsoft.PowerToys.Settings.UI.Views.MouseUtilsPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/SettingsXAML/Views/MouseWithoutBordersPage.xaml",
    "chars": 30074,
    "preview": "<Page\n    x:Class=\"Microsoft.PowerToys.Settings.UI.Views.MouseWithoutBordersPage\"\n    xmlns=\"http://schemas.microsoft.c"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerLauncherPage.xaml",
    "chars": 48238,
    "preview": "<Page\n    x:Class=\"Microsoft.PowerToys.Settings.UI.Views.PowerLauncherPage\"\n    xmlns=\"http://schemas.microsoft.com/win"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerOcrPage.xaml",
    "chars": 4784,
    "preview": "<Page\n    x:Class=\"Microsoft.PowerToys.Settings.UI.Views.PowerOcrPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/20"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerPreviewPage.xaml",
    "chars": 18158,
    "preview": "<Page\n    x:Class=\"Microsoft.PowerToys.Settings.UI.Views.PowerPreviewPage\"\n    xmlns=\"http://schemas.microsoft.com/winf"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/SettingsXAML/Views/PowerRenamePage.xaml",
    "chars": 5942,
    "preview": "<Page\n    x:Class=\"Microsoft.PowerToys.Settings.UI.Views.PowerRenamePage\"\n    xmlns=\"http://schemas.microsoft.com/winfx"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/SettingsXAML/Views/ZoomItPage.xaml",
    "chars": 18068,
    "preview": "<Page\n    x:Class=\"Microsoft.PowerToys.Settings.UI.Views.ZoomItPage\"\n    xmlns=\"http://schemas.microsoft.com/winfx/2006"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw",
    "chars": 197646,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/ViewModels/CmdNotFoundViewModel.cs",
    "chars": 12426,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/ViewModels/DashboardViewModel.cs",
    "chars": 33836,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI/ViewModels/PowerAccentViewModel.cs",
    "chars": 16242,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n// "
  },
  {
    "path": "PowerToys/src/settings-ui/Settings.UI.Library/ColorFormatModel.cs",
    "chars": 4133,
    "preview": "// Copyright (c) Microsoft Corporation\n// The Microsoft Corporation licenses this file to you under the MIT license.\n//"
  },
  {
    "path": "README.md",
    "chars": 3305,
    "preview": "# PowerToys Simplified Chinese Translation\r\n\r\n<img src=\"https://raw.gitmirror.com/zetaloop/PowerToys-CN/master/to.pic/Po"
  },
  {
    "path": "Tools/README.md",
    "chars": 378,
    "preview": "# Deprecated.\n\n`autosort.py`: PowerToys Quick Accent now sorts language lists using the system locale, eliminating the n"
  },
  {
    "path": "Tools/autosort.py",
    "chars": 4629,
    "preview": "import os\nimport pinyin\n\n# 设置翻译文件所在的目录路径以及一些必要的初始化变量\ntranslations_directory = os.path.dirname(__file__)  # os.getcwd()\nt"
  },
  {
    "path": "Tools/autosort_newgptbroken.py",
    "chars": 4140,
    "preview": "import os\nimport pinyin\n\n# 设置翻译文件所在的目录路径以及一些必要的初始化变量\ntranslations_directory = os.path.abspath(os.path.join(os.getcwd(), "
  },
  {
    "path": "Tools/autosort_old.py",
    "chars": 2507,
    "preview": "import os\nos.chdir('E:/Translations')\nvers = sorted(i for i in os.listdir() if i.startswith('PowerToys-') and i[-1].isdi"
  },
  {
    "path": "Tools/blank",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "Tools/clean.cmd",
    "chars": 2768,
    "preview": "@echo off\n:start0\ncd /d %~dp0..\\..\nset pt=%cd%\ncd /d %~dp0\n\nset pt=%pt%\\PowerToys\ntitle PT Source Cleaner - [new: Newest"
  },
  {
    "path": "Tools/clean.txt",
    "chars": 260,
    "preview": "首先 Visual Studio 内项目清理!\n\nDelDeps.cmd :\n\t/.vs\n\t/packages\n\t/x64\n\t/deps/*/*(所有里面的文件夹内的东西,比如cxxopts内的)\n\n*/bin/\n*/obj/\n*/x64/"
  },
  {
    "path": "Tools/modify.cmd",
    "chars": 1913,
    "preview": "@echo off\n:start0\ncd /d %~dp0..\nset pt=%cd%\ncd /d %~dp0\n\nset pt=%pt%\\PowerToys\ntitle PT Source Patcher - [new: Newest Ve"
  },
  {
    "path": "Tools/modify_arm64.cmd",
    "chars": 1813,
    "preview": "@echo off\n:start0\ncd /d %~dp0..\nset pt=%cd%\ncd /d %~dp0\n\nset pt=%pt%\\PowerToys\ntitle PT Source Patcher - [new: Newest Ve"
  },
  {
    "path": "Tools/zhcn_modify_list.txt",
    "chars": 1701,
    "preview": "modules\\launcher\\Plugins\\UnitConverter\\Community.PowerToys.Run.Plugin.UnitConverter.dll\nmodules\\launcher\\Plugins\\VSCodeW"
  },
  {
    "path": "Tools/zhcn_modify_list2.txt",
    "chars": 0,
    "preview": ""
  },
  {
    "path": "Tools/zhcn_modify_list2.txt.bak",
    "chars": 301,
    "preview": "modules\\ColorPicker\\ModernWpf.Controls.dll\nmodules\\FancyZones\\ModernWpf.Controls.dll\nmodules\\ImageResizer\\ModernWpf.Cont"
  }
]

About this extraction

This page contains the full source code of the ZetaSp/PowerToys-Chinese-TransMOD GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 183 files (2.4 MB), approximately 653.1k tokens, and a symbol index with 948 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!