├── .gitattributes ├── .gitignore ├── Gui ├── Base.ahk ├── CheckUpdate.ahk ├── HostsEdit.ahk ├── Language.ahk ├── Optimizer.ahk ├── PackageManager.ahk ├── StartupManager.ahk ├── Theme.ahk └── User.ahk ├── Icon.ico ├── Inc ├── Base.ahk ├── CustomFn.ahk ├── Data.ahk ├── LangData.ahk ├── OptimizeConfig.ahk └── Optimizer.ahk ├── LICENCE ├── Lang ├── de.json ├── en.json ├── es.json ├── fr.json ├── it.json ├── ja.json ├── ko.json ├── pl.json ├── pt.json ├── ru.json ├── tr.json ├── vi.json └── zh_cn.json ├── Lib ├── Gdip_All.ahk ├── Hex.ahk ├── JSON.ahk ├── PackageManager.ahk ├── PicSwitch.ahk ├── Powrprof.ahk ├── RunTerminal.ahk ├── SC.ahk └── ToolTipOptions.ahk ├── README.md ├── Sample_config └── WindowsPro_VMwareWorkstation.json ├── Tools ├── 1.Drag&DropAHKFileHereToRun.bat ├── Debug_Startup.ahk └── LangConverterTool.ahk └── WinTune.ahk /.gitattributes: -------------------------------------------------------------------------------- 1 | /Img export-ignore 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | config.ini 2 | Img/ 3 | *.exe 4 | *.zip 5 | *.bak 6 | *.tmp 7 | *.txt 8 | *.log 9 | -------------------------------------------------------------------------------- /Gui/CheckUpdate.ahk: -------------------------------------------------------------------------------- 1 | CheckUpdate(g:="") { 2 | req := ComObject("Msxml2.XMLHTTP") 3 | req.open("GET", "https://api.github.com/repos/tranht17/WinTune/releases/latest", 1) 4 | req.onreadystatechange := Ready 5 | req.send() 6 | 7 | Ready() { 8 | if (req.readyState != 4) 9 | return 10 | if (req.status != 200) { 11 | ;12007: No internet|The server name cannot be resolved. 12 | ;12029: Block internet|Connection to the server failed. 13 | if g 14 | Msg(GetLangText("Text_ConnectionFailed"),GetLangText("Text_CheckUpdate"),"Icon!") 15 | return 16 | } 17 | 18 | try { 19 | LatestInfo:=JSON.parse(req.responseText) 20 | NewVer:=LatestInfo["tag_name"] 21 | } catch Error as err { 22 | if g 23 | Msg(GetLangText("Text_ConnectionFailed"),GetLangText("Text_CheckUpdate"),"Icon!") 24 | Return 25 | } 26 | 27 | if VerCompare(NewVer, App.Ver)==1 { 28 | if g { 29 | g2:=CreateDlg(g) 30 | SetPreventDestroyDlg(300) 31 | tWidth:=400 32 | g2.AddText("h22 xm0 Center w" tWidth, "~~~~~ " GetLangText("Text_CheckUpdate") " ~~~~~").SetFont("s" App.MainFontSize+1) 33 | g2.AddText("xm0", GetLangText("Text_CurrentVersion") ":") 34 | g2.AddText("yp", App.Ver) 35 | g2.AddText("xm0", GetLangText("Text_NewestVersion") ":") 36 | g2.AddText("yp c" Themes.%App.ThemeSelected%.TextColorHover, NewVer) 37 | g2.AddText("xm0", GetLangText("Text_WhatsNew") ":") 38 | 39 | WhatsNew:=RegExReplace(LatestInfo["body"], "sm)\r\n## Verify.*") 40 | WhatsNew:=RegExReplace(WhatsNew, "\r\n!\[\]\(.*\)") 41 | 42 | EditWhatsNew:=g2.AddEdit("readonly xm0 h150 w" tWidth, WhatsNew) 43 | SetCtrlTheme(EditWhatsNew) 44 | BtnUpdate:=g2.AddButton("xm40 w100", GetLangText("Text_Update")) 45 | BtnUpdate.OnEvent("Click",BtnUpdate_Click) 46 | BtnUpdate.Focus() 47 | SetCtrlTheme(BtnUpdate) 48 | 49 | BtnHomepage:=g2.AddButton("yp w100", GetLangText("Text_Homepage")) 50 | BtnHomepage.OnEvent("Click",(*)=>Run("https://github.com/tranht17/WinTune")) 51 | SetCtrlTheme(BtnHomepage) 52 | 53 | BtnClose:=g2.AddButton("yp w100", GetLangText("Text_Close")) 54 | BtnClose.OnEvent("Click",(*)=>DestroyDlg()) 55 | SetCtrlTheme(BtnClose) 56 | ShowDlg(g, g2, 1) 57 | 58 | BtnUpdate_Click(*) { 59 | DestroyDlg() 60 | g2:=CreateDlg(g) 61 | uWidth:=300,uHeight:=20 62 | g2.AddText("Center 0x200 h" uHeight " w" uWidth, GetLangText("Text_Updating") "...").SetFont("s" App.MainFontSize+1) 63 | ShowDlg(g, g2, 1) 64 | 65 | if A_IsCompiled { 66 | CurrentFile:=A_ScriptFullPath 67 | DownloadLink:="https://github.com/tranht17/WinTune/releases/download/" NewVer "/WinTune" (A_Is64bitOS?"":"32") ".exe" 68 | DownloadFile:=CurrentFile ".tmp" 69 | Method:="GET" 70 | ContentType:="application/octet-stream" 71 | } else { 72 | DownloadLink:="https://codeload.github.com/tranht17/WinTune/zip/refs/tags/" NewVer 73 | DownloadFolder:=A_ScriptDir "\WinTune-" NewVer 74 | DownloadFile:=DownloadFolder ".zip" 75 | Method:="GET" 76 | ContentType:="application/zip" 77 | try DirDelete DownloadFolder , 1 78 | } 79 | try FileDelete DownloadFile 80 | 81 | req:=ComObject("WinHttp.WinHttpRequest.5.1") 82 | req.SetTimeouts(4000, 4000, 4000, 4000) 83 | req.Open(Method, DownloadLink, 0) 84 | 85 | FileDownloaded:=0 86 | Loop 10 { 87 | try { 88 | req.Send() 89 | TotalSize := req.GetResponseHeader("Content-Length") 90 | tContentType := req.GetResponseHeader("Content-Type") 91 | if tContentType=ContentType { 92 | tResponseBody := req.ResponseBody 93 | pData := NumGet(ComObjValue(tResponseBody) + 8 + A_PtrSize, "UPtr") 94 | FileOpen(DownloadFile, "w").RawWrite(pData, TotalSize) 95 | FileDownloaded:=1 96 | Break 97 | } 98 | } 99 | } 100 | 101 | if FileDownloaded { 102 | if A_IsCompiled { 103 | try FileDelete CurrentFile ".bak" 104 | FileMove CurrentFile, CurrentFile ".bak", 1 105 | FileMove DownloadFile, CurrentFile, 1 106 | } else { 107 | DirCopy DownloadFile, A_ScriptDir, 1 108 | DirCopy DownloadFolder, A_ScriptDir, 1 109 | try DirDelete DownloadFolder , 1 110 | try FileDelete DownloadFile 111 | } 112 | Reload 113 | } Else { 114 | try FileDelete DownloadFile 115 | DestroyDlg() 116 | Msg(GetLangText("Text_UpdateFailed"),GetLangText("Text_CheckUpdate"),"Icon!") 117 | } 118 | } 119 | } else if App.HasOwnProp("HwndMain") && App.HwndMain && g:=GuiFromHwnd(App.HwndMain) { 120 | g["VerCtrl"].ToolTipEx:=1 121 | g["VerCtrl"].Text:="v" App.Ver " -> v" NewVer 122 | g["VerCtrl"].SetFont("c" Themes.%App.ThemeSelected%.TextColorHover) 123 | } 124 | } else if g { 125 | g["VerCtrl"].DeleteProp("ToolTipEx") 126 | g2:=CreateDlg(g) 127 | SetPreventDestroyDlg(300) 128 | a:=g2.AddText("h22 xm0 Center w300", "~~~~~ " GetLangText("Text_CheckUpdate") " ~~~~~").SetFont("s" App.MainFontSize+1) 129 | a:=g2.AddText("xm0 yp50 w300 h50 Center", GetLangText("Text_NoUpdate")) 130 | BtnOK:=g2.AddButton("xm50 w100", GetLangText("Text_OK")) 131 | BtnOK.OnEvent("Click",(*)=>DestroyDlg()) 132 | SetCtrlTheme(BtnOK) 133 | BtnHomepage:=g2.AddButton("yp w100", GetLangText("Text_Homepage")) 134 | BtnHomepage.OnEvent("Click",(*)=>Run("https://github.com/tranht17/WinTune")) 135 | SetCtrlTheme(BtnHomepage) 136 | ShowDlg(g, g2, 1) 137 | } 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /Gui/HostsEdit.ahk: -------------------------------------------------------------------------------- 1 | BtnHostsEdit_Click(g, NavIndex) { 2 | Hosts:=LoadHostsFile() 3 | CurrentTabCtrls:=[ "HostsEdit" , 4 | "HostsEdit_BtnImportFromFile", 5 | "HostsEdit_EditLink", 6 | "HostsEdit_BtnImportFromLink", 7 | "HostsEdit_BtnSaveAs", 8 | "HostsEdit_BtnSave", 9 | "HostsEdit_TxtSelectLink", 10 | "HostsEdit_TreeViewSelectLink", 11 | "HostsEdit_BtnResetDefault", 12 | "HostsEdit_BtnReload"] 13 | try { 14 | g["HostsEdit"].Value:=Hosts 15 | g["HostsEdit_BtnSave"].Enabled:=False 16 | Loop CurrentTabCtrls.Length { 17 | g[CurrentTabCtrls[A_Index]].Visible:=True 18 | } 19 | } catch { 20 | g["BGPanel"].GetPos(&sXCBT, &sYCBT, &PanelW, &PanelH) 21 | HostsEdit:=g.AddEdit("h" PanelH-12 " w" PanelW-320-24 " -wrap x" sXCBT+6 " y" sYCBT+6 " vHostsEdit") 22 | HostsEdit.Value:=Hosts 23 | HostsEdit.OnEvent("Change",HostsEdit_Change) 24 | HostsEdit_Change(*) { 25 | g["HostsEdit_BtnSave"].Enabled:=True 26 | } 27 | 28 | HostListData:=[ 29 | {Author: "crazy-max", Source: "github.com/crazy-max/WindowsSpyBlocker", Items:[ 30 | {Name: "Windows spying and tracking IPv4", Link: "https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt"}, 31 | {Name: "Windows spying and tracking IPv6", Link: "https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy_v6.txt"}, 32 | {Name: "Windows update IPv4", Link: "https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/update.txt"}, 33 | {Name: "Windows update IPv6", Link: "https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/update_v6.txt"}, 34 | {Name: "Windows extra IPv4", Link: "https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/extra.txt"}, 35 | {Name: "Windows extra IPv6", Link: "https://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/extra_v6.txt"} 36 | ] 37 | }, 38 | {Author: "StevenBlack", Source: "github.com/StevenBlack/hosts", Items:[ 39 | {Name: "All block lists", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn-social/hosts"}, 40 | {Name: "Adware + Malware", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/hosts"}, 41 | {Name: "Adware + Malware + Fakenews", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews/hosts"}, 42 | {Name: "Fakenews Only", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-only/hosts"}, 43 | {Name: "Adware + Malware + Gambling", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling/hosts"}, 44 | {Name: "Gambling Only", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-only/hosts"}, 45 | {Name: "Adware + Malware + Porn", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/porn/hosts"}, 46 | {Name: "Porn Only", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/porn-only/hosts"}, 47 | {Name: "Adware + Malware + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/social/hosts"}, 48 | {Name: "Social Only", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/social-only/hosts"}, 49 | {Name: "Adware + Malware + Fakenews + Gambling", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling/hosts"}, 50 | {Name: "Fakenews + Gambling", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-only/hosts"}, 51 | {Name: "Adware + Malware + Fakenews + Porn", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-porn/hosts"}, 52 | {Name: "Fakenews + Porn", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-porn-only/hosts"}, 53 | {Name: "Adware + Malware + Fakenews + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-social/hosts"}, 54 | {Name: "Fakenews + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-social-only/hosts"}, 55 | {Name: "Adware + Malware + Gambling + Porn", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-porn/hosts"}, 56 | {Name: "Gambling + Porn", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-porn-only/hosts"}, 57 | {Name: "Adware + Malware + Gambling + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-social/hosts"}, 58 | {Name: "Gambling + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-social-only/hosts"}, 59 | {Name: "Adware + Malware + Porn + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/porn-social/hosts"}, 60 | {Name: "Porn + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/porn-social-only/hosts"}, 61 | {Name: "Adware + Malware + Fakenews + Gambling + Porn", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn/hosts"}, 62 | {Name: "Fakenews + Gambling + Porn", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn-only/hosts"}, 63 | {Name: "Adware + Malware + Fakenews + Gambling + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-social/hosts"}, 64 | {Name: "Fakenews + Gambling + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-social-only/hosts"}, 65 | {Name: "Adware + Malware + Fakenews + Porn + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-porn-social/hosts"}, 66 | {Name: "Fakenews + Porn + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-porn-social-only/hosts"}, 67 | {Name: "Adware + Malware + Gambling + Porn + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-porn-social/hosts"}, 68 | {Name: "Gambling + Porn + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/gambling-porn-social-only/hosts"}, 69 | {Name: "Fakenews + Gambling + Porn + Social", Link: "https://raw.githubusercontent.com/StevenBlack/hosts/master/alternates/fakenews-gambling-porn-social-only/hosts"}, 70 | ] 71 | } 72 | ] 73 | 74 | g.AddText("yp w320 Section vHostsEdit_TxtSelectLink") 75 | ImageListID := IL_Create(2) 76 | IL_Add(ImageListID, "shell32.dll", 4) 77 | IL_Add(ImageListID, "shell32.dll", 14) 78 | TV := g.AddTreeView("w320 h300 vHostsEdit_TreeViewSelectLink ImageList" ImageListID) 79 | TV.OnEvent("Click",TreeViewSelectLink_Click) 80 | TV.OnEvent("ItemExpand",TreeViewSelectLink_ItemExpand) 81 | ObjectF:={} 82 | Loop HostListData.Length { 83 | i:=A_Index 84 | P1:=TV.Add(HostListData[i].Source,,"Icon1") 85 | Items:=HostListData[i].Items 86 | Loop Items.Length { 87 | P1C1:=TV.Add(Items[A_Index].Name, P1,"Icon2") 88 | ObjectF.%P1C1%:={SourceID:i,ItemID:A_Index} 89 | } 90 | } 91 | TreeViewSelectLink_Click(GuiCtrlObj, Info) { 92 | sID:=TV.GetSelection() 93 | If ObjectF.HasOwnProp(sID) { 94 | SourceID:=ObjectF.%sID%.SourceID 95 | ItemID:=ObjectF.%sID%.ItemID 96 | EditLink.Value:=HostListData[SourceID].Items[ItemID].Link 97 | ControlSend "^{End}", EditLink 98 | g["HostsEdit_BtnImportFromLink"].Enabled:=True 99 | } 100 | } 101 | TreeViewSelectLink_ItemExpand(GuiCtrlObj, Item, Expanded) { 102 | GuiCtrlObj.Visible:=False 103 | GuiCtrlObj.Visible:=True 104 | } 105 | 106 | BtnImportFromLink := g.AddButton("xs Disabled vHostsEdit_BtnImportFromLink", "«") 107 | BtnImportFromLink.OnEvent("Click",(*)=>BtnImportFromLink_Click(g)) 108 | BtnImportFromLink_Click(g) { 109 | CreateWaitDlg(g) 110 | Try { 111 | spy:=WinHttpResponseText(g["HostsEdit_EditLink"].Value,,,, &Status, &StatusText) 112 | If Status==200 { 113 | g["HostsEdit"].Value.="`n" spy "`n" 114 | g["HostsEdit_EditLink"].Value:="" 115 | g["HostsEdit_BtnImportFromLink"].Enabled:=False 116 | g["HostsEdit_BtnSave"].Enabled:=True 117 | ControlSend "^{End}", g["HostsEdit"] 118 | } Else { 119 | Msg(StatusText,"Hosts Edit","Icon!") 120 | } 121 | } Catch as err { 122 | Msg(err.Message,"Hosts Edit","Icon!") 123 | } Finally { 124 | DestroyDlg() 125 | } 126 | } 127 | 128 | EditLink:=g.AddEdit("yp w290 -wrap vHostsEdit_EditLink") 129 | EditLink.OnEvent("Change",EditLink_Change) 130 | EditLink_Change(*) { 131 | g["HostsEdit_BtnImportFromLink"].Enabled:=!!EditLink.Value 132 | } 133 | 134 | BtnImportFromFile := g.AddButton("xs y+24 w140 h40 vHostsEdit_BtnImportFromFile") 135 | BtnImportFromFile.OnEvent("Click",BtnImportFromFile_Click) 136 | BtnImportFromFile_Click(*) { 137 | files := FileSelect("M3", A_WorkingDir, "Select block list to hosts file") 138 | Loop files.Length { 139 | Hosts:=FileRead(files[A_Index]) 140 | g["HostsEdit"].Value.="`n`n### " files[A_Index] "`n" Hosts 141 | ControlSend "^{End}", g["HostsEdit"] 142 | } 143 | If files.Length { 144 | g["HostsEdit_BtnSave"].Enabled:=True 145 | } 146 | } 147 | 148 | BtnSaveAs := g.AddButton("yp w140 h40 vHostsEdit_BtnSaveAs") 149 | BtnSaveAs.OnEvent("Click",BtnSaveAs_Click) 150 | BtnSaveAs_Click(*) { 151 | sfile := FileSelect("S16", "hosts_" A_Now, "Save As") 152 | If sfile { 153 | try FileDelete sfile 154 | FileAppend g["HostsEdit"].Value, sfile 155 | } 156 | } 157 | 158 | BtnReload := g.AddButton("xs w140 h40 vHostsEdit_BtnReload") 159 | BtnReload.OnEvent("Click",BtnReload_Click) 160 | BtnReload_Click(*) { 161 | g["HostsEdit"].Value:=LoadHostsFile() 162 | ControlSend "^{End}", g["HostsEdit"] 163 | g["HostsEdit_BtnSave"].Enabled:=False 164 | } 165 | 166 | BtnResetDefault := g.AddButton("yp w140 h40 vHostsEdit_BtnResetDefault") 167 | BtnResetDefault.OnEvent("Click",BtnResetDefault_Click) 168 | BtnResetDefault_Click(*) { 169 | g["HostsEdit"].Value:=' 170 | ( 171 | # Copyright (c) 1993-2009 Microsoft Corp. 172 | # 173 | # This is a sample HOSTS file used by Microsoft TCP/IP for Windows. 174 | # 175 | # This file contains the mappings of IP addresses to host names. Each 176 | # entry should be kept on an individual line. The IP address should 177 | # be placed in the first column followed by the corresponding host name. 178 | # The IP address and the host name should be separated by at least one 179 | # space. 180 | # 181 | # Additionally, comments (such as these) may be inserted on individual 182 | # lines or following the machine name denoted by a '#' symbol. 183 | # 184 | # For example: 185 | # 186 | # 102.54.94.97 rhino.acme.com # source server 187 | # 38.25.63.10 x.acme.com # x client host 188 | 189 | # localhost name resolution is handled within DNS itself. 190 | # 127.0.0.1 localhost 191 | # ::1 localhost 192 | )' 193 | ControlSend "^{End}", g["HostsEdit"] 194 | g["HostsEdit_BtnSave"].Enabled:=True 195 | } 196 | 197 | BtnSave := g.AddButton("Disabled xs w140 h60 vHostsEdit_BtnSave") 198 | BtnSave.OnEvent("Click",BtnSave_Click) 199 | BtnSave.SetFont("s" App.MainFontSize+2) 200 | 201 | BtnSave_Click(*) { 202 | SaveHostsFile(HostsEdit.Value) 203 | BtnSave.Enabled:=False 204 | } 205 | 206 | Loop CurrentTabCtrls.Length { 207 | SetCtrlTheme(g[CurrentTabCtrls[A_Index]]) 208 | } 209 | } 210 | 211 | If !App.TabLangLoaded.HasOwnProp(NavIndex) || !App.TabLangLoaded.%NavIndex% { 212 | Loop CurrentTabCtrls.Length { 213 | tCtrlID:=CurrentTabCtrls[A_Index] 214 | If tCtrlID!="HostsEdit_BtnImportFromLink" && (g[tCtrlID].Type="Button" || g[tCtrlID].Type="Text") 215 | g[tCtrlID].Text:=GetLangName(tCtrlID) 216 | } 217 | App.TabLangLoaded.%NavIndex%:=1 218 | } 219 | 220 | g["BtnSys_SaveOptimizeConfigTab"].Visible:=True 221 | CurrentTabCtrls.Push "BtnSys_SaveOptimizeConfigTab" 222 | 223 | App.CurrentTabCtrls:=CurrentTabCtrls 224 | } 225 | -------------------------------------------------------------------------------- /Gui/Language.ahk: -------------------------------------------------------------------------------- 1 | CreatePopupLang(Ctr, *) { 2 | g:=Ctr.Gui 3 | g2:=CreateDlg(g, 0) 4 | 5 | NavSelectW:=200, NavSelectH:=30 6 | 7 | g2.AddPic("Hidden vNavBGHover xm") 8 | g2.AddPic("vNavBGActive Hidden xm") 9 | pToken:=Gdip_Startup() 10 | CreateBGNavSelect(g2["NavBGHover"], g2["NavBGActive"], NavSelectW, NavSelectH ,6) 11 | 12 | SpaceName:=" " 13 | for k,v in LangData.OwnProps() { 14 | y:=(A_Index-1)*34 15 | hFlag:=Gdip_CreateARGBHBITMAPFromBase64(v.Flag) 16 | Flag:=g2.AddPic("BackgroundTrans h20 w20 xm8 ym" y+6, "HBITMAP:" hFlag) 17 | DeleteObject(hFlag) 18 | NavItem:=g2.AddText("BackgroundTrans 0x200 0x100 h" NavSelectH " w" NavSelectW " xm ym" y " vNavItem_" k, SpaceName v.Name) 19 | NavItem.OnEvent("Click", Lang_Code_Click) 20 | } 21 | Gdip_Shutdown(pToken) 22 | 23 | g2["NavItem_" App.LangSelected].GetPos(&xNavItem, &yNavItem) 24 | g2["NavBGActive"].Move(xNavItem, yNavItem) 25 | g2["NavBGActive"].Visible:=True 26 | 27 | Lang_Code_Click(Ctr, *) { 28 | LangClicked:=SubStr(Ctr.Name,9) 29 | If LangClicked=App.LangSelected { 30 | DestroyDlg(0) 31 | Return 32 | } 33 | App.LangSelected:=LangClicked 34 | App.TabLangLoaded:= {} 35 | SetNavLangAll(g) 36 | pToken:=Gdip_Startup() 37 | hFlag:=Gdip_CreateARGBHBITMAPFromBase64(LangData.%App.LangSelected%.Flag) 38 | g["BtnSys_Language"].Value:="HBITMAP:" hFlag 39 | DeleteObject(hFlag) 40 | Gdip_Shutdown(pToken) 41 | IniWrite LangClicked, "config.ini", "General", "Language" 42 | DestroyDlg(0) 43 | NavItem_Click(g) 44 | } 45 | ShowDlg(g, g2, 4, Ctr) 46 | If WinWaitNotActive(g2) 47 | DestroyDlg 48 | } -------------------------------------------------------------------------------- /Gui/PackageManager.ahk: -------------------------------------------------------------------------------- 1 | BtnPackageManager_Click(g, NavIndex) { 2 | static LVWidth 3 | CurrentTabCtrls:=[ "PackageManager_BtnDisable" , 4 | "PackageManager_BtnUninstallChecked", 5 | "PackageManager_BtnUninstall", 6 | "PackageManager_BtnSearchOnline", 7 | "PackageManager_BtnDetails", 8 | "PackageManager_Mode", 9 | "PackageManager_InstalledAllUsers", 10 | "PackageManager_DeprovisionPackage", 11 | "PackageManager_LV"] 12 | try { 13 | Loop CurrentTabCtrls.Length { 14 | If InStr(CurrentTabCtrls[A_Index], "PackageManager_Btn") 15 | g[CurrentTabCtrls[A_Index]].Enabled:=False 16 | g[CurrentTabCtrls[A_Index]].Visible:=True 17 | } 18 | } Catch { 19 | g["BGPanel"].GetPos(&sXCBT, &sYCBT, &PanelW, &PanelH) 20 | 21 | xTop:=sXCBT+8 22 | yTop:=sYCBT+8 23 | a:=g.AddDDL("vPackageManager_Mode w200 Section x" xTop " y" yTop) 24 | 25 | a.OnEvent("Change",SwichInstalled) 26 | 27 | b:=g.AddCheckbox("vPackageManager_InstalledAllUsers yp w150") 28 | b.OnEvent("Click",SwichInstalled) 29 | 30 | g.AddCheckbox("vPackageManager_DeprovisionPackage yp w200") 31 | 32 | g.SetFont("s11",App.IconFont) 33 | a:=g.AddButton("vPackageManager_BtnUninstallChecked w150 Disabled xs") 34 | a.OnEvent("Click",(*)=>PackageManager_FnRun(1)) 35 | 36 | a:=g.AddButton("vPackageManager_BtnUninstall yp w150 Disabled") 37 | a.OnEvent("Click",(*)=>PackageManager_FnRun(2)) 38 | 39 | a:=g.AddButton("vPackageManager_BtnDisable yp w146 Disabled") 40 | a.OnEvent("Click",(*)=>PackageManager_FnRun(3)) 41 | 42 | a:=g.AddButton("vPackageManager_BtnSearchOnline yp w160 Disabled") 43 | a.OnEvent("Click",(*)=>PackageManager_FnRun(4)) 44 | 45 | a:=g.AddButton("vPackageManager_BtnDetails yp w146 Disabled") 46 | a.OnEvent("Click",(*)=>PackageManager_FnRun(5)) 47 | 48 | g.SetFont("s" App.MainFontSize+1,App.MainFont) 49 | LVWidth:=PanelW-16 50 | LVPackageManager:=g.AddListView("vPackageManager_LV -Multi Sort Checked xs w" LVWidth " h" PanelH-66-16, ["","","","","","Id",""]) 51 | LVPackageManager.OnEvent("Click",LVPackageManager_Click) 52 | LVPackageManager.OnEvent("DoubleClick",LVPackageManager_DoubleClick) 53 | LVPackageManager.OnEvent("ContextMenu",LVPackageManager_ContextMenu) 54 | LVPackageManager.OnEvent("ItemCheck",LVPackageManager_ItemCheck) 55 | g.SetFont("s" App.MainFontSize,App.MainFont) 56 | Loop CurrentTabCtrls.Length { 57 | SetCtrlTheme(g[CurrentTabCtrls[A_Index]]) 58 | } 59 | } 60 | 61 | If !App.TabLangLoaded.HasOwnProp(NavIndex) || !App.TabLangLoaded.%NavIndex% { 62 | LVPackageManager:=g["PackageManager_LV"] 63 | 64 | g["PackageManager_Mode"].Delete() 65 | g["PackageManager_Mode"].Add([GetLangText("Text_InstalledMode"),GetLangText("Text_NotInstalledMode")]) 66 | g["PackageManager_Mode"].Choose(1) 67 | g["PackageManager_Mode"].Opt("Redraw") 68 | 69 | 70 | g["PackageManager_BtnUninstallChecked"].Text:=GetLangTextWithIcon("Text_Uninstall") " (0)" 71 | g["PackageManager_InstalledAllUsers"].Text:=GetLangName("PackageManager_InstalledAllUsers") 72 | g["PackageManager_DeprovisionPackage"].Text:=GetLangName("PackageManager_DeprovisionPackage") 73 | 74 | m:=Map("PackageManager_BtnUninstall", "Text_Uninstall" , 75 | "PackageManager_BtnDisable", "Text_Disable" , 76 | "PackageManager_BtnDetails", "Text_Details" , 77 | "PackageManager_BtnSearchOnline", "Text_SearchOnline") 78 | For k, v in m { 79 | g[k].Text:=GetLangTextWithIcon(v) 80 | } 81 | 82 | LVPackageManager.ModifyCol(1, , GetLangText("Text_Name")) 83 | LVPackageManager.ModifyCol(2, , GetLangText("Text_Status")) 84 | LVPackageManager.ModifyCol(3, , GetLangText("Text_Version")) 85 | LVPackageManager.ModifyCol(4, , GetLangText("Text_Architecture")) 86 | LVPackageManager.ModifyCol(5, , GetLangText("Text_PublisherDisplayName")) 87 | LVPackageManager.ModifyCol(7, , GetLangText("Text_FamilyName")) 88 | 89 | App.TabLangLoaded.%NavIndex%:=1 90 | } 91 | 92 | LoadLV() 93 | App.CurrentTabCtrls:=CurrentTabCtrls 94 | 95 | LoadLV(*) { 96 | g["BtnSys_SaveOptimizeConfigTab"].Visible:=False 97 | 98 | LVPackageManager:=g["PackageManager_LV"] 99 | LVPackageManager.ModifyCol(1, 38/100*LVWidth) 100 | LVPackageManager.ModifyCol(2, 12/100*LVWidth) 101 | LVPackageManager.ModifyCol(3, 17/100*LVWidth) 102 | LVPackageManager.ModifyCol(4, 10/100*LVWidth) 103 | LVPackageManager.ModifyCol(5, 23/100*LVWidth-2) 104 | LVPackageManager.ModifyCol(6, 0) 105 | LVPackageManager.ModifyCol(7, 0) 106 | 107 | ImageListID := IL_Create(20) 108 | LVPackageManager.SetImageList(ImageListID) 109 | 110 | LVPackageManager.Delete() 111 | IsAllUsers:=g["PackageManager_InstalledAllUsers"].Value 112 | Mode:=g["PackageManager_Mode"].Value 113 | rList:=PackageManager.FindPackages(IsAllUsers?"All":App.UserSID) 114 | PackagesList(rList) 115 | Loop rList.Length { 116 | If (Mode==1 && PackageManager.CheckInstallUser(rList[A_Index].FullName, App.UserSID) 117 | && !RegKeyExist("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Appx\AppxAllUserStore\EndOfLife\" App.UserSID "\" rList[A_Index].FullName)) 118 | || (Mode==2 && (PackageManager.CheckInstallUser(rList[A_Index].FullName, "S-1-5-18", 1) 119 | || !PackageManager.CheckInstallUser(rList[A_Index].FullName, App.UserSID))) { 120 | Try { 121 | IconIndex := IL_Add(ImageListID, rList[A_Index].Logo, 1) 122 | aDisplay:=DisplayArchitecture(rList[A_Index].Architecture) 123 | sDisplay:=DisplayStatus(rList[A_Index]) 124 | LVPackageManager.Add("Icon" IconIndex, rList[A_Index].DisplayName, sDisplay, rList[A_Index].Version, aDisplay, rList[A_Index].PublisherDisplayName, A_Index, rList[A_Index].FamilyName) 125 | } Catch Error as err { 126 | Debug(err, "FullName :" rList[A_Index].FullName) 127 | } 128 | } 129 | } 130 | } 131 | SwichInstalled(Ctr, *) { 132 | If Ctr.Name="PackageManager_Mode" { 133 | If Ctr.Value==1 { 134 | g["PackageManager_InstalledAllUsers"].Value:=0 135 | g["PackageManager_InstalledAllUsers"].Enabled:=1 136 | } Else If Ctr.Value==2 { 137 | g["PackageManager_InstalledAllUsers"].Value:=1 138 | g["PackageManager_InstalledAllUsers"].Enabled:=0 139 | } 140 | } 141 | g["PackageManager_BtnUninstallChecked"].Text:=GetLangTextWithIcon("Text_Uninstall") " (0)" 142 | g["PackageManager_BtnUninstallChecked"].Enabled:=False 143 | SwichAllBtn(0) 144 | LoadLV() 145 | } 146 | LVPackageManager_ItemCheck(GuiCtrlObj, Item, Checked) { 147 | Reload_BtnCountChecked() 148 | } 149 | LVPackageManager_Click(GuiCtrlObj, Item) { 150 | If Item { 151 | LVPackageManager.Modify(Item, "Select") 152 | id := LVPackageManager.GetText(Item,6) 153 | aList:=PackagesList() 154 | If aList[id].Disabled { 155 | bStatusText:=GetLangTextWithIcon("Text_Enable") 156 | } Else { 157 | bStatusText:=GetLangTextWithIcon("Text_Disable") 158 | } 159 | g["PackageManager_BtnDisable"].Text:=bStatusText 160 | } 161 | SwichAllBtn(!!Item) 162 | } 163 | LVPackageManager_DoubleClick(GuiCtrlObj, Item) { 164 | If Item { 165 | CreateDetailDlg(Item) 166 | } 167 | } 168 | LVPackageManager_ContextMenu(GuiCtrlObj, Item, IsRightClick, X, Y) { 169 | iSelected:=g["PackageManager_LV"].GetNext() 170 | If iSelected { 171 | MyMenu := Menu() 172 | 173 | iCount:=LVCheckedCount() 174 | MyMenu.Add(GetLangText("Text_Uninstall") " (" iCount ")", RunItem) 175 | If !iCount 176 | MyMenu.Disable("1&") 177 | 178 | MyMenu.Add(GetLangText("Text_Uninstall"), RunItem) 179 | 180 | id := LVPackageManager.GetText(iSelected,6) 181 | aList:=PackagesList() 182 | If aList[id].Disabled { 183 | iStatusText:="Text_Enable" 184 | } Else { 185 | iStatusText:="Text_Disable" 186 | } 187 | g["PackageManager_BtnDisable"].Text:=GetLangTextWithIcon(iStatusText) 188 | 189 | MyMenu.Add(GetLangText(iStatusText), RunItem) 190 | MyMenu.Add(GetLangText("Text_SearchOnline"), RunItem) 191 | MyMenu.Add(GetLangText("Text_Details"), RunItem) 192 | MyMenu.Add(GetLangText("Text_SelectAll"), (*)=> LVPackageManager.Modify(0, "Check") Reload_BtnCountChecked()) 193 | MyMenu.Add(GetLangText("Text_DeselectAll"), (*)=> LVPackageManager.Modify(0, "-Check") Reload_BtnCountChecked()) 194 | 195 | Mode:=g["PackageManager_Mode"].Value 196 | If Mode=2 && App.User=A_Username { 197 | MyMenu.Add(GetLangText("Text_Install") " (" iCount ")", RunItem) 198 | If !iCount 199 | MyMenu.Disable("8&") 200 | MyMenu.Add(GetLangText("Text_Install"), RunItem) 201 | } 202 | MyMenu.Show 203 | 204 | RunItem(ItemName, ItemPos, MyMenu) { 205 | PackageManager_FnRun(ItemPos) 206 | } 207 | } 208 | SwichAllBtn(!!iSelected) 209 | } 210 | PackageManager_FnRun(ItemPos) { 211 | LVPackageManager:=g["PackageManager_LV"] 212 | iSelected:=LVPackageManager.GetNext() 213 | id := LVPackageManager.GetText(iSelected,6) 214 | aList:=PackagesList() 215 | If ItemPos=1 { 216 | g2:=CreateWaitDlg(g) 217 | IsAllUsers:=g["PackageManager_InstalledAllUsers"].Value 218 | RowNumber := 0 219 | t:="" 220 | Loop { 221 | RowNumber := LVPackageManager.GetNext(RowNumber,"c") 222 | if not RowNumber 223 | break 224 | cid := LVPackageManager.GetText(RowNumber,6) 225 | r:=UninstallPackage(aList[cid], IsAllUsers, g["PackageManager_DeprovisionPackage"].Value) 226 | If r { 227 | LVPackageManager.Delete(RowNumber) 228 | RowNumber-- 229 | Reload_BtnCountChecked() 230 | } 231 | } 232 | SwichAllBtn(0) 233 | DestroyDlg() 234 | } Else If ItemPos=2 { 235 | g2:=CreateWaitDlg(g) 236 | IsAllUsers:=g["PackageManager_InstalledAllUsers"].Value 237 | r:=UninstallPackage(aList[id], IsAllUsers, g["PackageManager_DeprovisionPackage"].Value) 238 | If r { 239 | LVPackageManager.Delete(iSelected) 240 | Reload_BtnCountChecked() 241 | } 242 | SwichAllBtn(0) 243 | DestroyDlg() 244 | } Else If ItemPos=3 { 245 | iDisabled:=aList[id].Disabled 246 | If iDisabled { 247 | PackageManager.ClearPackageStatus(aList[id].FullName, 8) 248 | iStatusText:="Text_Enabled" 249 | bStatusText:="Text_Disable" 250 | } Else { 251 | PackageManager.SetPackageStatus(aList[id].FullName, 8) 252 | iStatusText:="Text_Disabled" 253 | bStatusText:="Text_Enable" 254 | } 255 | LVPackageManager.Modify(iSelected, , , GetLangText(iStatusText)) 256 | g["PackageManager_BtnDisable"].Text:=GetLangTextWithIcon(bStatusText) 257 | } Else If ItemPos=4 { 258 | If aList[id].SignatureKind=3 259 | runAsParam:="https://apps.microsoft.com/search?query=" aList[id].DisplayName 260 | Else 261 | runAsParam:="https://www.google.com/search?q=" aList[id].DisplayName 262 | try Run(runAsParam) 263 | } Else If ItemPos=5 { 264 | CreateDetailDlg(iSelected) 265 | } Else If ItemPos=8 { 266 | g2:=CreateWaitDlg(g) 267 | IsAllUsers:=g["PackageManager_InstalledAllUsers"].Value 268 | RowNumber := 0 269 | t:="" 270 | Loop { 271 | RowNumber := LVPackageManager.GetNext(RowNumber,"c") 272 | if not RowNumber 273 | break 274 | cid := LVPackageManager.GetText(RowNumber,6) 275 | 276 | If PackageManager.RegisterPackageByFullName(aList[cid].FullName)=1 { 277 | LVPackageManager.Delete(RowNumber) 278 | RowNumber-- 279 | Reload_BtnCountChecked() 280 | } 281 | } 282 | SwichAllBtn(0) 283 | DestroyDlg() 284 | } Else If ItemPos=9 { 285 | g2:=CreateWaitDlg(g) 286 | If PackageManager.RegisterPackageByFullName(aList[id].FullName)=1 { 287 | LVPackageManager.Delete(iSelected) 288 | Reload_BtnCountChecked() 289 | } 290 | SwichAllBtn(0) 291 | DestroyDlg() 292 | } 293 | } 294 | Reload_BtnCountChecked() { 295 | iCount:=LVCheckedCount() 296 | g["PackageManager_BtnUninstallChecked"].Text:=GetLangTextWithIcon("Text_Uninstall") " (" iCount ")" 297 | g["PackageManager_BtnUninstallChecked"].Enabled:=!!iCount 298 | g["BtnSys_SaveOptimizeConfigTab"].Visible:=!!iCount 299 | } 300 | LVCheckedCount() { 301 | iCount:=0 302 | RowNumber := 0 303 | Loop { 304 | RowNumber := g["PackageManager_LV"].GetNext(RowNumber, "C") 305 | if not RowNumber 306 | break 307 | iCount++ 308 | } 309 | Return iCount 310 | } 311 | SwichAllBtn(s) { 312 | g["PackageManager_BtnUninstall"].Enabled:=s 313 | g["PackageManager_BtnDisable"].Enabled:=s 314 | g["PackageManager_BtnSearchOnline"].Enabled:=s 315 | g["PackageManager_BtnDetails"].Enabled:=s 316 | } 317 | CreateDetailDlg(Item) { 318 | g2:=CreateDlg(g) 319 | a:=g2.AddText("w500 h22 xm0 Center", "~~~~~ " GetLangText("Text_Details") " ~~~~~").SetFont("s" App.MainFontSize+2) 320 | aShowList:=["DisplayName" 321 | , "FamilyName" 322 | , "FullName" 323 | , "PublisherDisplayName" 324 | , "InstalledDate" 325 | , "Architecture" 326 | , "Version" 327 | , "SignatureKind" 328 | , "Status" 329 | , "InstalledPath" 330 | ; , "MutablePath" 331 | , "EffectivePath" 332 | ; , "Logo" 333 | ; , "EffectiveExternalPath" 334 | ; , "MachineExternalPath" 335 | ; , "UserExternalPath" 336 | ] 337 | id := LVPackageManager.GetText(Item,6) 338 | aList:=PackagesList() 339 | g2.SetFont("s" App.MainFontSize+1) 340 | Loop aShowList.Length { 341 | tID:=aShowList[A_Index] 342 | a:=g2.AddText("w100 h16 xm0", GetLangText("Text_" tID)) 343 | If tID="Status" 344 | s:=DisplayStatus(aList[id]) 345 | Else If tID="Architecture" || tID="SignatureKind" 346 | s:=Display%tID%(aList[id].%tID%) 347 | Else If tID="InstalledDate" { 348 | try s:=FormatTime(aList[id].%tID%, "ShortDate") 349 | } Else 350 | s:=aList[id].%tID% 351 | b:=g2.AddEdit("-vscroll -E0x200 ReadOnly w400 yp Background" Themes.%App.ThemeSelected%.BackColor, s) 352 | } 353 | btn_OK:=g2.AddButton("xm200 w100", GetLangText("Text_OK")) 354 | btn_OK.OnEvent("Click",(*)=>DestroyDlg()) 355 | SetCtrlTheme(btn_OK) 356 | btn_OK.Focus() 357 | ShowDlg(g, g2, 3) 358 | } 359 | PackagesList(iArray?) { 360 | Static pl:=Array() 361 | If IsSet(iArray) 362 | pl:=iArray 363 | Return pl 364 | } 365 | DisplayStatus(item) { 366 | s:="" 367 | If item.VerifyIsOK { 368 | s:=GetLangText("Text_Enabled") 369 | } Else If item.Disabled { 370 | s:=GetLangText("Text_Disabled") 371 | } 372 | Return s 373 | } 374 | DisplayArchitecture(ArchitectureID) { 375 | Return (ArchitectureID=9)?"x64":(ArchitectureID=11)?"Neutral":(ArchitectureID=0)?"x86":ArchitectureID 376 | } 377 | DisplaySignatureKind(SignatureKindID) { 378 | Return (SignatureKindID=0)?"None":(SignatureKindID=1)?"Developer":(SignatureKindID=2)?"Enterprise":(SignatureKindID=3)?"Store":(SignatureKindID=4)?"System":SignatureKindID 379 | } 380 | } 381 | CreatePackageManagerPreSaveDlg(g) { 382 | g2:=CreateDlg(g) 383 | tWidth:=400 384 | g2.AddText("w" tWidth " h22 xm0 Center", "~~~~~ Pre-Save" " ~~~~~").SetFont("s" App.MainFontSize+2) 385 | PreSaveAct:=g2.AddDDL("w200 Choose1", ["Uninstall", "Disable", "Deprovision"]) 386 | SetCtrlTheme(PreSaveAct) 387 | PreSaveAct.OnEvent("Change", PreSaveAct_Change) 388 | PreSaveAct_Change(GuiCtrlObj, Info) { 389 | CB_InstalledAllUsers.Enabled:=(GuiCtrlObj.Value==1) 390 | CB_DeprovisionPackage.Enabled:=(GuiCtrlObj.Value!=3) 391 | } 392 | CB_InstalledAllUsers:=g2.AddCheckbox("w100 y+20 Checked" g["PackageManager_InstalledAllUsers"].Value, GetLangText("Text_InstalledAllUsers")) 393 | CB_DeprovisionPackage:=g2.AddCheckbox("yp w200 Checked" g["PackageManager_DeprovisionPackage"].Value, GetLangText("Text_DeprovisionPackage")) 394 | g2.AddText("w200 xm0 y+20", "FamilyName list:") 395 | Edit_PreSave:=g2.AddEdit("w" tWidth " r10 -Wrap") 396 | SetCtrlTheme(Edit_PreSave) 397 | LVPackageManager:=g["PackageManager_LV"] 398 | RowNumber := 0 399 | Loop { 400 | RowNumber := LVPackageManager.GetNext(RowNumber,"c") 401 | if not RowNumber 402 | break 403 | Edit_PreSave.Value.= LVPackageManager.GetText(RowNumber,7) '`n' 404 | } 405 | 406 | btn_Save:=g2.AddButton("xm96 w100", GetLangText("Text_Save")) 407 | btn_Save.OnEvent("Click",Save_Click) 408 | SetCtrlTheme(btn_Save) 409 | Save_Click(*) { 410 | g2.Opt("+OwnDialogs") 411 | SelectedFile := FileSelect("S16", App.Name "_OptimizeTabConfig_" A_Now ".json", "Save a file") 412 | If SelectedFile { 413 | Config:={} 414 | ObjPackageManager:={} 415 | ObjPackageManager.Act:=PreSaveAct.Text 416 | If CB_InstalledAllUsers.Enabled && CB_InstalledAllUsers.Value 417 | ObjPackageManager.AllUsers:=1 418 | If CB_DeprovisionPackage.Enabled && CB_DeprovisionPackage.Value 419 | ObjPackageManager.Deprovision:=1 420 | Items:=Array() 421 | Loop Parse, Edit_PreSave.Value, "`n" { 422 | t:=Trim(A_LoopField) 423 | If t 424 | Items.Push t 425 | } 426 | ObjPackageManager.FamilyNames := Items 427 | Config.PackageManager:=[ObjPackageManager] 428 | try 429 | FileDelete SelectedFile 430 | FileAppend JSON.stringify(Config), SelectedFile 431 | DestroyDlg() 432 | } 433 | g2.Opt("-OwnDialogs") 434 | } 435 | btn_Cancel:=g2.AddButton("yp w100", GetLangText("Text_Cancel")) 436 | btn_Cancel.OnEvent("Click",(*)=>DestroyDlg()) 437 | SetCtrlTheme(btn_Cancel) 438 | 439 | g.GetPos(&X, &Y, &W, &H) 440 | g["BGPanel"].GetPos(&sXCBT, &sYCBT, &PanelW, &PanelH) 441 | g2.Show("x" X+sXCBT+(PanelW-tWidth)/2-12 " y" Y+130) 442 | } -------------------------------------------------------------------------------- /Gui/StartupManager.ahk: -------------------------------------------------------------------------------- 1 | BtnStartupManager_Click(g, NavIndex) { 2 | static LVWidth 3 | CurrentTabCtrls:=[ "StartupManager_BtnDisable" , 4 | "StartupManager_BtnDelete", 5 | "StartupManager_BtnOpenTarget", 6 | "StartupManager_BtnFindRegistry", 7 | "StartupManager_BtnSearchOnline", 8 | "StartupManager_LV"] 9 | try { 10 | Loop CurrentTabCtrls.Length { 11 | If CurrentTabCtrls[A_Index]!="StartupManager_LV" 12 | g[CurrentTabCtrls[A_Index]].Enabled:=False 13 | g[CurrentTabCtrls[A_Index]].Visible:=True 14 | } 15 | } Catch { 16 | g["BGPanel"].GetPos(&sXCBT, &sYCBT, &PanelW, &PanelH) 17 | 18 | g.SetFont("s11",App.IconFont) 19 | a:=g.AddButton("vStartupManager_BtnDisable w130 Disabled x" sXCBT+6 " y" sYCBT+6) 20 | a.OnEvent("Click",(*)=>StartupManager_FnRun(1)) 21 | 22 | a:=g.AddButton("vStartupManager_BtnDelete yp w130 Disabled") 23 | a.OnEvent("Click",(*)=>StartupManager_FnRun(6)) 24 | 25 | a:=g.AddButton("vStartupManager_BtnOpenTarget yp w190 Disabled") 26 | a.OnEvent("Click",(*)=>StartupManager_FnRun(3)) 27 | 28 | a:=g.AddButton("vStartupManager_BtnFindRegistry yp w160 Disabled") 29 | a.OnEvent("Click",(*)=>StartupManager_FnRun(4)) 30 | 31 | a:=g.AddButton("vStartupManager_BtnSearchOnline yp w145 Disabled") 32 | a.OnEvent("Click",(*)=>StartupManager_FnRun(5)) 33 | LVWidth:=PanelW-12 34 | g.SetFont("s" App.MainFontSize+1,App.MainFont) 35 | LVStartupManager:=g.AddListView("vStartupManager_LV -Multi w" LVWidth " h" PanelH-46 " x" sXCBT+6 " y" sYCBT+40, ["","","","","Type","StatusId"]) 36 | LVStartupManager.OnEvent("Click",LVStartupManager_Click) 37 | LVStartupManager.OnEvent("ContextMenu",LVStartupManager_ContextMenu) 38 | g.SetFont("s" App.MainFontSize,App.MainFont) 39 | Loop CurrentTabCtrls.Length { 40 | SetCtrlTheme(g[CurrentTabCtrls[A_Index]]) 41 | } 42 | } 43 | LVStartupManager:=g["StartupManager_LV"] 44 | 45 | If !App.TabLangLoaded.HasOwnProp(NavIndex) || !App.TabLangLoaded.%NavIndex% { 46 | m:=Map("StartupManager_BtnDisable", "Text_Disable" , 47 | "StartupManager_BtnDelete", "Text_Delete" , 48 | "StartupManager_BtnOpenTarget", "Text_OpenTarget" , 49 | "StartupManager_BtnFindRegistry", "Text_FindRegistry" , 50 | "StartupManager_BtnSearchOnline", "Text_SearchOnline" 51 | ) 52 | For k, v in m { 53 | g[k].Text:=GetLangTextWithIcon(v) 54 | } 55 | 56 | LVStartupManager.ModifyCol(1, , GetLangText("Text_Name")) 57 | LVStartupManager.ModifyCol(2, , GetLangText("Text_Status")) 58 | LVStartupManager.ModifyCol(3, , GetLangText("Text_CommandLine")) 59 | LVStartupManager.ModifyCol(4, , GetLangText("Text_Target")) 60 | ; LVStartupManager.ModifyCol(5, , GetLangText("Text_Type")) 61 | 62 | App.TabLangLoaded.%NavIndex%:=1 63 | } 64 | 65 | ImageListID := IL_Create(20) 66 | LVStartupManager.SetImageList(ImageListID) 67 | IL_Add(ImageListID, "imageres.dll", 3) 68 | IL_Add(ImageListID, "imageres.dll", 12) 69 | IL_Add(ImageListID, "imageres.dll", 4) 70 | 71 | LVStartupManager.ModifyCol(1, 28/100*LVWidth) 72 | LVStartupManager.ModifyCol(2, 12/100*LVWidth) 73 | LVStartupManager.ModifyCol(3, 60/100*LVWidth-2) 74 | LVStartupManager.ModifyCol(4, 0) 75 | LVStartupManager.ModifyCol(5, 0) 76 | LVStartupManager.ModifyCol(6, 0) 77 | 78 | LVStartupManager.Delete() 79 | 80 | StartupType:=[ 81 | {Type: "Registry", LongType: "Registry_HKCU_Run", RunKey: App.HKCU "\Software\Microsoft\Windows\CurrentVersion\Run", StartupApprovedKey: App.HKCU "\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run"}, 82 | {Type: "Registry", LongType: "Registry_HKCU_RunOnce", RunKey: App.HKCU "\Software\Microsoft\Windows\CurrentVersion\RunOnce"}, 83 | {Type: "Registry", LongType: "Registry_HKCU_RunPolicies", RunKey: App.HKCU "\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"}, 84 | {Type: "Registry", LongType: "Registry_HKLM_Run", RunKey: "HKLM\Software\Microsoft\Windows\CurrentVersion\Run", StartupApprovedKey: "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run"}, 85 | {Type: "Registry", LongType: "Registry_HKLM_Run32", RunKey: "HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run", StartupApprovedKey: "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\Run32"}, 86 | {Type: "Registry", LongType: "Registry_HKLM_RunOnce", RunKey: "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce"}, 87 | {Type: "Registry", LongType: "Registry_HKLM_RunOnce32", RunKey: "HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce"}, 88 | {Type: "Registry", LongType: "Registry_HKLM_RunPolicies", RunKey: "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run"}, 89 | {Type: "Folder", LongType: "Folder_Startup", RunKey: EnvGet2("Startup"), StartupApprovedKey: App.HKCU "\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\StartupFolder"}, 90 | {Type: "Folder", LongType: "Folder_StartupCommon", RunKey: A_StartupCommon, StartupApprovedKey: "HKLM\Software\Microsoft\Windows\CurrentVersion\Explorer\StartupApproved\StartupFolder"}, 91 | {Type: "UWPApp", LongType: "Registry_HKCU_Run", FamilyName: "Microsoft.549981C3F5F10_8wekyb3d8bbwe", RunKey: "CortanaStartupId", CheckStartTerminalOnLoginTask: 1}, 92 | {Type: "UWPApp", LongType: "Registry_HKCU_Run", FamilyName: "Microsoft.WindowsTerminal_8wekyb3d8bbwe", RunKey: "StartTerminalOnLoginTask"} 93 | ] 94 | 95 | Loop StartupType.Length { 96 | iType:=StartupType[A_Index].Type 97 | %iType%Load(LVStartupManager, A_Index, StartupType[A_Index]) 98 | } 99 | 100 | App.CurrentTabCtrls:=CurrentTabCtrls 101 | 102 | FolderLoad(LV, sId, sItem) { 103 | sPath:=sItem.RunKey 104 | StartupApprovedKey:=sItem.StartupApprovedKey 105 | Loop Files, sPath "\*.*" { 106 | If A_LoopFileName="desktop.ini" 107 | Continue 108 | If A_LoopFileExt="LNK" { 109 | FileGetShortcut A_LoopFilePath, &rTarget, &OutDir, &rArgs, &OutDesc, &rIcon, &rIconNum, &OutRunState 110 | rCommandLine:=rTarget " " rArgs 111 | IconIndex := IL_Add(ImageListID, rIcon?rIcon:rTarget, rIconNum?rIconNum:1) 112 | IconIndex := IconIndex?IconIndex:2 113 | } Else { 114 | rTarget:=A_LoopFilePath 115 | rCommandLine:=A_LoopFilePath 116 | IconIndex:=1 117 | If InStr(FileExist(rTarget), "D") 118 | IconIndex := 3 119 | Else { 120 | IconIndex := IL_Add(ImageListID, rTarget, 1) 121 | IconIndex := IconIndex?IconIndex:2 122 | } 123 | } 124 | HexReg:=RegRead(StartupApprovedKey, A_LoopFileName, "") 125 | ItemStatus:="" 126 | If HexReg 127 | ItemStatus:=SubStr(HexReg, 1, 2)+0 128 | ItemStatusText:="" 129 | If ItemStatus && Mod(ItemStatus, 2) 130 | ItemStatusText:=GetLangText("Text_Disabled") 131 | Else 132 | ItemStatusText:=GetLangText("Text_Enabled") 133 | LV.Add("Icon" IconIndex, A_LoopFileName, ItemStatusText, rCommandLine, rTarget, sId, ItemStatus) 134 | } 135 | } 136 | RegistryLoad(LV, sId, sItem) { 137 | RunKey:=sItem.RunKey 138 | Loop Reg, RunKey { 139 | v:=RegRead() 140 | ItemStatus:="" 141 | ItemStatusText:=GetLangText("Text_Enabled") 142 | If sItem.HasOwnProp("StartupApprovedKey") && sItem.StartupApprovedKey { 143 | StartupApprovedKey:=sItem.StartupApprovedKey 144 | HexReg:=RegRead(StartupApprovedKey, A_LoopRegName, "") 145 | If HexReg 146 | ItemStatus:=SubStr(HexReg, 1, 2)+0 147 | Else 148 | ItemStatus:=2 149 | If Mod(ItemStatus, 2) 150 | ItemStatusText:=GetLangText("Text_Disabled") 151 | } 152 | try { 153 | rTarget:=FindTarget(v, &attr:="") 154 | } catch Error as err { 155 | Debug(err,"CommandLine: " v) 156 | } 157 | 158 | IconIndex:=1 159 | If attr="D" 160 | IconIndex := 3 161 | Else If attr="AE" { 162 | IconIndex := IL_Add(ImageListID, rTarget, 1) 163 | IconIndex := IconIndex?IconIndex:2 164 | } 165 | LV.Add("Icon" IconIndex, A_LoopRegName, ItemStatusText, v, rTarget, sId, ItemStatus) 166 | } 167 | } 168 | 169 | UWPAppLoad(LV, sId, sItem) { 170 | Packages:=PackageManager.FindPackagesByPackageFamilyName(sItem.FamilyName) 171 | If !Packages.Length 172 | Return 173 | 174 | RunKey:=App.HKCU "\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\" sItem.FamilyName "\" sItem.RunKey 175 | State:=RegRead(RunKey, "State", 0) 176 | 177 | If sItem.HasOwnProp("CheckStartTerminalOnLoginTask") && sItem.CheckStartTerminalOnLoginTask { 178 | If !RegRead(RunKey, "UserEnabledStartupOnce", 0) 179 | State:=1 180 | } 181 | 182 | ItemStatusText:=GetLangText("Text_Disabled") 183 | If State==2 184 | ItemStatusText:=GetLangText("Text_Enabled") 185 | 186 | IconIndex := IL_Add(ImageListID, Packages[1].Logo) 187 | LV.Add("Icon" IconIndex, Packages[1].DisplayName, ItemStatusText, , , sId, State) 188 | } 189 | 190 | FindTarget(InPath, &rFileAttr) { 191 | If !InPath 192 | Return 193 | StartPos:=1 194 | tmpTarget:="" 195 | while (fpo:=RegexMatch(InPath, '[^" ]+|"([^"]*)"', &m, StartPos)) { 196 | if A_Index!=1 197 | tmpTarget.=' ' 198 | tmpTarget.=m[1]?m[1]:m[] 199 | If InStr(tmpTarget, "%") 200 | tmpTarget:=ExpandEnvironmentStrings(tmpTarget) 201 | If InStr(FileExist(tmpTarget), "D") { 202 | rFileAttr:="D" 203 | Return tmpTarget 204 | } Else If InStr(FileExist(tmpTarget), "A") || InStr(FileExist(tmpTarget), "N") { 205 | SplitPath tmpTarget, &rFileName 206 | rFileAttr:="A" 207 | If SubStr(rFileName, -4)=".exe" 208 | rFileAttr.="E" 209 | Return tmpTarget 210 | } 211 | StartPos := fpo + StrLen(m[]) 212 | } 213 | } 214 | LVStartupManager_Click(GuiCtrlObj, Item) { 215 | If Item { 216 | iTarget:=GuiCtrlObj.GetText(Item , 4) 217 | iType:=StartupType[GuiCtrlObj.GetText(Item , 5)].Type 218 | g["StartupManager_BtnOpenTarget"].Enabled:=!!iTarget 219 | g["StartupManager_BtnFindRegistry"].Enabled:=(iType=="Registry") 220 | g["StartupManager_BtnSearchOnline"].Enabled:=True 221 | 222 | IsUWPApp:=(iType=="UWPApp") 223 | 224 | iStatus:=GuiCtrlObj.GetText(Item , 6) 225 | 226 | If (IsUWPApp && iStatus!=2) || (!IsUWPApp && iStatus && Mod(iStatus, 2)) { 227 | bStatusText:="Text_Enable" 228 | } Else 229 | bStatusText:="Text_Disable" 230 | 231 | g["StartupManager_BtnDisable"].Text:=GetLangTextWithIcon(bStatusText) 232 | 233 | If IsUWPApp 234 | g["StartupManager_BtnDisable"].Enabled:=True 235 | Else 236 | g["StartupManager_BtnDisable"].Enabled:=!!iStatus 237 | 238 | g["StartupManager_BtnDelete"].Enabled:=!IsUWPApp 239 | } Else { 240 | DisableAllBtn() 241 | } 242 | } 243 | LVStartupManager_ContextMenu(GuiCtrlObj, Item, IsRightClick, X, Y) { 244 | If Item<=255 245 | DisableAllBtn() 246 | If Item<=0 || Item>255 247 | Return 248 | 249 | MyMenu := Menu() 250 | iType:=StartupType[GuiCtrlObj.GetText(Item , 5)].Type 251 | IsUWPApp:=(iType=="UWPApp") 252 | iStatus:=GuiCtrlObj.GetText(Item , 6) 253 | bStatusText:="" 254 | If (IsUWPApp && iStatus!=2) || (!IsUWPApp && iStatus && Mod(iStatus, 2)) { 255 | bStatusText:="Text_Enable" 256 | } Else 257 | bStatusText:="Text_Disable" 258 | g["StartupManager_BtnDisable"].Text:=GetLangTextWithIcon(bStatusText) 259 | If IsUWPApp 260 | g["StartupManager_BtnDisable"].Enabled:=True 261 | Else 262 | g["StartupManager_BtnDisable"].Enabled:=!!iStatus 263 | 264 | MyMenu.Add(GetLangText(bStatusText), RunItem) 265 | MyMenu.Add(GetLangText("Text_Properties"), RunItem) 266 | MyMenu.Add(GetLangText("Text_OpenTarget"), RunItem) 267 | MyMenu.Add(GetLangText("Text_FindRegistry"), RunItem) 268 | MyMenu.Add(GetLangText("Text_SearchOnline"), RunItem) 269 | MyMenu.Add(GetLangText("Text_Delete"), RunItem) 270 | 271 | If !iStatus && !IsUWPApp 272 | MyMenu.Disable("1&") 273 | iTarget:=GuiCtrlObj.GetText(Item , 4) 274 | If iTarget { 275 | g["StartupManager_BtnOpenTarget"].Enabled:=True 276 | } Else { 277 | MyMenu.Disable("2&") 278 | MyMenu.Disable("3&") 279 | } 280 | IsRegistry:=(iType=="Registry") 281 | If IsRegistry { 282 | g["StartupManager_BtnFindRegistry"].Enabled:=True 283 | } Else { 284 | MyMenu.Disable("4&") 285 | } 286 | g["StartupManager_BtnSearchOnline"].Enabled:=True 287 | 288 | If IsUWPApp { 289 | g["StartupManager_BtnDelete"].Enabled:=False 290 | MyMenu.Disable("6&") 291 | } Else 292 | g["StartupManager_BtnDelete"].Enabled:=True 293 | MyMenu.Show 294 | 295 | RunItem(ItemName, ItemPos, MyMenu) { 296 | StartupManager_FnRun(ItemPos) 297 | } 298 | } 299 | StartupManager_FnRun(ItemPos) { 300 | LV:=g["StartupManager_LV"] 301 | i:=LV.GetNext() 302 | If ItemPos=1 { 303 | iStatus:=LV.GetText(i , 6) 304 | iType:=StartupType[LV.GetText(i , 5)].Type 305 | IsUWPApp:=(iType=="UWPApp") 306 | If IsUWPApp { 307 | If iStatus!=2 { 308 | iStatusText:="Text_Enabled" 309 | bStatusText:="Text_Disable" 310 | iStatus:=2 311 | RunKey:=App.HKCU "\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\" StartupType[LV.GetText(i , 5)].FamilyName "\" StartupType[LV.GetText(i , 5)].RunKey 312 | RegWrite 1, "REG_DWORD", RunKey, "UserEnabledStartupOnce" 313 | } Else { 314 | iStatusText:="Text_Disabled" 315 | bStatusText:="Text_Enable" 316 | iStatus:=1 317 | } 318 | RunKey:=App.HKCU "\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\SystemAppData\" StartupType[LV.GetText(i , 5)].FamilyName "\" StartupType[LV.GetText(i , 5)].RunKey 319 | RegWrite iStatus, "REG_DWORD", RunKey, "State" 320 | } Else { 321 | sHex:="" 322 | If iStatus && Mod(iStatus, 2) { 323 | If iStatus=3 { 324 | iStatus:=2 325 | } Else { 326 | iStatus:=6 327 | } 328 | sHex.="0" iStatus "0000000000000000000000" 329 | iStatusText:="Text_Enabled" 330 | bStatusText:="Text_Disable" 331 | } Else { 332 | If !iStatus || iStatus=2 { 333 | iStatus:=3 334 | } Else { 335 | iStatus:=7 336 | } 337 | sHex.="0" iStatus "000000" "004012B7D233B201" 338 | iStatusText:="Text_Disabled" 339 | bStatusText:="Text_Enable" 340 | } 341 | RegWrite sHex, "REG_BINARY", StartupType[LV.GetText(i , 5)].StartupApprovedKey, LV.GetText(i , 1) 342 | } 343 | g["StartupManager_BtnDisable"].Text:=GetLangTextWithIcon(bStatusText) 344 | LV.Modify(i,,, GetLangText(iStatusText),,,,iStatus) 345 | Return 346 | } Else If ItemPos=6 { 347 | iType:=StartupType[LV.GetText(i , 5)].Type 348 | If iType=="Registry" { 349 | try RegDelete StartupType[LV.GetText(i , 5)].RunKey, LV.GetText(i , 1) 350 | } Else { 351 | f:=StartupType[LV.GetText(i , 5)].RunKey "\" LV.GetText(i , 1) 352 | If InStr(FileExist(f), "D") { 353 | try DirDelete f, true 354 | } Else { 355 | try FileDelete f 356 | } 357 | } 358 | try RegDelete StartupType[LV.GetText(i , 5)].StartupApprovedKey, LV.GetText(i , 1) 359 | LV.Delete(i) 360 | DisableAllBtn() 361 | Return 362 | } Else If ItemPos=2 { 363 | runAsParam:="properties " LV.GetText(i, 4) 364 | } Else If ItemPos=3 { 365 | runAsParam:="explorer.exe /select, " LV.GetText(i, 4) 366 | } Else If ItemPos=4 { 367 | RegWrite StartupType[LV.GetText(i , 5)].RunKey, "REG_SZ", "HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit", "LastKey" 368 | runAsParam:="regedit.exe" 369 | } Else If ItemPos=5 { 370 | SplitPath LV.GetText(i, 4), &rFileName 371 | runAsParam:="https://www.google.com/search?q=" LV.GetText(i, 1) " " rFileName 372 | } 373 | try Run(runAsParam) 374 | } 375 | DisableAllBtn() { 376 | g["StartupManager_BtnDisable"].Enabled:=False 377 | g["StartupManager_BtnDelete"].Enabled:=False 378 | g["StartupManager_BtnOpenTarget"].Enabled:=False 379 | g["StartupManager_BtnFindRegistry"].Enabled:=False 380 | g["StartupManager_BtnSearchOnline"].Enabled:=False 381 | } 382 | } 383 | -------------------------------------------------------------------------------- /Gui/Theme.ahk: -------------------------------------------------------------------------------- 1 | CreatePopupTheme(Ctr, *) { 2 | Ctr.GetPos(&xCtr,&yCtr,&wCtr,&hCtr) 3 | g:=Ctr.Gui 4 | g.GetPos(&xG,&yG) 5 | g2:=CreateDlg(g, 0, Themes.%App.ThemeSelected%.TextColorHover) 6 | g2.SetFont("s" App.MainFontSize+1) 7 | x:=80 8 | For k,v In Themes.OwnProps() { 9 | BtnSys_SaveOptimizeConfigTab:=g2.AddText('vTheme_Color_' k ' c' v.BackColor ' x' x ' y' 6 ' w30 h30',App.ThemeSelected=k?Chr(0xEC61):Chr(0xE91F)) 10 | BtnSys_SaveOptimizeConfigTab.SetFont("s" (App.ThemeSelected=k?22:20),App.IconFont) 11 | BtnSys_SaveOptimizeConfigTab.OnEvent("Click", Theme_Color_Click) 12 | x+=38 13 | } 14 | Theme_Color_Click(Ctr, *) { 15 | ThemeClicked:=SubStr(Ctr.Name,13) 16 | If ThemeClicked=App.ThemeSelected 17 | Return 18 | PrevCtr:=Ctr.Gui["Theme_Color_" App.ThemeSelected] 19 | 20 | App.ThemeSelected:=ThemeClicked 21 | SetTheme(g, Themes.%App.ThemeSelected%) 22 | PrevCtr.Text:=Chr(0xE91F) 23 | PrevCtr.SetFont("s20") 24 | Ctr.Text:=Chr(0xEC61) 25 | Ctr.SetFont("s22") 26 | IniWrite App.ThemeSelected, "config.ini", "General", "Theme" 27 | } 28 | 29 | BGImage:=IniRead("config.ini", "Gui", "BGImage", 0) 30 | g2.SetFont("cFFFFFF") 31 | g2.AddText("xm",GetLangText("Text_BackgroundImage") ":") 32 | g2.AddRadio("vSetting_BGImage_Radio w80 h25" (BGImage==0?" Checked":""), GetLangText("Text_None")).OnEvent("Click",BGImage_Radio_None_Click) 33 | g2.AddRadio("yp h25" (BGImage==1?" Checked":""), GetLangText("Text_DefaultImage")).OnEvent("Click",BGImage_Radio_Default_Click) 34 | IsCustomBGImage:=(BGImage&&BGImage!=0&&BGImage!=1?1:0) 35 | g2.AddRadio("w80 h25 xm" (IsCustomBGImage?" Checked":""), GetLangText("Text_Custom")).OnEvent("Click",BGImage_Radio_Custom_Click) 36 | BGImageEdit:=g2.AddEdit("w200 h25 ReadOnly -Wrap r1 yp c202020" (IsCustomBGImage?"":" Disabled"), (IsCustomBGImage?BGImage:"")) 37 | BtnSelectImage:=g2.AddButton("yp h25 Background" Themes.%App.ThemeSelected%.TextColorHover (IsCustomBGImage?"":" Disabled"), "...") 38 | BtnSelectImage.OnEvent("Click",BtnSelectImage_Click) 39 | 40 | BGImage_Radio_None_Click(*) { 41 | BtnSelectImage.Enabled:=False 42 | BGImageEdit.Enabled:=False 43 | BGImageEdit.Value:="" 44 | If SetBGImage(g["BGImage"],0) 45 | IniWrite 0, "config.ini", "Gui", "BGImage" 46 | } 47 | BGImage_Radio_Default_Click(*) { 48 | BtnSelectImage.Enabled:=False 49 | BGImageEdit.Enabled:=False 50 | BGImageEdit.Value:="" 51 | If SetBGImage(g["BGImage"],1) 52 | IniDelete "config.ini", "Gui", "BGImage" 53 | } 54 | BGImage_Radio_Custom_Click(*) { 55 | BtnSelectImage.Enabled:=True 56 | BGImageEdit.Enabled:=True 57 | } 58 | BtnSelectImage_Click(*) { 59 | g.Opt("+Disabled") 60 | g2.Opt("+OwnDialogs") 61 | HideToolTip() 62 | SelectedFile := FileSelect(3, , "Open a image", "") 63 | If SelectedFile { 64 | If SetBGImage(g["BGImage"],SelectedFile) { 65 | BGImageEdit.Value:=SelectedFile 66 | IniWrite SelectedFile, "config.ini", "Gui", "BGImage" 67 | } 68 | } 69 | g2.Opt("-OwnDialogs") 70 | g.Opt("-Disabled") 71 | } 72 | 73 | tX:=xG+xCtr-(343-wCtr)/2 74 | tY:=yG+yCtr+hCtr+6 75 | g2.Show("x" tX " y" tY) 76 | If WinWaitNotActive(g2) 77 | DestroyDlg 78 | } 79 | 80 | SetTheme(g, Theme) { 81 | g.BackColor:=Theme.BackColor 82 | g.SetFont("c" Theme.TextColor) 83 | ToolTipOptions.SetColors("0x" Theme.BackColor, "0x" Theme.TextColor) 84 | pToken:=Gdip_Startup() 85 | SetBGNavSelect(g) 86 | SetBGPanel(g) 87 | Gdip_Shutdown(pToken) 88 | SetMenuTheme() 89 | For Hwnd, GuiCtrlObj in g { 90 | SetCtrlTheme(GuiCtrlObj) 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /Gui/User.ahk: -------------------------------------------------------------------------------- 1 | CreatePopupUser(Ctr, *) { 2 | If UserCount()=1 3 | Return 4 | g:=Ctr.Gui 5 | g2:=CreateDlg(g, 0) 6 | 7 | NavSelectW:=245, NavSelectH:=36 8 | 9 | g2.AddPic("Hidden vNavBGHover xm") 10 | g2.AddPic("vNavBGActive Hidden xm") 11 | pToken:=Gdip_Startup() 12 | CreateBGNavSelect(g2["NavBGHover"], g2["NavBGActive"], NavSelectW, NavSelectH ,6) 13 | 14 | SpaceName:=" " 15 | y:=0 16 | Loop Reg, "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList", "K" { 17 | If InStr(A_LoopRegName, "S-1-5-21-")!=1 || (App.UserSID=A_LoopRegName) 18 | Continue 19 | tUser:=LookupAccountSid(A_LoopRegName) 20 | If !tUser.HasOwnProp("Name") || !tUser.Name 21 | Continue 22 | a:=g2.AddPic("BackgroundTrans w22 h22 xm8 ym" y+8) 23 | SetUserPic(a, A_LoopRegName) 24 | NavItem:=g2.AddText("BackgroundTrans 0x200 0x100 h" NavSelectH " w" NavSelectW " xm ym" y " vNavItem_" A_LoopRegName, SpaceName tUser.Name) 25 | NavItem.SetFont("s" App.MainFontSize+2 ) 26 | NavItem.OnEvent("Click", User_Click) 27 | y+=(NavSelectH+4) 28 | } 29 | Gdip_Shutdown(pToken) 30 | 31 | User_Click(Ctr, *) { 32 | UserClicked:=SubStr(Ctr.Name,9) 33 | App.UserSID:=UserClicked 34 | App.UserProfile:=GetUSERPROFILE() 35 | App.HKCU:=GetHKCU() 36 | App.User:=LookupAccountSid(App.UserSID).Name 37 | g["NavItem_UserName"].Text:=SpaceName App.User 38 | pToken:=Gdip_Startup() 39 | SetUserPic(g["UserPic"], App.UserSID) 40 | Gdip_Shutdown(pToken) 41 | DestroyDlg(0) 42 | NavItem_Click(g) 43 | } 44 | ShowDlg(g, g2, 4, Ctr) 45 | If WinWaitNotActive(g2) 46 | DestroyDlg(0) 47 | } -------------------------------------------------------------------------------- /Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tranht17/WinTune/4edfd4e04299af16fac4d5405a4b85130f121c8f/Icon.ico -------------------------------------------------------------------------------- /Inc/CustomFn.ahk: -------------------------------------------------------------------------------- 1 | CheckUninstallOneDrive() { 2 | OneDriveSetup:=A_WinDir "\System32\OneDriveSetup.exe" 3 | If !FileExist(OneDriveSetup) { 4 | OneDriveSetup:=A_WinDir "\SysWOW64\OneDriveSetup.exe" 5 | If !FileExist(OneDriveSetup) { 6 | OneDriveSetup:=A_WinDir "\Sysnative\OneDriveSetup.exe" 7 | If !FileExist(OneDriveSetup) 8 | Return -1 9 | } 10 | } 11 | OneDriveSetupRun:=RegRead(App.HKCU "\Software\Microsoft\Windows\CurrentVersion\RunOnce", "OneDriveSetup", "") 12 | PreInstall:=!InStr(OneDriveSetupRun, "/uninstall") 13 | If !(OneDriveExist:=FileExist(EnvGet2("Local AppData") "\Microsoft\OneDrive\onedrive.exe")) { 14 | If !(OneDriveExist:=FileExist(A_ProgramFiles "\Microsoft OneDrive\OneDrive.exe")) && A_Is64bitOS { 15 | OneDriveExist:=FileExist(EnvGet("ProgramFiles(x86)") "\Microsoft OneDrive\OneDrive.exe") 16 | } 17 | } 18 | r:=0 19 | If (!OneDriveExist && !OneDriveSetupRun) || (OneDriveExist && OneDriveSetupRun && !PreInstall) 20 | r:=1 21 | Return r 22 | } 23 | UninstallOneDrive(s,d,silent) { 24 | OneDriveSetup:=A_WinDir "\System32\OneDriveSetup.exe" 25 | If !FileExist(OneDriveSetup) { 26 | OneDriveSetup:=A_WinDir "\SysWOW64\OneDriveSetup.exe" 27 | If !FileExist(OneDriveSetup) { 28 | OneDriveSetup:=A_WinDir "\Sysnative\OneDriveSetup.exe" 29 | If !FileExist(OneDriveSetup) 30 | Return -1 31 | } 32 | } 33 | If !(IsPerMachine:=!!FileExist(A_ProgramFiles "\Microsoft OneDrive\OneDrive.exe")) && A_Is64bitOS { 34 | IsPerMachine:=!!FileExist(EnvGet("ProgramFiles(x86)") "\Microsoft OneDrive\OneDrive.exe") 35 | } 36 | OneDriveSetupCMD:=OneDriveSetup (IsPerMachine?' /allusers':'') (s?' /uninstall':'') ' /silent' 37 | If App.User=GetActiveUser() { 38 | If s 39 | ProcessClose "OneDrive.exe" 40 | RunWait OneDriveSetupCMD 41 | } Else { 42 | try 43 | RegDelete App.HKCU "\Software\Microsoft\Windows\CurrentVersion\Run", "OneDriveSetup" 44 | try 45 | RegDelete App.HKCU "\Software\Microsoft\Windows\CurrentVersion\Run", "OneDrive" 46 | RegWrite OneDriveSetupCMD, "REG_SZ", App.HKCU "\Software\Microsoft\Windows\CurrentVersion\RunOnce", "OneDriveSetup" 47 | } 48 | } 49 | 50 | CheckDisableVisualStudioTelemetry() { 51 | If FileExist(A_Is64bitOS?EnvGet("ProgramFiles(x86)"):A_ProgramFiles "\Microsoft Visual Studio\Installer\vswhere.exe") 52 | Return RegRead(App.HKCU "\Software\Microsoft\VisualStudio\Telemetry", "TurnOffSwitch",0) 53 | Else { 54 | Return -1 55 | } 56 | } 57 | DisableVisualStudioTelemetry(s,d,silent) { 58 | Ver:=SubStr(RunTerminal(A_Is64bitOS?EnvGet("ProgramFiles(x86)"):A_ProgramFiles "\Microsoft Visual Studio\Installer\vswhere.exe -latest -property catalog_productDisplayVersion"), 1,2) 59 | RegWrite s, "REG_DWORD", App.HKCU "\Software\Microsoft\VisualStudio\Telemetry", "TurnOffSwitch" 60 | RegWrite !s, "REG_DWORD", "HKLM\Software\WOW6432Node\Microsoft\VSCommon\" Ver ".0\SQM", "OptIn" 61 | RegWrite !s, "REG_DWORD", App.HKCU "\Software\Microsoft\VSCommon\" Ver ".0\SQM", "OptIn" 62 | } 63 | 64 | CheckDisableSystemRestore() { 65 | Return !RegRead("HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore", "RPSessionInterval",0) 66 | } 67 | DisableSystemRestore(s,d,silent) { 68 | If s { 69 | RegWrite '0', "REG_DWORD", "HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore", "RPSessionInterval" 70 | RegDelete "HKLM\Software\Microsoft\Windows NT\CurrentVersion\SPP\Clients", "{09F7EDC5-294E-4180-AF6A-FB0E6A0E9513}" 71 | RunTerminal(A_Comspec ' /c vssadmin delete shadows /all /quiet') 72 | } Else { 73 | RegWrite '1', "REG_DWORD", "HKLM\Software\Microsoft\Windows NT\CurrentVersion\SystemRestore", "RPSessionInterval" 74 | DeviceID:="" 75 | For CS in ComObjGet("winmgmts:").ExecQuery("SELECT DeviceID FROM Win32_Volume WHERE DriveLetter='" SubStr(A_WinDir, 1, 2) "'") { 76 | DeviceID:=CS.DeviceID 77 | } 78 | RegExMatch(DeviceID, "\\?\\(.*)", &SubPat) 79 | RegWrite Trim(SubPat[0]) ":" DriveGetLabel(SubStr(A_WinDir, 1, 2)) "(" SubStr(A_WinDir, 1, 1) "%3A)", "REG_MULTI_SZ", "HKLM\Software\Microsoft\Windows NT\CurrentVersion\SPP\Clients", "{09F7EDC5-294E-4180-AF6A-FB0E6A0E9513}" 80 | } 81 | } 82 | 83 | CheckDisableMSDefender(*) { 84 | ; SafeBootMode:=SysGet(67) 85 | If !SysGet(67) { 86 | try { 87 | service:= ComObject("Schedule.Service") 88 | service.Connect() 89 | location:=service.GetFolder("\Microsoft\Windows\Windows Defender") 90 | If location.GetTask("Windows Defender Cache Maintenance").Enabled 91 | Return 0 92 | If location.GetTask("Windows Defender Cleanup").Enabled 93 | Return 0 94 | If location.GetTask("Windows Defender Scheduled Scan").Enabled 95 | Return 0 96 | If location.GetTask("Windows Defender Verification").Enabled 97 | Return 0 98 | } Catch { 99 | Return -1 100 | } 101 | } 102 | try { 103 | If (SS:=Service_State("Sense")) && SS = 4 104 | Return 0 105 | If (SS:=Service_State("WdBoot")) && SS = 4 106 | Return 0 107 | If (SS:=Service_State("WdFilter")) && SS = 4 108 | Return 0 109 | If (SS:=Service_State("WdNisDrv")) && SS = 4 110 | Return 0 111 | If (SS:=Service_State("WdNisSvc")) && SS = 4 112 | Return 0 113 | If (SS:=Service_State("WinDefend")) && SS = 4 114 | Return 0 115 | Return 1 116 | } Catch { 117 | Return -1 118 | } 119 | } 120 | DisableMSDefenderScheduleTask(s) { 121 | service:= ComObject("Schedule.Service") 122 | service.Connect() 123 | location:=service.GetFolder("\Microsoft\Windows\Windows Defender") 124 | location.GetTask("Windows Defender Cache Maintenance").Enabled:=!s 125 | location.GetTask("Windows Defender Cleanup").Enabled:=!s 126 | location.GetTask("Windows Defender Scheduled Scan").Enabled:=!s 127 | location.GetTask("Windows Defender Verification").Enabled:=!s 128 | } 129 | DisableMSDefenderService(s) { 130 | regpath:='HKLM\SYSTEM\CurrentControlSet\Services\' 131 | If s { 132 | try { 133 | RegRead(regpath "Sense", "Start") 134 | RegWrite '4', "REG_DWORD", regpath "Sense", "Start" 135 | } 136 | RegWrite '4', "REG_DWORD", regpath "WdBoot", "Start" 137 | RegWrite '4', "REG_DWORD", regpath "WdFilter", "Start" 138 | RegWrite '4', "REG_DWORD", regpath "WdNisDrv", "Start" 139 | RegWrite '4', "REG_DWORD", regpath "WdNisSvc", "Start" 140 | RegWrite '4', "REG_DWORD", regpath "WinDefend", "Start" 141 | } Else { 142 | try { 143 | RegRead(regpath "Sense", "Start") 144 | RegWrite '3', "REG_DWORD", regpath "Sense", "Start" 145 | } 146 | RegWrite '0', "REG_DWORD", regpath "WdBoot", "Start" 147 | RegWrite '0', "REG_DWORD", regpath "WdFilter", "Start" 148 | RegWrite '3', "REG_DWORD", regpath "WdNisDrv", "Start" 149 | RegWrite '3', "REG_DWORD", regpath "WdNisSvc", "Start" 150 | RegWrite '2', "REG_DWORD", regpath "WinDefend", "Start" 151 | } 152 | 153 | } 154 | RunDisableMSDefender(s) { 155 | DisableMSDefenderScheduleTask(s) 156 | RegWrite A_ScriptFullPath ' /DisableMSDefenderService=' s, "REG_SZ", "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce", "*DisableMSDefenderService" 157 | Sleep 1000 158 | GoSafeboot() 159 | } 160 | RunDisableMSDefenderSafeMode(s) { 161 | DisableMSDefenderService(s) 162 | RegWrite A_ScriptFullPath ' /DisableMSDefenderScheduleTask=' s, "REG_SZ", "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce", "*DisableMSDefenderScheduleTask" 163 | Sleep 1000 164 | ExitSafeboot() 165 | } 166 | DisableMSDefender(s,d,silent){ 167 | SafeBootMode:=SysGet(67) 168 | n:=SafeBootMode?"SafeMode":"" 169 | If silent { 170 | RunDisableMSDefender%n%(s) 171 | } Else { 172 | HideToolTip() 173 | Result := MsgBox(GetLangText("Text_DisableMSDefender" s), App.Name, "YesNo Icon?") 174 | if Result = "Yes" { 175 | RunDisableMSDefender%n%(s) 176 | } Else { 177 | Return !s 178 | } 179 | } 180 | } 181 | -------------------------------------------------------------------------------- /Inc/OptimizeConfig.ahk: -------------------------------------------------------------------------------- 1 | SaveOptimizeConfigAll(SelectedFile) { 2 | Config:={} 3 | Loop Layout.Length { 4 | If (Layout[A_Index].ID = "" || !Layout[A_Index].HasOwnProp("Items")) 5 | Continue 6 | ItemList:=Layout[A_Index].Items 7 | Loop ItemList.Length { 8 | ItemId:=ItemList[A_Index] 9 | s:=CheckStatusItem(ItemId, Data.%ItemId%) 10 | If s<=-1 11 | Continue 12 | Config.%ItemID%:=s 13 | } 14 | 15 | ObjStartMenu:={} 16 | StartMenuLayout(&ObjStartMenu) 17 | Config.StartMenuLayout:=ObjStartMenu 18 | 19 | Config.HostsEdit:=LoadHostsFile() 20 | } 21 | try 22 | FileDelete SelectedFile 23 | FileAppend JSON.stringify(Config), SelectedFile 24 | } 25 | LoadOptimizeConfig(SelectedFile, g:="") { 26 | ConfigText:=FileRead(SelectedFile) 27 | Config:=JSON.parse(ConfigText,,False) 28 | IsRunDisableMSDefender:=0 29 | For ItemId, ItemValue in Config.OwnProps() { 30 | If ItemId="PackageManager" { 31 | Loop ItemValue.Length { 32 | If ItemValue[A_Index].Act="RemovePackage" || ItemValue[A_Index].Act="Uninstall" { 33 | If ItemValue[A_Index].HasOwnProp("FamilyNames") { 34 | FamilyNames:=ItemValue[A_Index].FamilyNames 35 | AllUsers:=ItemValue[A_Index].HasOwnProp("AllUsers")?ItemValue[A_Index].AllUsers:0 36 | Deprovision:=ItemValue[A_Index].HasOwnProp("Deprovision")?ItemValue[A_Index].Deprovision:0 37 | Loop FamilyNames.Length { 38 | Packages:=PackageManager.FindPackagesByPackageFamilyName(FamilyNames[A_Index]) 39 | Loop Packages.Length { 40 | UninstallPackage(Packages[A_Index], AllUsers, Deprovision) 41 | } 42 | } 43 | } 44 | } Else If ItemValue[A_Index].Act="Disable"{ 45 | If ItemValue[A_Index].HasOwnProp("FamilyNames") { 46 | FamilyNames:=ItemValue[A_Index].FamilyNames 47 | Deprovision:=ItemValue[A_Index].HasOwnProp("Deprovision")?ItemValue[A_Index].Deprovision:0 48 | Loop FamilyNames.Length { 49 | Packages:=PackageManager.FindPackagesByPackageFamilyName(FamilyNames[A_Index]) 50 | Loop Packages.Length { 51 | PackageManager.SetPackageStatus(Packages[A_Index].FullName, 8) 52 | ; PackageManager.ClearPackageStatus(Packages[A_Index].FullName, 8) 53 | } 54 | If Deprovision 55 | PackageManager.DeprovisionPackageForAllUsers(FamilyNames[A_Index]) 56 | } 57 | } 58 | } Else If ItemValue[A_Index].Act="Deprovision"{ 59 | If ItemValue[A_Index].HasOwnProp("FamilyNames") { 60 | FamilyNames:=ItemValue[A_Index].FamilyNames 61 | Loop FamilyNames.Length { 62 | PackageManager.DeprovisionPackageForAllUsers(FamilyNames[A_Index]) 63 | } 64 | } 65 | } 66 | } 67 | } Else If ItemId="StartMenuLayout" { 68 | StartMenuLayout(&ItemValue, "set") 69 | } Else If ItemId="HostsEdit" { 70 | SaveHostsFile(ItemValue) 71 | } Else { 72 | If !Data.HasOwnProp(ItemID) 73 | Continue 74 | s:=CheckStatusItem(ItemId, Data.%ItemId%) 75 | If s<=-1 || ItemValue=s 76 | Continue 77 | If ItemId="DisableMSDefender" { 78 | IsRunDisableMSDefender:=1 79 | Continue 80 | } 81 | ProgNow(ItemId, ItemValue, Data.%ItemId%, 1) 82 | } 83 | } 84 | 85 | If IsRunDisableMSDefender { 86 | ItemId:="DisableMSDefender" 87 | ProgNow(ItemId, Config.%ItemId%, Data.%ItemId%, 1) 88 | } 89 | 90 | If g 91 | NavItem_Click(g) 92 | } -------------------------------------------------------------------------------- /Inc/Optimizer.ahk: -------------------------------------------------------------------------------- 1 | CheckRequires(DataItem) { 2 | ; RequiresWinInstallationType: "Client,Server" 3 | If DataItem.HasOwnProp("RequiresWinInstallationType") && DataItem.RequiresWinInstallationType { 4 | IsPassed:=0 5 | Loop Parse, DataItem.RequiresWinInstallationType, "," { 6 | If A_LoopField=App.SystemInfo.InstallationType { 7 | IsPassed:=1 8 | Break 9 | } 10 | } 11 | If !IsPassed 12 | Return 0 13 | } 14 | 15 | ; RequiresWinEditionID: "Professional" 16 | If DataItem.HasOwnProp("RequiresWinEditionID") && DataItem.RequiresWinEditionID { 17 | IsPassed:=0 18 | Loop Parse, DataItem.RequiresWinEditionID, "," { 19 | If A_LoopField=App.SystemInfo.EditionID { 20 | IsPassed:=1 21 | Break 22 | } 23 | } 24 | If !IsPassed 25 | Return 0 26 | } 27 | 28 | ; RequiresWinVer: ">=10.0.10240,<=10.0.19045" 29 | ; RequiresWinVer: ">=10.0.22000" 30 | If DataItem.HasOwnProp("RequiresWinVer") && DataItem.RequiresWinVer { 31 | IsPassed:=1 32 | Loop Parse, DataItem.RequiresWinVer, "," { 33 | If !VerCompare(A_OSVersion, A_LoopField) { 34 | IsPassed:=0 35 | Break 36 | } 37 | } 38 | If !IsPassed 39 | Return 0 40 | } 41 | Return 1 42 | } 43 | CheckStatusItem(ItemFunc, DataItem) { 44 | If !CheckRequires(DataItem) 45 | Return -1 46 | s:=t:=-1 47 | Loop DataItem.Act.Length { 48 | If DataItem.Act[A_Index].HasOwnProp("Check") && !DataItem.Act[A_Index].Check 49 | Continue 50 | If !CheckRequires(DataItem.Act[A_Index]) 51 | s:=-1 52 | Switch DataItem.Act[A_Index].Type 53 | { 54 | Case "Custom": s:=Check%ItemFunc%() 55 | Case "Service": s:=(Service_State(DataItem.Act[A_Index].Name)=DataItem.Act[A_Index].State1) 56 | Case "ScheduleService": s:=CheckScheduleService(DataItem.Act[A_Index]) 57 | Case "Power": s:=!Get%DataItem.Act[A_Index].Name%() 58 | ; Case "SystemPinned": s:=!FindPinnedItemFavorites(Act[A_Index].SearchName) 59 | Case "RegChange": s:=RegRead(HKCU2HCU(DataItem.Act[A_Index].RegKey), DataItem.Act[A_Index].RegValueName,DataItem.Act[A_Index].RegValue0)=DataItem.Act[A_Index].RegValue1 60 | Case "RegDel": 61 | try { 62 | s:=RegRead(HKCU2HCU(DataItem.Act[A_Index].RegKey), DataItem.Act[A_Index].RegValueName)!=DataItem.Act[A_Index].RegValue0 63 | } Catch as err { 64 | s:=1 65 | } 66 | Case "RegAdd": 67 | Key:=HKCU2HCU(DataItem.Act[A_Index].RegKey) 68 | If DataItem.Act[A_Index].HasOwnProp("RegValue1") { 69 | try { 70 | RegValueName:=DataItem.Act[A_Index].HasOwnProp("RegValueName")?DataItem.Act[A_Index].RegValueName:unset 71 | RegValueDefault:=DataItem.Act[A_Index].HasOwnProp("RegValueDefault")?DataItem.Act[A_Index].RegValueDefault:unset 72 | s:=RegRead(Key, RegValueName?, RegValueDefault?)=DataItem.Act[A_Index].RegValue1 73 | } Catch { 74 | s:=0 75 | } 76 | } Else If DataItem.Act[A_Index].HasOwnProp("RegValueName") { 77 | try { 78 | RegRead(Key, DataItem.Act[A_Index].RegValueName) 79 | s:=1 80 | } Catch { 81 | s:=0 82 | } 83 | } Else { 84 | s:=RegKeyExist(Key) 85 | } 86 | } 87 | If s=0 || s=-2 88 | Break 89 | Else If s=-1 && t=1 { 90 | s:=t 91 | t:=-1 92 | } Else t:=s 93 | } 94 | ; 1: Value 1 95 | ; 0: Value 0 96 | ; -1: Skip this Act Check 97 | ; -2: Stop Act Loop Check 98 | Return s 99 | } 100 | 101 | ProgNow(ItemId, ItemValue, ItemData, silent:=0, Ctr:="") { 102 | Try { 103 | IsRefreshExplorer:=0 104 | IsRestartExplorer:=0 105 | Loop ItemData.Act.Length { 106 | If ItemData.Act[A_Index].HasOwnProp("Check") && ItemData.Act[A_Index].Check 107 | Continue 108 | If ItemData.Act[A_Index].Type="Custom" { 109 | r:=%ItemId%(ItemValue, ItemData.Act[A_Index],silent) 110 | If Ctr && (r=0 || r=1) 111 | Ctr.Value:=r 112 | } Else If ItemData.Act[A_Index].Type="RunTerminal" 113 | RunTerminal(ItemData.Act[A_Index].Value%ItemValue%) 114 | Else 115 | Prog%ItemData.Act[A_Index].Type%(ItemValue,ItemData.Act[A_Index],silent) 116 | If !IsRefreshExplorer && ItemData.Act[A_Index].HasOwnProp("RefreshExplorer") 117 | && ItemData.Act[A_Index].RefreshExplorer 118 | IsRefreshExplorer:=1 119 | If !IsRestartExplorer && ItemData.Act[A_Index].HasOwnProp("RestartExplorer") 120 | && (ItemData.Act[A_Index].RestartExplorer==1 || (ItemData.Act[A_Index].RestartExplorer==2 && ItemValue==1)) 121 | IsRestartExplorer:=1 122 | } 123 | If IsRefreshExplorer 124 | RefreshExplorer() 125 | } Catch as err { 126 | Debug(err, "Func: " ItemId) 127 | } 128 | } 129 | 130 | ProgReg(s, ItemData, silent) { 131 | If (s && ItemData.Type="RegDel") || (!s && ItemData.Type="RegAdd") { 132 | If ItemData.HasOwnProp("LvlKeyDel") && ItemData.LvlKeyDel { 133 | sKey:=StrSplit(HKCU2HCU(ItemData.RegKey), "\") 134 | cKey:="" 135 | Loop (sKey.Length-ItemData.LvlKeyDel+1) 136 | cKey.=(A_Index=1?"":"\") sKey[A_Index] 137 | try RegDeleteKey cKey 138 | } 139 | Else { 140 | try RegDelete HKCU2HCU(ItemData.RegKey), ItemData.RegValueName 141 | } 142 | } 143 | Else If !ItemData.HasOwnProp("RegValueName") && ItemData.HasOwnProp("RegValue" s) 144 | RegWrite ItemData.RegValue%s%, ItemData.RegType, HKCU2HCU(ItemData.RegKey) 145 | Else If !ItemData.HasOwnProp("RegValueName") 146 | RegCreateKey HKCU2HCU(ItemData.RegKey) 147 | Else 148 | RegWrite ItemData.RegValue%s%, ItemData.RegType, HKCU2HCU(ItemData.RegKey), ItemData.RegValueName 149 | } 150 | ProgRegAdd(s, ItemData, silent) { 151 | ProgReg(s, ItemData, silent) 152 | } 153 | ProgRegChange(s, ItemData, silent) { 154 | ProgReg(s, ItemData, silent) 155 | } 156 | ProgRegDel(s, ItemData, silent) { 157 | ProgReg(s, ItemData, silent) 158 | } 159 | 160 | ProgService(s, ItemData, silent) { 161 | If ItemData.HasOwnProp("StartType" s) 162 | Service_Change_StartType(ItemData.Name, ItemData.StartType%s%) 163 | If ItemData.HasOwnProp("State" s) { 164 | If ItemData.State%s%=1 165 | Service_Stop(ItemData.Name) 166 | Else ItemData.State%s%=4 167 | Service_Start(ItemData.Name) 168 | } 169 | } 170 | 171 | ScheduleServiceConnect() { 172 | static service:= ComObject("Schedule.Service") 173 | service.Connect() 174 | Return service 175 | } 176 | CheckScheduleService(ItemData) { 177 | ; SafeBootMode:=SysGet(67) 178 | If SysGet(67) { 179 | Return -1 180 | } 181 | Try { 182 | service:=ScheduleServiceConnect() 183 | r:=!service.GetFolder(ItemData.Location).GetTask(ItemData.TaskName).Enabled 184 | Return r 185 | } Catch { 186 | Return -1 187 | } 188 | } 189 | ProgScheduleService(s, ItemData, silent) { 190 | Try { 191 | service:=ScheduleServiceConnect() 192 | service.GetFolder(ItemData.Location).GetTask(ItemData.TaskName).Enabled:=!s 193 | } Catch { 194 | Return -1 195 | } 196 | } 197 | 198 | ProgPower(s, ItemData, silent) { 199 | Set%ItemData.Name%(ItemData.Value%s%) 200 | } 201 | StartMenuLayout(&item, Type:="get", silent:=1) { 202 | s:=0 203 | If VerCompare(A_OSVersion,">=10.0.22000") { 204 | LocalStatePath:=EnvGet2("Local AppData") "\Packages\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\LocalState" 205 | StartBinPath:="" 206 | If DirExist(LocalStatePath) { 207 | If FileExist(LocalStatePath "\start.bin") { 208 | StartBinPath:=LocalStatePath "\start.bin" 209 | } Else If FileExist(LocalStatePath "\start2.bin") { 210 | StartBinPath:=LocalStatePath "\start2.bin" 211 | } 212 | } 213 | 214 | If Type="get" { 215 | item.VisiblePlaces:=RegRead(App.HKCU "\Software\Microsoft\Windows\CurrentVersion\Start", "VisiblePlaces", "") 216 | If StartBinPath { 217 | f := FileRead(StartBinPath, "RAW") 218 | item.StartBin:=Bin2Hex(f, f.Size) 219 | s:=1 220 | } 221 | } Else If Type="set" { 222 | If item.HasOwnProp("VisiblePlaces") { 223 | RegWrite item.VisiblePlaces, "REG_BINARY", App.HKCU "\Software\Microsoft\Windows\CurrentVersion\Start", "VisiblePlaces" 224 | s:=1 225 | } 226 | If StartBinPath && item.HasOwnProp("StartBin") { 227 | bin:=Hex2Bin(item.StartBin) 228 | FileDelete StartBinPath 229 | FileAppend bin, StartBinPath,"cp0" 230 | s:=1 231 | } 232 | } 233 | } Else If VerCompare(A_OSVersion,">=10.0.16299") { 234 | Loop Reg, App.HKCU "\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount", "K" { 235 | If InStr(A_LoopRegName, "$start.suggestions$windows.data.curatedtilecollection.tilecollection") { 236 | If Type="get" { 237 | sData:=RegRead(App.HKCU "\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\" A_LoopRegName "\Current", "Data", "") 238 | If sData 239 | item.Suggestions:=sData 240 | s:=1 241 | } Else If Type="set" && item.HasOwnProp("Suggestions") { 242 | RegWrite item.Suggestions, "REG_BINARY", App.HKCU "\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\" A_LoopRegName "\Current", "Data" 243 | s:=1 244 | } 245 | } Else If InStr(A_LoopRegName, "$start.tilegrid$windows.data.curatedtilecollection.tilecollection") { 246 | If Type="get" { 247 | sData:=RegRead(App.HKCU "\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\" A_LoopRegName "\Current", "Data", "") 248 | If sData 249 | item.TileGrid:=sData 250 | s:=1 251 | } Else If Type="set" && item.HasOwnProp("TileGrid") { 252 | RegWrite item.TileGrid, "REG_BINARY", App.HKCU "\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\" A_LoopRegName "\Current", "Data" 253 | s:=1 254 | } 255 | } Else If InStr(A_LoopRegName, "$windows.data.unifiedtile.startglobalproperties") { 256 | If Type="get" { 257 | sData:=RegRead(App.HKCU "\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\" A_LoopRegName "\Current", "Data", "") 258 | If sData 259 | item.StartGlobalProperties:=sData 260 | s:=1 261 | } Else If Type="set" && item.HasOwnProp("StartGlobalProperties") { 262 | RegWrite item.StartGlobalProperties, "REG_BINARY", App.HKCU "\SOFTWARE\Microsoft\Windows\CurrentVersion\CloudStore\Store\Cache\DefaultAccount\" A_LoopRegName "\Current", "Data" 263 | s:=1 264 | } 265 | } 266 | } 267 | } 268 | 269 | If Type="set" && s { 270 | If VerCompare(A_OSVersion, ">=10.0.18362") { 271 | PID:=ProcessClose("StartMenuExperienceHost.exe") 272 | If !ProcessWaitClose(PID , 5000) && !silent 273 | TrayTip GetLangText("Text_ClearStartMenu_Done"), App.Name 274 | } Else 275 | ProcessClose "explorer.exe" 276 | } 277 | 278 | Return s 279 | } -------------------------------------------------------------------------------- /Lang/ja.json: -------------------------------------------------------------------------------- 1 | { 2 | "Name": "日本語", 3 | "Translator": "coolvitto", 4 | "Flag": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAE8GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYTZhNjM5NiwgMjAyNC8wMy8xMi0wNzo0ODoyMyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI1LjExIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMDctMjhUMTE6MjY6MDcrMDc6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTA3LTI4VDE0OjQzOjE1KzA3OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTA3LTI4VDE0OjQzOjE1KzA3OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpiZmE5Yzk3OS04MmE3LTM1NDYtYjU3Ni02MDJiZmFiODc5N2MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6YmZhOWM5NzktODJhNy0zNTQ2LWI1NzYtNjAyYmZhYjg3OTdjIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YmZhOWM5NzktODJhNy0zNTQ2LWI1NzYtNjAyYmZhYjg3OTdjIj4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpiZmE5Yzk3OS04MmE3LTM1NDYtYjU3Ni02MDJiZmFiODc5N2MiIHN0RXZ0OndoZW49IjIwMjQtMDctMjhUMTE6MjY6MDcrMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyNS4xMSAoV2luZG93cykiLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VMrgLQAAAnFJREFUOI2NlM1u01AQha8ErFHFDkh5hIhChZR92ldAILFkU/EIdNXuugHSblIJ9Q2y7KLvgKho05QgUSrl///HdhLbwzkTX8lOgqilLx7PnHN8fZ3EiIix+L6vBEFg2QK76OUJa7DNWRiGxp7jGWYxMArKoC7480MW4FFAUOZOgSA3m83kLlAb9y8FQnQ6nU5lCZiVFTN6VgZi+UeRQGaR2Jflgz3VRdrJZCL0JgKxD2kO7F1Zh2oOpX38RSof3int48/ih6HOlvTI4H7qvqFx5nmeWLgK53dZyhvrcnnfyNWjOazZ44yauIcZzDK4yCYGQSAT15Hy5roU1xDw6pmUXzydg1p7mE1dV7ULoVnjuu4+EEuAOze/HsrFg3nYTwTFYY8zaqilh2HRec84jnMCxDKF6M/OW7nAI14j4HrjSRL0OKOG2rh3PB6fGH4AsUwgutl5Iz9gKiFgFZzdIJDauFcDR6PR/nA4FJyFZw+iWv6TnOMFlDZTcvX8cQL2zu8Z1VAb9+K8Z1BkB4OBWIb4GoxwtyJWcv4Qb/dlSooIIqzZ44waauNekOUjGxRnvV5P+v2+9LpdGeHO3V8luUyn5BtW831tDmv2OKOGWvXAywxm8aUwNN1ut6ULAemgHsLQx9fn9vBAyu9fK7e5A+k5Y5114vpOh4+b1kB+ENzlqNlsCoMV1B3HkwHMcbqupzOro4dem2N/egoEp/V6XUVJWhHJPrX0WP/Svw32wTQajVytVlMxwXUC2480OXr++feFDTatVouhGRgK1WrVB7KAzxlWmMHq1PPfQIgNTGQLAR8rlUo+YhfX21gZt8esCvwL2Gse7kUJhlsAAAAASUVORK5CYII=", 5 | "AUOptions": {"Name": "AUオプション","Desc": "Windows アップデートをダウンロードする前に通知する"}, 6 | "AutoEndTasks": {"Name": "タスクを自動的に終了する","Desc": "システムクラッシュを避けるためにフリーズしたプロセスを閉じる"}, 7 | "BtnHostsEdit": {"Name": "Hosts の編集"}, 8 | "BtnPackageManager": {"Name": "UWP アプリ"}, 9 | "BtnRestartExplorer": {"Name": "エクスプローラーを再起動"}, 10 | "BtnStartupManager": {"Name": "スタートアップマネージャ"}, 11 | "BtnSys_Close": {"Desc": "Text_Close"}, 12 | "BtnSys_Language": {"Desc": "言語"}, 13 | "BtnSys_LoadOptimizeConfig": {"Desc": "最適化設定ファイルの読み込み"}, 14 | "BtnSys_Minimize": {"Desc": "最小化"}, 15 | "BtnSys_ReloadTab": {"Desc": "タブの再読み込み"}, 16 | "BtnSys_SaveImage": {"Desc": "自動キャプチャして画像に保存"}, 17 | "BtnSys_SaveOptimizeConfigAll": {"Desc": "すべての最適化設定をファイルに保存"}, 18 | "BtnSys_SaveOptimizeConfigTab": {"Desc": "このタブのみの、最適化設定をファイルに保存"}, 19 | "BtnSys_Search": {"Desc": "最適化の検索"}, 20 | "BtnSys_Setting": {"Desc": "設定"}, 21 | "BtnSys_Theme": {"Desc": "テーマ"}, 22 | "ClassicContextMenu": {"Name": "クラシックコンテキストメニュー"}, 23 | "DiagnosticDataOff": {"Name": "診断データを無効にする"}, 24 | "DisableAADCloudSearch": {"Name": "AAD クラウド コンテンツ検索を無効にする","Desc": "職場または学校のアカウントのクラウド コンテンツ検索をオフにする"}, 25 | "DisableAdsOnLockScreen": {"Name": "ロック画面の広告をオフにする"}, 26 | "DisableAeDebug": {"Name": "AEDebugを無効にする","Desc": "デバッガを無効にしてエラー処理を高速化する"}, 27 | "DisableAnimationEffectMaxMin": {"Name": "最大最小アニメーション効果を無効にする","Desc": "ウィンドウを最大化または最小化するときにアニメーション効果を無効にして、ウィンドウの応答を高速化します"}, 28 | "DisableAppendCompletion": {"Name": "自動補完を無効にする","Desc": "インラインオートコンプリートを無効にする (追加補完またはオートフィル)"}, 29 | "DisableAutoDefragIdle": {"Name": "アイドル時の自動デフラグをオフにする","Desc": "アイドル時の自動デフラグを無効にして、SSD の動作寿命を延ばします"}, 30 | "DisableAutoInstallationApps": {"Name": "自動インストールアプリを無効にする"}, 31 | "DisableAutoplay": {"Name": "自動再生を無効にする","Desc": "ウイルス感染を避けるために、ドライブの\"自動再生\"機能を無効にします"}, 32 | "DisableAutoSuggest": {"Name": "自動提案を無効にする","Desc": "自動提案を無効にします (オートコンプリート ドロップダウン)"}, 33 | "DisableAutoWindowsUpdates": {"Name": "自動更新を無効にする","Desc": "Windows の自動更新を無効にする"}, 34 | "DisableBackgroundApps": {"Name": "バックグラウンドアプリをを無効にする"}, 35 | "DisableBootOptimize": {"Name": "起動時の最適化を無効にする","Desc": "起動時にシステムドライブのデフラグを無効にして、SSDの寿命を延ばします"}, 36 | "DisableCrashAutoReboot": {"Name": "クラッシュ時の自動再起動を無効にする","Desc": "システムがブルー スクリーンに遭遇した場合の自動再起動を無効にします"}, 37 | "DisableCustomInking": {"Name": "カスタム手書き入力を無効にする","Desc": "カスタム手書き入力と入力辞書を無効にします"}, 38 | "DisableDeviceSearchHistory": {"Name": "ローカルでの検索履歴を無効にする","Desc": "これらのデバイスでローカルの検索履歴を無効にします"}, 39 | "DisableDiagTrack": {"Name": "診断追跡サービス(DiagTrack)を無効にする","Desc": "DiagTrack - 接続されたユーザー エクスペリエンスとテレメトリ サービスは、接続されたアプリケーション内ユーザー エクスペリエンスをサポートする機能を有効にします。\nさらに、このサービスは、[フィードバックと診断] で診断と使用状況のプライバシー オプション設定が有効になっている場合に、診断情報と使用状況情報 (Windows プラットフォームのエクスペリエンスと品質を向上させるために使用されます) のイベント ドリブン収集と送信を管理します。"}, 40 | "DisabledVBSCodeIntegrity": {"Name": "VBS コードの整合性を無効にする","Desc": "仮想化ベースのコード整合性保護を無効にします"}, 41 | "DisableErrorReporting": {"Name": "エラー報告を無効にする","Desc": "システムのパフォーマンスを向上させるために、画面上のエラー報告を無効にします"}, 42 | "DisableFrequentFolders": {"Name": "よく使うフォルダーを無効にする"}, 43 | "DisableGameBar": {"Name": "ゲームバーとゲームDVRを無効にする","Desc": "ゲーム DVR 機能を使用すると、ゲームプレイをバックグラウンドで録画できます。\nこの機能はゲーム バーにあり、ゲーム DVR 機能を使用してゲームプレイを録画し、スクリーンショットを撮るためのボタンが表示されます。\nただし、速度が低下する可能性があります。バックグラウンドでビデオを録画することでゲームのパフォーマンスを向上させます。"}, 44 | "DisableGoogleUpdateTask": {"Name": "GoogleUpdateタスクを無効にする"}, 45 | "DisableHibernate": {"Name": "休止状態を無効にする"}, 46 | "DisableHybridSleep": {"Name": "ハイブリッドスリープを無効にする"}, 47 | "DisableLockScreen": {"Name": "ロック画面を無効にする"}, 48 | "DisableLowDiskSpaceChecks": {"Name": "ディスク容量不足チェックを無効にする","Desc": "ディスク I/O サブシステムを最適化してシステム パフォーマンスを向上させます"}, 49 | "Disablememorypagination": {"Name": "ページングメモリを無効にする","Desc": "ページングメモリを無効にしてディスク I/O を減らし、アプリケーションのパフォーマンスを向上させます。\n(物理メモリが 1 GB 未満の場合、オプションは無視できます)"}, 50 | "DisableMenuShowDelay": {"Name": "メニューの遅延表示を無効にする","Desc": "システムディスプレイの応答性の最適化"}, 51 | "DisableMicrosoftEdgeUpdateTask": {"Name": "MicrosoftEdgeUpdateTaskを無効にする"}, 52 | "DisableMSACloudSearch": {"Name": "MSAクラウドコンテンツ検索を無効にする","Desc": "Microsoft アカウントのクラウド コンテンツ検索をオフにする"}, 53 | "DisableMSDefender": {"Name": "Microsoft Defenderを無効にする","Desc": "1 クリックで Microsoft Defender を有効または無効にします。\nコンピュータは自動的に再起動します。"}, 54 | "DisableOfferSuggestions": {"Name": "おすすめを無効にする"}, 55 | "DisablePersonalizedAdsStoreApps": {"Name": "ストア アプリのパーソナライズされた広告を無効にする"}, 56 | "DisablePrefetchParameters": {"Name": "プリロードパラメータを無効にする","Desc": "プリロードパラメータを無効にしてSSDの動作寿命を延ばします"}, 57 | "DisablePrintSpooler": {"Name": "印刷スプーラーを無効にする"}, 58 | "DisableRecentFiles": {"Name": "最近使ったファイルを無効にする"}, 59 | "DisableRemoteRegAccess": {"Name": "リモート レジストリ アクセスを無効にする","Desc": "リモート コンピュータからのレジストリ編集を無効にする"}, 60 | "DisableScheduledDefrag": {"Name": "スケジュールされたデフラグを無効にする"}, 61 | "DisableSettingsAppSuggestions": {"Name": "設定アプリの提案を無効にする"}, 62 | "DisableShortcutText": {"Name": "ショートカットテキストを無効にする"}, 63 | "DisableSleep": {"Name": "スリープを無効にする"}, 64 | "DisableStartMenuAppSuggestions": {"Name": "スタート メニューのアプリの提案を無効にする"}, 65 | "DisableSyncProviderNotifications": {"Name": "同期プロバイダーの通知を無効にする"}, 66 | "DisableSystemRestore": {"Name": "システムの復元を無効にする"}, 67 | "DisableTailoredExperiences": {"Name": "パーソナライズされたエクスペリエンスを無効にする"}, 68 | "DisableTipsAndSuggestions": {"Name": "ヒントと提案を無効にする"}, 69 | "DisableTurnOffDisplay": {"Name": "ディスプレイの電源をオフにするを無効にする"}, 70 | "DisableVisualStudioTelemetry": {"Name": "VisualStudio テレメトリを無効にする"}, 71 | "DisableWCE": {"Name": "WCE 拡張機能を無効にする","Desc": "Windows カスタマー エクスペリエンスを無効にする\n\n- プロキシ: このタスクは、Microsoft カスタマー エクスペリエンス向上プログラムにオプトインしている場合、autochk SQM データを収集してアップロードします。\n- Microsoft Compatibility Appraiser: Microsoft カスタマー エクスペリエンス向上プログラムにオプトインした場合は、プログラム テレメトリ情報を収集します。"}, 72 | "DisableWebSearch": {"Name": "Web検索をオフにする","Desc": "オンライン検索をオフにし、タスクバー検索を実行するときに自分のアカウントの Bing Web 結果のみを含めます"}, 73 | "DisableWebSearchStartMenu": {"Name": "Web 検索を無効にする","Desc": "スタートメニューの Web 検索を無効にします"}, 74 | "DisableWindowsFeedback": {"Name": "Windows フィードバックを無効にする"}, 75 | "DisableWindowsSearch": {"Name": "Windows サーチを無効にする"}, 76 | "EnableDarkMode": {"Name": "ダークモードを有効にする"}, 77 | "Explorer": {"Name": "ファイル エクスプローラー"}, 78 | "HideMostUsedApps": {"Name": "よく使うアプリを非表示にする","Desc": "[スタート] メニューの [\"よく使用されるアプリの表示\"] をオフにします"}, 79 | "HideStartMenuAccountNotifications": {"Name": "アカウントの通知を非表示にする","Desc": "[スタート] メニューの [\"アカウント通知を表示\"] をオフにします"}, 80 | "HideStartMenuRecentlyAdded": {"Name": "最近追加したアプリを非表示にする","Desc": "[スタート] メニューの [\"最近追加したアプリを表示\"] をオフにします"}, 81 | "HideStartMenuRecentlyOpened": {"Name": "最近開いたアイテムを非表示にする","Desc": "[スタート] メニューの [\"スタート、ジャンプ リスト、ファイル エクスプローラーで最近開いたアイテムを表示する\"をオフにします"}, 82 | "HideStartMenuRecommendations": {"Name": "ヒントを非表示にする","Desc": "[スタート] メニューの [\"ヒント、ショートカット、新しいアプリなどのおすすめを表示する\"をオフにします"}, 83 | "HideWindowsSecurityNoncriticalNotifications": {"Name": "重要でない WS 通知を非表示にする","Desc": "Windows セキュリティからの重要な通知のみを表示します。\n[すべての GP 通知を抑制する] 設定が有効になっている場合、この設定は効果がありません。"}, 84 | "HideWindowsSecurityNotifications": {"Name": "WS通知を非表示にする","Desc": "Windows セキュリティからの通知をすべて非表示にします。"}, 85 | "HostsEdit_BtnImportFromFile": {"Name": "ファイルからインポート"}, 86 | "HostsEdit_BtnImportFromLink": {"Desc": "リンクからhostsへインポート"}, 87 | "HostsEdit_BtnReload": {"Name": "hostsファイルの再読み込み"}, 88 | "HostsEdit_BtnResetDefault": {"Name": "デフォルトを復元"}, 89 | "HostsEdit_BtnSave": {"Name": "Text_Save"}, 90 | "HostsEdit_BtnSaveAs": {"Name": "名前を付けて保存"}, 91 | "HostsEdit_TxtSelectLink": {"Name": "リンクを選択してブロック リストをhostsにインポートします。"}, 92 | "IncreaseIconCache": {"Name": "アイコンキャッシュを増やす","Desc": "システムアイコンのキャッシュを増やし、デスクトップの表示を高速化します。"}, 93 | "IoPageLockLimit": {"Name": "IO ページ ロック制限","Desc": "デフォルトのメモリ設定を最適化してシステムパフォーマンスを向上させます"}, 94 | "Link_ClearStartMenu": {"Name": "スタートメニューをクリアする"}, 95 | "Link_DeselectAll": {"Name": "Text_DeselectAll"}, 96 | "Link_SelectAll": {"Name": "Text_SelectAll"}, 97 | "LinkResolveIgnoreLinkInfo": {"Name": "リンク解決時に LinkInfo を無視する","Desc": "ローミング中にシェルのショートカットを追跡しません"}, 98 | "MouseHoverTime": {"Name": "ホバー時間","Desc": "タスクバーウィンドウのプレビューの表示速度を高速化します。"}, 99 | "NoInternetOpenWith": {"Name": "インターネットの『プログラムから開く』を無効にする","Desc": "インターネット ファイル アソシエーション サービスを無効にする"}, 100 | "NoResolveSearch": {"Name": "リンク解決時の検索を無効にする","Desc": "シェル リンクを解決するときに検索ベースの方法を使用しません。"}, 101 | "NoResolveTrack": {"Name": "リンク解決時の追跡を無効にする","Desc": "シェル リンクを解決するときは、トレース ベースの方法を使用しません。\nこの設定により、システムはリンクを解決するために NTFS トレース機能を使用できなくなります。"}, 102 | "NumLockonStartup": {"Name": "起動時のNumロック"}, 103 | "OpenFileExplorerThisPC": {"Name": "この PC でエクスプローラーを開く"}, 104 | "OptimizeNetworkTransfer": {"Name": "ネットワーク転送を最適化する","Desc": "ネットワーク設定を最適化して転送パフォーマンスを向上させます"}, 105 | "Optimizeprocessorperformance": {"Name": "プロセッサのパフォーマンスを最適化する","Desc": "プロセッサのパフォーマンスを最適化して、アプリケーションやゲームなどをよりスムーズに実行します。"}, 106 | "OptimizeRefreshPolicy": {"Name": "更新ポリシーを最適化する","Desc": "ディスク I/O サブシステムを最適化してシステム パフォーマンスを向上させます"}, 107 | "Optional": {"Name": "オプション"}, 108 | "PackageManager_BtnDisable": {"Desc": "すべてのユーザーに対して有効化/無効化"}, 109 | "PackageManager_DeprovisionPackage": {"Name": "Text_DeprovisionPackage","Desc": "アプリ パッケージのプロビジョニングを解除すると、デバイスの新しいユーザーにアプリが自動的にインストールされなくなります。"}, 110 | "PackageManager_InstalledAllUsers": {"Name": "Text_InstalledAllUsers","Desc": "すべてのユーザーによってインストールされたパッケージのリストを表示します。"}, 111 | "PackageManager_Mode": {"Desc": "インストール モード: インストールされているパッケージのリストを表示します。\n非インストール モード: コンピュータ上にあるものの、現在のユーザーによってインストールされていないパッケージのリストを表示します。"}, 112 | "Privacy": {"Name": "プライバシー"}, 113 | "ShowExtensions": {"Name": "拡張子を表示"}, 114 | "ShowHidden": {"Name": "隠しファイルを表示"}, 115 | "ShowHiddenSystem": {"Name": "システムファイルを表示"}, 116 | "ShowThisPC": {"Name": "このPC を表示"}, 117 | "ShutdownAcceleration": {"Name": "シャットダウンの高速化","Desc": "シャットダウン時のアプリケーションのアイドル状態を減らし、シャットダウン プロセスを改善します。"}, 118 | "SnippingPrintScreen": {"Name": "PrintScreenキーでSnipping Toolを起動"}, 119 | "StartMenu": {"Name": "スタートメニュー"}, 120 | "System": {"Name": "システム"}, 121 | "Text_Architecture": "アーキテクチャ", 122 | "Text_BackgroundImage": "背景画像", 123 | "Text_Cancel": "キャンセル", 124 | "Text_CheckUpdate": "アップデートの確認", 125 | "Text_ClearStartMenu_Confirm": "[スタート] メニューのレイアウトをクリアしてもよろしいですか?\n(バックアップ ファイル \"WinTune_StartMenuLayout_xxxx.json\" が作成されます)", 126 | "Text_ClearStartMenu_Done": "スタートメニューのクリア完了!", 127 | "Text_Close": "閉じる", 128 | "Text_CommandLine": "コマンドライン", 129 | "Text_ConnectionFailed": "サーバーへの接続に失敗しました。", 130 | "Text_CurrentVersion": "現行バージョン", 131 | "Text_Custom": "カスタム", 132 | "Text_DefaultImage": "デフォルトの画像", 133 | "Text_Delete": "削除", 134 | "Text_DeprovisionPackage": "パッケージのプロビジョニングを解除する", 135 | "Text_DeselectAll": "すべて選択解除", 136 | "Text_Details": "詳細", 137 | "Text_Disable": "無効", 138 | "Text_Disabled": "無効済", 139 | "Text_DisableMSDefender0": "Microsoft Defender を有効にするには、コンピュータを再起動する必要があります。\nこれを実行してもよろしいですか?", 140 | "Text_DisableMSDefender1": "Microsoft Defender を無効にするには、コンピュータを再起動する必要があります。\nこれを実行してもよろしいですか?", 141 | "Text_DisplayName": "表示名", 142 | "Text_EffectivePath": "有効なパス", 143 | "Text_Enable": "有効", 144 | "Text_Enabled": "有効済", 145 | "Text_FamilyName": "苗字", 146 | "Text_FindRegistry": "レジストリ内で検索", 147 | "Text_FullName": "フルネーム", 148 | "Text_Homepage": "ホームページ", 149 | "Text_HR_Optimize": "------- 最適化 -------", 150 | "Text_HR_Tools": "-------- ツール --------", 151 | "Text_Install": "インストール", 152 | "Text_InstalledAllUsers": "すべてのユーザー", 153 | "Text_InstalledDate": "インストール日", 154 | "Text_InstalledMode": "インストールモード", 155 | "Text_InstalledPath": "インストールされたパス", 156 | "Text_Name": "名前", 157 | "Text_NewestVersion": "最新バージョン", 158 | "Text_No": "いいえ", 159 | "Text_None": "なし", 160 | "Text_NotInstalledMode": "未インストールモード", 161 | "Text_NoUpdate": "利用可能なアップデートはありません。最新バージョンを使用しています。", 162 | "Text_OK": "OK", 163 | "Text_OpenTarget": "ターゲットの位置", 164 | "Text_Properties": "プロパティ", 165 | "Text_PublisherDisplayName": "発行者", 166 | "Text_Save": "保存", 167 | "Text_SearchOnline": "オンラインで検索", 168 | "Text_SelectAll": "すべて選択", 169 | "Text_SignatureKind": "署名の種類", 170 | "Text_Status": "状態", 171 | "Text_Target": "対象", 172 | "Text_Type": "種類", 173 | "Text_Uninstall": "アンインストール", 174 | "Text_Update": "アップデート", 175 | "Text_UpdateFailed": "アップデートに失敗しました。後でもう一度お試しください。", 176 | "Text_Updating": "更新中", 177 | "Text_Version": "バージョン", 178 | "Text_WaitDlg": "お待ちください...", 179 | "Text_WhatsNew": "新着情報", 180 | "Text_Yes": "はい", 181 | "UninstallOneDrive": {"Name": "OneDrive をアンインストールする"}, 182 | "UnpinChat": {"Name": "チャット"}, 183 | "UnpinCopilot": {"Name": "Copilot"}, 184 | "UnpinCortana": {"Name": "コルタナ"}, 185 | "UnpinEdge": {"Name": "Edge"}, 186 | "UnpinFileExplorer": {"Name": "ファイル エクスプローラー"}, 187 | "UnpinMail": {"Name": "メール"}, 188 | "UnpinNewsandInterests": {"Name": "ニュースと関心事項"}, 189 | "UnpinSearch": {"Name": "検索"}, 190 | "UnpinStore": {"Name": "ストア"}, 191 | "UnpinTaskbar": {"Name": "タスクバー"}, 192 | "UnpinTaskView": {"Name": "タスクビュー"}, 193 | "UnpinWidgets": {"Name": "ウィジェット"}, 194 | "VerCtrl": {"Desc": "クリックして更新を確認します","Desc1": "新しいバージョンが利用可能です\n(クリックして詳細表示)"} 195 | } 196 | -------------------------------------------------------------------------------- /Lang/ko.json: -------------------------------------------------------------------------------- 1 | { 2 | "Name": "한국어", 3 | "Translator": "비너스걸", 4 | "Flag": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFzGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDIgNzkuYTZhNjM5NiwgMjAyNC8wMy8xMi0wNzo0ODoyMyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI1LjExIChXaW5kb3dzKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjQtMDctMjhUMDk6NDk6NTYrMDc6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDI0LTA3LTI4VDEwOjA0OjEwKzA3OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDI0LTA3LTI4VDEwOjA0OjEwKzA3OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxY2VlNTQ3My01MjZhLTZiNDMtOTgyYi0xNjA1NDE3YjE4YTYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2NGJmM2IyNy04Y2EzLTU2NGYtOGU0NS02NDgxOTI0ZGM0MjMiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDphODRjMzZiMS0yN2YzLTg4NDctOWY2YS03M2ZjMTE2MjQzOWUiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmE4NGMzNmIxLTI3ZjMtODg0Ny05ZjZhLTczZmMxMTYyNDM5ZSIgc3RFdnQ6d2hlbj0iMjAyNC0wNy0yOFQwOTo0OTo1NiswNzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI1LjExIChXaW5kb3dzKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MWNlZTU0NzMtNTI2YS02YjQzLTk4MmItMTYwNTQxN2IxOGE2IiBzdEV2dDp3aGVuPSIyMDI0LTA3LTI4VDEwOjA0OjEwKzA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjUuMTEgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqpvOisAAANRSURBVDiNhZRLSJRRFMcvrSKkWrRpE2HtCt20skWb1GUEkSCJ9NJ8pY6jhelUOKP4QoTBjZCMoBQEjaY1gUEL8zGg1EYq7eGoM+oo6Tydb77x3zn3+75Bh8QL/5l77znnd+89595PABCGVFWVSiQShnJIFprrZXGflMu23d1dYfzvZYhUoA7Kor5T1RpSxM1JoKxDgbrsihJHPH642Dc1ft9AURRXIBBkR9DqoPF/xTZugUCAx66DgD3DQ+9QXmqG2z0DBid3Q0Ypfcw29qkgX+ebEWb3JIF6DjLnfyygpLgazdZOPCiqgsezhF0yKCniOY9nGffvVqChvgk2aweWl70MzWSWpEYj0bFGMtZU15PjQ4yOfJBH2tnZgWIyIZ6RIcV9nuM2NelG4xMrKsrMEswMWk5w3rLD4TAmyeGZpRktzZ3QErQF5fx5qLRmXBdnSKU5hfy5dbR1w9Jgw+SEG8ygdGSLSCRii8Vi0mFpaRneFZ88Wqi2jtdD7MRJqGlpWrqPHtH+K0qhks/KilfGcGNGNBq1MtBBkisY7Rep91qZFqyr7XIBLpQO4/6l24inn0EsEU/6c6zOcAj+4YlgMJh0iCGB00/H0X4uG3OnzqL+ShGEZQ7CPAHxcBYtN+vJyZ/051hmSCANbMbufv/+I6vL7d7AV4jr7wnyCaJuGsdKhnC81AmR04+afrf0WVz0yBhjl8SyCjp39tbWFiY+T+FRrUVWTNYkFEZ6zSgBHBD5rzRdfYF001tsRLWcP6ci1tY0YGJ8Csxglny/4XBkzFT5WMLMpid4OfhaO0o4iKq+aVysG5WqfDFNCwWk7YPrIzpau1FnbkQ1xVIOx5glQqGQvNizM19QWV6Lrk478vPuYGH+p/4+qJ6xkCZZ27i05d0ohK2pHW2tXfj27TvoUmcyi4vCeZRPr98xiMJbxXSvprG+7qdjbGNzc5Ou5F8p7vMc29insKAYjr4B+fSYwSz5UoxP0MbGhssoCvUpcB1+v3+feI5tkE9wifuuvYx9XxvKgwgEA3afz4e1tTUpBuyVMc8+9LWxR6ORgz9f29vbvEtBgVmrq6tOClI5MEUq22i3WZQCGXMokJwFBbFyCNDo9Xp7dVlonEs7FAz7H/Af1bYHCwPiEKwAAAAASUVORK5CYII=", 5 | "AUOptions": {"Name": "AU옵션","Desc": "Windows 업데이트를 다운로드하기 전에 알림 설정"}, 6 | "AutoEndTasks": {"Name": "작업 자동 종료","Desc": "시스템 충돌을 방지하기 위해 정지된 프로세스를 닫습니다."}, 7 | "BtnHostsEdit": {"Name": "호스트 편집"}, 8 | "BtnPackageManager": {"Name": "UWP 앱"}, 9 | "BtnRestartExplorer": {"Name": "탐색기 다시 시작"}, 10 | "BtnStartupManager": {"Name": "시작 관리자"}, 11 | "BtnSys_Close": {"Desc": "Text_Close"}, 12 | "BtnSys_Language": {"Desc": "언어"}, 13 | "BtnSys_LoadOptimizeConfig": {"Desc": "최적화 구성 파일 로드"}, 14 | "BtnSys_Minimize": {"Desc": "최소화"}, 15 | "BtnSys_ReloadTab": {"Desc": "이 탭 새로 고침"}, 16 | "BtnSys_SaveImage": {"Desc": "셀프 캡처 및 이미지 저장"}, 17 | "BtnSys_SaveOptimizeConfigAll": {"Desc": "모든 최적화 구성을 파일에 저장"}, 18 | "BtnSys_SaveOptimizeConfigTab": {"Desc": "이 탭의 최적화 구성만 파일에 저장"}, 19 | "BtnSys_Search": {"Desc": "최적화 검색"}, 20 | "BtnSys_Setting": {"Desc": "설정"}, 21 | "BtnSys_Theme": {"Desc": "테마"}, 22 | "ClassicContextMenu": {"Name": "클래식 상황에 맞는 메뉴"}, 23 | "DiagnosticDataOff": {"Name": "진단 데이터 끄기"}, 24 | "DisableAADCloudSearch": {"Name": "클라우드 콘텐츠 검색 AAD 끄기","대상Desc": "회사 또는 학교 계정에 대한 클라우드 콘텐츠 검색 끄기"}, 25 | "DisableAdsOnLockScreen": {"Name": "잠금 화면에서 광고 비활성화"}, 26 | "DisableAeDebug": {"Name": "AeDebug 비활성화","Desc": "디버거를 비활성화하여 오류 처리 속도를 높입니다"}, 27 | "DisableAnimationEffectMaxMin": {"Name": "애니메이션 효과 최대 최소 비활성화:","Desc": "창 응답 속도를 높이기 위해 창을 최대화하거나 최소화할 때 애니메이션 효과를 닫습니다"}, 28 | "DisableAppendCompletion": {"Name": "추가 완료 비활성화","Desc": "인라인 자동 완성 비활성화 (완료 추가 또는 자동 채우기)"}, 29 | "DisableAutoDefragIdle": {"Name": "유휴 자동 조각 모음 비활성화","Desc": "SSD의 작동 수명을 늘리기 위해 유휴 상태일 때 자동 조각 모음 비활성화합니다"}, 30 | "DisableAutoInstallationApps": {"Name": "자동 설치 앱 비활성화"}, 31 | "DisableAutoplay": {"Name": "자동재생 비활성화","Desc": "바이러스 감염을 방지하기 위해 드라이브에서 "자동 재생" 기능을 비활성화합니다"}, 32 | "DisableAutoSuggest": {"Name": "자동 제안 비활성화","Desc": "자동 제안 비활성화 (자동 완성 드롭다운)"}, 33 | "DisableAutoWindowsUpdates": {"Name": "자동 Windows 업데이트 비활성화","Desc": "자동 업데이트 비활성화"}, 34 | "DisableBackgroundApps": {"Name": "백그라운드 앱 비활성화"}, 35 | "DisableBootOptimize": {"Name": "부팅 최적화 비활성화","Desc": "SSD의 작동 수명을 늘리기 위해 부팅 시 시스템 드라이브 조각 모음을 비활성화합니다"}, 36 | "DisableCrashAutoReboot": {"Name": "충돌 자동 재부팅 비활성화","Desc": "시스템에 블루 스크린이 발생하면 자동 재부팅을 비활성화합니다"}, 37 | "DisableCustomInking": {"Name": "사용자 지정 잉크 비활성화","Desc": "사용자 지정 입력 및 타이핑 사전 비활성화합니다"}, 38 | "DisableDeviceSearchHistory": {"Name": "로컬에서 검색 기록 끄기","Desc": "이 기기에서 로컬로 검색 기록을 끕니다"}, 39 | "DisableDiagTrack": {"Name": "DiagTrack 비활성화","Desc": "DiagTrack - 연결된 사용자 환경 및 원격 측정 서비스를 사용하면 응용 프로그램 내 및 연결된 사용자 환경을 지원하는 기능을 사용할 수 있습니다.\n또한 이 서비스는 피드백 및 진단에서 진단 및 사용 개인 정보 보호 옵션 설정이 활성화된 경우 진단 및 사용 정보의 이벤트 기반 수집 및 전송 (Windows 플랫폼의 환경 및 품질 개선에 사용됨)을 관리합니다."}, 40 | "DisabledVBSCodeIntegrity": {"Name": "비활성화된 VBS 코드 무결성","Desc": "가상화 기반 코드 무결성 보호 비활성화합니다"}, 41 | "DisableErrorReporting": {"Name": "오류 보고 비활성화","Desc": "시스템 성능 향상을 위해 화면 오류 보고 기능 비활성화합니다"}, 42 | "DisableFrequentFolders": {"Name": "자주 사용하는 폴더 비활성화"}, 43 | "DisableGameBar": {"Name": "Game Bar 및 게임 DVR 비활성화","Desc": "게임 DVR 기능을 사용하면 배경에서 게임 플레이를 녹화할 수 있습니다.\n게임 DVR 기능을 사용하여 게임 플레이를 녹화하고 스크린샷을 찍을 수 있는 버튼을 제공하는 Game Bar에 위치해 있습니다.\n하지만 배경에서 비디오를 녹화하면 게임 성능이 느려질 수 있습니다."}, 44 | "DisableGoogleUpdateTask": {"Name": "GoogleUpdateTask 비활성화"}, 45 | "DisableHibernate": {"Name": "최대 절전 모드 비활성화"}, 46 | "DisableHybridSleep": {"Name": "하이브리드 절전 비활성화"}, 47 | "DisableLockScreen": {"Name": "잠금 화면 비활성화"}, 48 | "DisableLowDiskSpaceChecks": {"Name": "디스크 공간 부족 검사 비활성화","Desc": "시스템 성능을 향상시키기 위해 디스크 I/O 하위 시스템 최적화합니다"}, 49 | "Disablememorypagination": {"Name": "메모리 페이지화 비활성화","Desc": "메모리 페이지화를 비활성화하고 디스크 입출력을 줄여 응용 프로그램 성능을 향상시킵니다.\n(물리적 메모리가 1GB 미만인 경우 옵션이 무시될 수 있습니다)"}, 50 | "DisableMenuShowDelay": {"Name": "메뉴 표시 지연 비활성화","Desc": "시스템 디스플레이의 최적화된 응답 속도"}, 51 | "DisableMicrosoftEdgeUpdateTask": {"Name": "MicrosoftEdgeUpdateTask 비활성화"}, 52 | "DisableMSACloudSearch": {"Name": "클라우드 콘텐츠 검색 MSA 끄기","Desc": "Microsoft 계정에 대한 클라우드 콘텐츠 검색 끄기"}, 53 | "DisableMSDefender": {"Name": "Microsoft Defender 비활성화","Desc": "1 클릭으로 Microsoft Defender를 활성화/비활성화합니다.\n컴퓨터가 자동으로 다시 시작됩니다."}, 54 | "DisableOfferSuggestions": {"Name": "오퍼 제안 비활성화"}, 55 | "DisablePersonalizedAdsStoreApps": {"Name": "PersonalizedAds StoreApp 비활성화"}, 56 | "DisablePrefetchParameters": {"Name": "프리페치 매개변수 비활성화","Desc": "SSD 작동 수명을 늘리기 위해 프리페치 매개변수를 비활성화합니다."}, 57 | "DisablePrintSpooler": {"Name": "인쇄 스풀러 비활성화"}, 58 | "DisableRecentFiles": {"Name": "최근 파일 비활성화"}, 59 | "DisableRemoteRegAccess": {"Name": "원격 등록 액세스 비활성화","Desc": "원격 컴퓨터에서 레지스트리 수정 비활성화"}, 60 | "DisableScheduledDefrag": {"Name": "예약된 조각 모음 비활성화"}, 61 | "DisableSettingsAppSuggestions": {"Name": "설정 앱 제안 비활성화"}, 62 | "DisableShortcutText": {"Name": "바로가기 텍스트 비활성화"}, 63 | "DisableSleep": {"Name": "절전 모드 비활성화"}, 64 | "DisableStartMenuAppSuggestions": {"Name": "시작 메뉴 앱 제안 비활성화"}, 65 | "DisableSyncProviderNotifications": {"Name": "동기화 공급자 알림 비활성화"}, 66 | "DisableSystemRestore": {"Name": "시스템 복원 비활성화"}, 67 | "DisableTailoredExperiences": {"Name": "맞춤형 경험 비활성화"}, 68 | "DisableTipsAndSuggestions": {"Name": "팁 및 제안 비활성화"}, 69 | "DisableTurnOffDisplay": {"Name": "디스플레이 끄기 비활성화"}, 70 | "DisableVisualStudioTelemetry": {"Name": "VisualStudio 원격 측정 비활성화"}, 71 | "DisableWCE": {"Name": "WCE 개선 비활성화","Desc": "Windows 고객 환경 개선 비활성화\n\n- 프록시: 이 작업은 Microsoft 고객 환경 개선 프로그램을 선택한 경우 자동 확인 SQM 데이터를 수집하고 업로드합니다.\n- Microsoft 호환성 평가자: 다음과 같은 경우 프로그램 원격 측정 정보를 수집합니다. Microsoft 고객 환경 개선 프로그램에 참여했습니다."}, 72 | "DisableWebSearch": {"Name": "웹 검색 비활성화","Desc": "작업 표시줄에서 검색을 수행할 때 온라인 검색을 비활성화하고 귀하의 계정에 대해서만 Bing의 웹 결과를 포함합니다."}, 73 | "DisableWebSearchStartMenu": {"Name": "WebSearch 시작 메뉴 비활성화","Desc": "시작 메뉴에서 웹 검색을 비활성화합니다."}, 74 | "DisableWindowsFeedback": {"Name": "Windows 피드백 비활성화"}, 75 | "DisableWindowsSearch": {"Name": "Windows 검색 비활성화"}, 76 | "EnableDarkMode": {"Name": "다크 모드 활성화"}, 77 | "Explorer": {"Name": "파일 탐색기"}, 78 | "HideMostUsedApps": {"Name": "가장 많이 사용하는 앱 숨기기","Desc": "시작 메뉴에서 \"가장 많이 사용하는 앱 표시\"를 끄세요."}, 79 | "HideStartMenuAccountNotifications": {"Name": "계정 관련 알림 숨기기","Desc": "시작 메뉴에서 \"계정 관련 알림 표시\"를 끄세요."}, 80 | "HideStartMenuRecentlyAdded": {"Name": "최근 추가된 앱 숨기기","Desc": "시작 메뉴에서 \"최근 추가된 앱 표시\"를 끄세요."}, 81 | "HideStartMenuRecentlyOpened": {"Name": "최근에 열어본 항목 숨기기","Desc": "시작 메뉴에서 \"시작, 점프 목록 및 파일 탐색기에 최근에 연 항목 표시\"를 끕니다."}, 82 | "HideStartMenuRecommendations": {"Name": "추천 숨기기","Desc": "시작 메뉴에서 \"팁, 바로가기, 새 앱 등에 대한 권장 사항 표시\"를 끕니다."}, 83 | "HideWindowsSecurityNoncriticalNotifications": {"Name": "WS의 중요하지 않은 알림 숨기기","Desc": "Windows 보안의 중요한 알림만 표시합니다.\n모든 알림 억제 GP 설정이 활성화된 경우 이 설정은 효과가 없습니다."}, 84 | "HideWindowsSecurityNotifications": {"Name": "WS 알림 숨기기","Desc": "Windows 보안에서 모든 알림을 숨깁니다."}, 85 | "HostsEdit_BtnImportFromFile": {"Name": "파일에서 가져오기"}, 86 | "HostsEdit_BtnImportFromLink": {"Desc": "링크에서 호스트로 가져오기"}, 87 | "HostsEdit_BtnReload": {"Name": "호스트 파일 다시 로드"}, 88 | "HostsEdit_BtnResetDefault": {"Name": "기본값 재설정"}, 89 | "HostsEdit_BtnSave": {"Name": "Text_Save"}, 90 | "HostsEdit_BtnSaveAs": {"Name": "다른 이름으로 저장"}, 91 | "HostsEdit_TxtSelectLink": {"Name": "호스트로 블록 목록 가져오기 링크 선택:"}, 92 | "IncreaseIconCache": {"Name": "아이콘 캐시 늘리기","Desc": "시스템 아이콘 캐시를 늘리고 데스크톱 디스플레이 속도 향상합니다"}, 93 | "IoPageLockLimit": {"Name": "Io 페이지 잠금 제한","Desc": "메모리의 기본 설정을 최적화하여 시스템 성능 향상합니다"}, 94 | "Link_ClearStartMenu": {"Name": "시작 메뉴 지우기"}, 95 | "Link_DeselectAll": {"Name": "Text_DeselectAll"}, 96 | "Link_SelectAll": {"Name": "Text_SelectAll"}, 97 | "LinkResolveIgnoreLinkInfo": {"Name": "링크 해결 LinkInfo 무시","Desc": "로밍 중에 셸 바로가기를 추적하지 안습니다"}, 98 | "MouseHoverTime": {"Name": "마우스 호버 시간","Desc": "작업 표시줄 창 미리 보기의 표시 속도를 높입니다"}, 99 | "NoInternetOpenWith": {"Name": "인터넷 OpenWith 없음","Desc": "인터넷 파일 연결 서비스 끄기"}, 100 | "NoResolveSearch": {"Name": "해결되지 않은 검색","Desc": "셸 바로가기를 확인할 때 검색 기반 방법을 사용하지 않습니다"}, 101 | "NoResolveTrack": {"Name": "해결 추적 없음","Desc": "셸 바로가기를 확인할 때 추적 기반 방법을 사용하지 않습니다.\n이 설정은 시스템이 바로가기를 해결하기 위해 NTFS 추적 기능을 사용하는 것을 방지합니다."}, 102 | "NumLockonStartup": {"Name": "시작 시 Num Lock"}, 103 | "OpenFileExplorerThisPC": {"Name": "파일 탐색기 열기"}, 104 | "OptimizeNetworkTransfer": {"Name": "네트워크 전송 최적화","Desc": "네트워크 설정을 최적화하여 전송 성능 향상"}, 105 | "Optimizeprocessorperformance": {"Name": "프로세서 성능 최적화","Desc": "프로세서 성능을 최적화하여 응용 프로그램, 게임 등을 더 원활하게 실행할 수 있습니다."}, 106 | "OptimizeRefreshPolicy": {"Name": "새로 고침 정책 최적화","Desc": "디스크 I/O 하위 시스템을 최적화하여 시스템 성능 향상"}, 107 | "Optional": {"Name": "옵션"}, 108 | "PackageManager_BtnDisable": {"Desc": "모든 사용자 활성화/비활성화"}, 109 | "PackageManager_DeprovisionPackage": {"Name": "Text_DeprovisionPackage","Desc": "앱 패키지를 프로비저닝 해제하여 기기의 새 사용자에게 더 이상 앱이 자동으로 설치되지 않도록 합니다."}, 110 | "PackageManager_InstalledAllUsers": {"Name": "Text_InstalledAllUsers","Desc": "모든 사용자로 설치한 패키지 목록을 표시합니다."}, 111 | "PackageManager_Mode": {"Desc": "설치 모드: 설치된 패키지 목록을 표시합니다.\n설치되지 않음 모드: 컴퓨터에 있지만 현재 사용자가 설치하지 않은 목록을 표시합니다."}, 112 | "Privacy": {"Name": "개인 정보 보호"}, 113 | "ShowExtensions": {"Name": "확장 프로그램 표시"}, 114 | "ShowHidden": {"Name": "숨김 표시"}, 115 | "ShowHiddenSystem": {"Name": "숨김 시스템 표시"}, 116 | "ShowThisPC": {"Name": "이 PC 표시"}, 117 | "ShutdownAcceleration": {"Name": "종료 가속","Desc": "종료 시 응용 프로그램 유휴 상태를 줄여 종료 프로세스 개선합니다"}, 118 | "SnippingPrintScreen": {"Name": "PrintScreen 스니핑"}, 119 | "StartMenu": {"Name": "시작 메뉴"}, 120 | "System": {"Name": "시스템"}, 121 | "Text_Architecture": "구조", 122 | "Text_BackgroundImage": "배경 이미지", 123 | "Text_Cancel": "취소", 124 | "Text_CheckUpdate": "업데이트 확인", 125 | "Text_ClearStartMenu_Confirm": "시작 메뉴 레이아웃을 지우시겠습니까?\n(백업 파일 \"WinTune_StartMenuLayout_xxxx.json\"이 생성됩니다)", 126 | "Text_ClearStartMenu_Done": "시작 메뉴 지우기 완료!", 127 | "Text_Close": "닫기", 128 | "Text_CommandLine": "명령줄", 129 | "Text_ConnectionFailed": "서버 연결에 실패했습니다.", 130 | "Text_CurrentVersion": "현재 버전", 131 | "Text_Custom": "사용자 지정", 132 | "Text_DefaultImage": "기본 이미지", 133 | "Text_Delete": "삭제", 134 | "Text_DeprovisionPackage": "프로비저닝 패키지", 135 | "Text_DeselectAll": "모두 선택 취소", 136 | "Text_Details": "세부 사항", 137 | "Text_Disable": "비활성화", 138 | "Text_Disabled": "비활성화됨", 139 | "Text_DisableMSDefender0": "Microsoft Defender를 활성화하려면 컴퓨터를 다시 시작해야 합니다.\n이 작업을 수행하시겠습니까?", 140 | "Text_DisableMSDefender1": "Microsoft Defender를 비활성화하려면 컴퓨터를 다시 시작해야 합니다.\n이 작업을 수행하시겠습니까?", 141 | "Text_DisplayName": "표시 이름", 142 | "Text_EffectivePath": "유효 경로", 143 | "Text_Enable": "활성화", 144 | "Text_Enabled": "활성화됨", 145 | "Text_FamilyName": "성", 146 | "Text_FindRegistry": "레지스트리에서 찾기", 147 | "Text_FullName": "전체 이름", 148 | "Text_Homepage": "홈페이지", 149 | "Text_HR_Optimize": "------- 최적화 -------", 150 | "Text_HR_Tools": "-------- 도구 --------", 151 | "Text_Install": "설치", 152 | "Text_InstalledAllUsers": "모든 사용자", 153 | "Text_InstalledDate": "설치된 날짜", 154 | "Text_InstalledMode": "설치된 모드", 155 | "Text_InstalledPath": "설치된 경로", 156 | "Text_Name": "이름", 157 | "Text_NewestVersion": "최신 버전", 158 | "Text_No": "아니오", 159 | "Text_None": "없음", 160 | "Text_NotInstalledMode": "설치되지 않은 모드", 161 | "Text_NoUpdate": "사용 가능한 업데이트가 없습니다. 최신 버전을 사용하고 있습니다.", 162 | "Text_OK": "확인", 163 | "Text_OpenTarget": "대상 위치", 164 | "Text_Properties": "속성", 165 | "Text_PublisherDisplayName": "발행자", 166 | "Text_Save": "저장", 167 | "Text_SearchOnline": "온라인으로 검색", 168 | "Text_SelectAll": "모두 선택", 169 | "Text_SignatureKind": "서명 유형", 170 | "Text_Status": "상태", 171 | "Text_Target": "대상", 172 | "Text_Type": "유형", 173 | "Text_Uninstall": "설치 제거", 174 | "Text_Update": "업데이트", 175 | "Text_UpdateFailed": "업데이트하지 못했습니다. 나중에 다시 시도해 주세요.", 176 | "Text_Updating": "업데이트 중", 177 | "Text_Version": "버전", 178 | "Text_WaitDlg": "기다리세요...", 179 | "Text_WhatsNew": "새로운 소식", 180 | "Text_Yes": "예", 181 | "UninstallOneDrive": {"Name": "OneDrive 제거"}, 182 | "UnpinChat": {"Name": "채팅"}, 183 | "UnpinCopilot": {"Name": "Copilot"}, 184 | "UnpinCortana": {"Name": "Cortana"}, 185 | "UnpinEdge": {"Name": "Edge"}, 186 | "UnpinFileExplorer": {"Name": "파일 탐색기"}, 187 | "UnpinMail": {"Name": "메일"}, 188 | "UnpinNewsandInterests": {"Name": "뉴스 및 관심 분야"}, 189 | "UnpinSearch": {"Name": "검색"}, 190 | "UnpinStore": {"Name": "스토어"}, 191 | "UnpinTaskbar": {"Name": "작업 표시줄"}, 192 | "UnpinTaskView": {"Name": "태스크뷰"}, 193 | "UnpinWidgets": {"Name": "위젯"}, 194 | "VerCtrl": {"Desc": "업데이트를 확인하려면 클릭하세요.","Desc1": "새로운 버전이 있습니다\n(자세한 내용을 보려면 클릭하세요)"} 195 | } 196 | -------------------------------------------------------------------------------- /Lang/zh_cn.json: -------------------------------------------------------------------------------- 1 | { 2 | "Name": "中文(简体)", 3 | "Translator": "Jvcon", 4 | "Flag": "iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAACXBIWXMAAHYcAAB2HAGnwnjqAAAE7mlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4xLWMwMDEgNzkuMTQ2Mjg5OSwgMjAyMy8wNi8yNS0yMDowMTo1NSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI1LjMgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyNC0wMS0yNFQyMjoyOTowMiswNzowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjQtMDEtMjVUMTA6NTg6NDgrMDc6MDAiIHhtcDpNZXRhZGF0YURhdGU9IjIwMjQtMDEtMjVUMTA6NTg6NDgrMDc6MDAiIGRjOmZvcm1hdD0iaW1hZ2UvcG5nIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmVkNWQ2MjVmLTc1MzEtMWE0Ny1iNWFjLTc4MDVmYjIyYjNlNSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDplZDVkNjI1Zi03NTMxLTFhNDctYjVhYy03ODA1ZmIyMmIzZTUiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDplZDVkNjI1Zi03NTMxLTFhNDctYjVhYy03ODA1ZmIyMmIzZTUiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmVkNWQ2MjVmLTc1MzEtMWE0Ny1iNWFjLTc4MDVmYjIyYjNlNSIgc3RFdnQ6d2hlbj0iMjAyNC0wMS0yNFQyMjoyOTowMiswNzowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI1LjMgKFdpbmRvd3MpIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pl2SEAcAAAOYSURBVDjLhZTNb1VVFMV/+9xz73uvH7YVBYEGUAkRNKmRRIzEMFBLBxpw5syBI5SRJA79A0yYFUmc6H9gSBiAH4kkQqIThZDgxAAWSiGlrbSv771779nLwUOwReJK1mDv7LOyP87eJh5icctz1AMbMHURDkVrUvJ9wDYAxAz4z1ZzNqPCY07s9hi9fuWBRmQdTIIse12WfYr8HYwMIN2JWFOEMSVhp5XC56AL69+HNYac1AzTdZmf9yoekilTApVGc/Iexatt0kLMZByqs+J8isV0SL5GMGqoBSbwQG9g+Ezq2cHsiRJkqGvg4IsZI5/dor6Z0/nueaxwaAiJj7uNxs5hG51CBhjW3fYCmFgphr7oeH6EPwJj0zPUVwuWpzeSbaqwpojjJd4LpJkcrWaE0RqLImU5jU51cnBl4SPDCD1PrJbZRPWMjhQbutiI03p3icZrbVQa8dmSMJooL7eoLjcpXumw8cffibt6pIVISDW9VnakM5BPdJoQennOKq3jFmrGvrzG5quXECLubbN18VeGjs2Rlg2aCRuu8Q7UcxHvgqIjObjoFEPHe9bAZnfvfRvzb30uYk8knvz6Os0DywC0v3qKxU+2Yi0RxmoM8NVAulWQPV0RRhKqDRBYwLHJkJIfUIKwqaa61oDaSHdyBNR3ImkpJ4zVKBnCIINsa9kfihsChCEJww8Eg3FJ1HcDrfcWcYnZF3cz98Yu8olV4kttUifwT0zc02HjT1fI9nSo7/b9D+gaD0IIYNCp5yLzH2xHmSgvNbl7dBwbTJA59e3YL/deYOWbUdJ8hnLdz/Aho6MbCKwQ9WyEwrGGsFFQ16hv95ep9f4ClEbn9AjdY+NkWypsKKF//WuZ3QhyzglwFyqEcuEO7vTtINJfgYEP52keXsS7Rthcoux+HOD9zSc552xm+y6qvPG9LLwZJB6BgCis5agb0ErAmmvj3AyT/xDL3ls2u2UHHuLEamv4t8xrHgd1AhiEwYSSrRUMgWZ7+eWQ0sUQ7/UoltoXi/bKySoLyB3/D6pRo6ImVXroc6e0QN7zk41KF4sUMH9QmXF1fOeZsmgczFLif2FGskCj6p7dcXN+ytTPOvRvBAREs9OesqQTCXDp8UQkdxAnmr3OVNASxiLG4tp7qBDIaz8aqnq/y0+5lFy+XjB50qm8KvcXqT7qIVt7Dx9pvoElv4DZYYiTmPY52nZ/DH9i/BJdZ4O8X9o6/A0kGDN/Gi4umQAAAABJRU5ErkJggg==", 5 | "AUOptions": {"Name": "AU选项","Desc": "在下载Windows更新前设置通知"}, 6 | "AutoEndTasks": {"Name": "自动结束任务","Desc": "关闭冻结的进程以避免系统崩溃"}, 7 | "BtnHostsEdit": {"Name": "Hosts编辑"}, 8 | "BtnPackageManager": {"Name": "UWP应用程序"}, 9 | "BtnRestartExplorer": {"Name": "重启资源管理器"}, 10 | "BtnStartupManager": {"Name": "自启动管理器"}, 11 | "BtnSys_Close": {"Desc": "Text_Close"}, 12 | "BtnSys_Language": {"Desc": "语言"}, 13 | "BtnSys_LoadOptimizeConfig": {"Desc": "加载优化配置文件"}, 14 | "BtnSys_Minimize": {"Desc": "最小化"}, 15 | "BtnSys_ReloadTab": {"Desc": "重新加载此选项卡"}, 16 | "BtnSys_SaveImage": {"Desc": "截屏并保存为图片"}, 17 | "BtnSys_SaveOptimizeConfigAll": {"Desc": "将所有优化配置保存到文件"}, 18 | "BtnSys_SaveOptimizeConfigTab": {"Desc": "仅保存此标签的优化配置到文件"}, 19 | "BtnSys_Search": {"Desc": "搜索优化"}, 20 | "BtnSys_Setting": {"Desc": "设置"}, 21 | "BtnSys_Theme": {"Desc": "主题"}, 22 | "ClassicContextMenu": {"Name": "经典上下文菜单"}, 23 | "DiagnosticDataOff": {"Name": "诊断数据关闭"}, 24 | "DisableAADCloudSearch": {"Name": "关闭云内容搜索 AAD","Desc": "关闭工作或学校帐户的云内容搜索"}, 25 | "DisableAdsOnLockScreen": {"Name": "禁用锁屏广告"}, 26 | "DisableAeDebug": {"Name": "禁用AeDebug","Desc": "禁用调试器以加快错误处理"}, 27 | "DisableAnimationEffectMaxMin": {"Name": "禁用最大最小动画效果","Desc": "关闭窗口最大化或最小化时的动画效果以加快窗口响应速度"}, 28 | "DisableAppendCompletion": {"Name": "禁用追加完成","Desc": "禁用内联自动完成(追加完成或自动填充)"}, 29 | "DisableAutoDefragIdle": {"Name": "禁用空闲状态下的自动碎片整理","Desc": "闲置时禁用自动碎片整理以延长SSD的使用寿命"}, 30 | "DisableAutoInstallationApps": {"Name": "禁用自动安装应用"}, 31 | "DisableAutoplay": {"Name": "禁用自动播放","Desc": "禁用驱动器上的“自动播放”功能以避免病毒感染"}, 32 | "DisableAutoSuggest": {"Name": "禁用自动建议","Desc": "禁用自动建议(自动完成下拉)"}, 33 | "DisableAutoWindowsUpdates": {"Name": "禁用自动Windows更新","Desc": "禁用自动更新"}, 34 | "DisableBackgroundApps": {"Name": "禁用后台应用"}, 35 | "DisableBootOptimize": {"Name": "禁用启动优化","Desc": "禁用启动时对系统驱动器的碎片整理以延长SSD的使用寿命"}, 36 | "DisableCrashAutoReboot": {"Name": "禁用崩溃自动重启","Desc": "当系统遇到蓝屏死机时禁用自动重启"}, 37 | "DisableCustomInking": {"Name": "禁用自定义墨迹书写","Desc": "禁用自定义墨迹书写和打字词典"}, 38 | "DisableDeviceSearchHistory": {"Name": "关闭本地搜索历史记录","Desc": "在此设备上本地关闭搜索历史记录"}, 39 | "DisableDiagTrack": {"Name": "禁用DiagTrack","Desc": "DiagTrack - 互联用户体验和遥测服务支持支持应用内和互联用户体验的功能。\n此外,此服务还管理事件驱动的诊断和使用信息的收集和传输(用于改善用户的体验和质量) Windows 平台),当在反馈和诊断下启用诊断和使用隐私选项设置时。"}, 40 | "DisabledVBSCodeIntegrity": {"Name": "禁用VBS代码完整性","Desc": "禁用基于虚拟化的代码完整性保护"}, 41 | "DisableErrorReporting": {"Name": "禁用错误报告","Desc": "禁用屏幕错误报告以提高系统性能"}, 42 | "DisableFrequentFolders": {"Name": "禁用常用文件夹"}, 43 | "DisableGameBar": {"Name": "禁用游戏栏和游戏DVR","Desc": "游戏DVR功能允许你在后台记录你的游戏。它位于游戏栏上 - 提供了使用游戏DVR功能记录游戏和截图的按钮。但是,通过在后台录制视频,它可能会降低你的游戏性能。"}, 44 | "DisableGoogleUpdateTask": {"Name": "禁用Google更新任务"}, 45 | "DisableHibernate": {"Name": "禁用休眠"}, 46 | "DisableHybridSleep": {"Name": "禁用混合休眠"}, 47 | "DisableLockScreen": {"Name": "禁用锁屏"}, 48 | "DisableLowDiskSpaceChecks": {"Name": "禁用低磁盘空间检查","Desc": "优化磁盘I/O子系统以提高系统性能"}, 49 | "Disablememorypagination": {"Name": "禁用内存分页","Desc": "禁用内存分页并减少磁盘I/O以提高应用程序性能。\n(如果物理内存<1 GB,此选项可能会被忽略)"}, 50 | "DisableMenuShowDelay": {"Name": "禁用菜单显示延迟","Desc": "优化系统显示的响应速度"}, 51 | "DisableMicrosoftEdgeUpdateTask": {"Name": "禁用Microsoft Edge更新任务"}, 52 | "DisableMSACloudSearch": {"Name": "关闭云内容搜索 MSA","Desc": "关闭 Microsoft 帐户的云内容搜索"}, 53 | "DisableMSDefender": {"Name": "禁用 Microsoft Defender","Desc": "一键启用/禁用 Microsoft Defender。\n它将自动重新启动计算机。"}, 54 | "DisableOfferSuggestions": {"Name": "禁用提供建议"}, 55 | "DisablePersonalizedAdsStoreApps": {"Name": "禁用个性化广告商店应用"}, 56 | "DisablePrefetchParameters": {"Name": "禁用预取参数","Desc": "禁用预取参数以延长SSD的使用寿命"}, 57 | "DisablePrintSpooler": {"Name": "禁用打印服务"}, 58 | "DisableRecentFiles": {"Name": "禁用最近的文件"}, 59 | "DisableRemoteRegAccess": {"Name": "禁用远程注册访问","Desc": "禁止从远程计算机修改注册表"}, 60 | "DisableScheduledDefrag": {"Name": "禁用计划碎片整理"}, 61 | "DisableSettingsAppSuggestions": {"Name": "禁用设置应用建议"}, 62 | "DisableShortcutText": {"Name": "禁用快捷方式文本"}, 63 | "DisableSleep": {"Name": "禁用睡眠"}, 64 | "DisableStartMenuAppSuggestions": {"Name": "禁用开始菜单应用程序建议"}, 65 | "DisableSyncProviderNotifications": {"Name": "禁用同步提供商通知"}, 66 | "DisableSystemRestore": {"Name": "禁用系统还原"}, 67 | "DisableTailoredExperiences": {"Name": "禁用定制体验"}, 68 | "DisableTipsAndSuggestions": {"Name": "禁用提示和建议"}, 69 | "DisableTurnOffDisplay": {"Name": "禁用关闭显示"}, 70 | "DisableVisualStudioTelemetry": {"Name": "禁用VisualStudio遥测"}, 71 | "DisableWCE": {"Name": "禁用WCE改进","Desc": "禁用Windows客户体验改进\n\n- 代理:此任务收集并上传autochk SQM数据,如果选择加入Microsoft客户体验改进计划。\n- Microsoft兼容性评估器:如果选择加入Microsoft客户体验改进计划,将收集程序遥测信息。"}, 72 | "DisableWebSearch": {"Name": "禁用网络搜索","Desc": "当您在任务栏上进行搜索时,禁用在线搜索并仅包含您帐户的 Bing 网络结果"}, 73 | "DisableWebSearchStartMenu": {"Name": "禁用网络搜索开始菜单","Desc": "禁用开始菜单中的网络搜索"}, 74 | "DisableWindowsFeedback": {"Name": "禁用Windows反馈"}, 75 | "DisableWindowsSearch": {"Name": "禁用Windows搜索"}, 76 | "EnableDarkMode": {"Name": "启用暗黑模式"}, 77 | "Explorer": {"Name": "文件管理器"}, 78 | "HideMostUsedApps": {"Name": "隐藏最常用的应用程序","Desc": "关闭“开始”菜单上的\"显示最常用的应用\""}, 79 | "HideStartMenuAccountNotifications": {"Name": "隐藏与帐户相关的通知","Desc": "关闭“开始”菜单上的\"显示帐户相关通知\""}, 80 | "HideStartMenuRecentlyAdded": {"Name": "隐藏最近添加的应用程序","Desc": "关闭“开始”菜单上的\"显示最近添加的应用\""}, 81 | "HideStartMenuRecentlyOpened": {"Name": "隐藏最近打开的项目","Desc": "关闭“开始”菜单上的\"在“开始”、跳转列表和文件资源管理器中显示最近打开的项目\""}, 82 | "HideStartMenuRecommendations": {"Name": "隐藏推荐","Desc": "关闭“开始”菜单上的\"显示提示、快捷方式、新应用等的推荐\""}, 83 | "HideWindowsSecurityNoncriticalNotifications": {"Name": "隐藏 WS 非关键通知","Desc": "仅显示来自 Windows 安全的重要通知。\n如果已启用“禁止所有通知 GP”设置,则此设置将无效。"}, 84 | "HideWindowsSecurityNotifications": {"Name": "隐藏 WS 通知","Desc": "隐藏来自 Windows 安全的所有通知。"}, 85 | "HostsEdit_BtnImportFromFile": {"Name": "从文件导入"}, 86 | "HostsEdit_BtnImportFromLink": {"Name": "从链接导入"}, 87 | "HostsEdit_BtnReload": {"Name": "重新加载主机文件"}, 88 | "HostsEdit_BtnResetDefault": {"Name": "重置默认"}, 89 | "HostsEdit_BtnSave": {"Name": "保存"}, 90 | "HostsEdit_BtnSaveAs": {"Name": "另存为"}, 91 | "HostsEdit_TxtSelectLink": {"Name": "选择将阻止列表导入主机的链接:"}, 92 | "IncreaseIconCache": {"Name": "增加图标缓存","Desc": "增加系统图标缓存并加快桌面显示速度"}, 93 | "IoPageLockLimit": {"Name": "I/O页面锁定限制","Desc": "优化内存的默认设置以提高系统性能"}, 94 | "Link_ClearStartMenu": {"Name": "清除开始菜单"}, 95 | "Link_DeselectAll": {"Name": "Text_DeselectAll"}, 96 | "Link_SelectAll": {"Name": "Text_SelectAll"}, 97 | "LinkResolveIgnoreLinkInfo": {"Name": "链接解析忽略链接信息","Desc": "在漫游时不跟踪Shell快捷方式"}, 98 | "MouseHoverTime": {"Name": "鼠标悬停时间","Desc": "加快任务栏窗口预览的显示速度"}, 99 | "NoInternetOpenWith": {"Name": "无互联网打开方式","Desc": "关闭互联网文件关联服务"}, 100 | "NoResolveSearch": {"Name": "无解析搜索","Desc": "在解析shell快捷方式时不使用基于搜索的方法"}, 101 | "NoResolveTrack": {"Name": "无解析轨道","Desc": "解析 shell 快捷方式时不要使用基于跟踪的方法。\n此设置可防止系统使用 NTFS 跟踪功能来解析快捷方式。"}, 102 | "NumLockonStartup": {"Name": "启动时数字锁定"}, 103 | "OpenFileExplorerThisPC": {"Name": "打开文件资源管理器ThisPC"}, 104 | "OptimizeNetworkTransfer": {"Name": "优化网络传输","Desc": "优化网络设置以提高传输性能"}, 105 | "Optimizeprocessorperformance": {"Name": "优化处理器性能","Desc": "优化处理器性能使应用程序、游戏等运行更加流畅。"}, 106 | "OptimizeRefreshPolicy": {"Name": "优化刷新策略","Desc": "优化磁盘I/O子系统以提高系统性能"}, 107 | "Optional": {"Name": "可选"}, 108 | "PackageManager_BtnDisable": {"Desc": "为所有用户启用/禁用"}, 109 | "PackageManager_DeprovisionPackage": {"Name": "Text_DeprovisionPackage","Desc": "取消配置应用程序包,以便设备上的新用户将不再自动安装该应用程序。"}, 110 | "PackageManager_InstalledAllUsers": {"Name": "Text_InstalledAllUsers","Desc": "显示所有用户安装的软件包的列表。"}, 111 | "PackageManager_Mode": {"Desc": "已安装模式:显示已安装软件包的列表。\n未安装模式:显示计算机上但当前用户未安装的列表。"}, 112 | "Privacy": {"Name": "隐私"}, 113 | "ShowExtensions": {"Name": "显示扩展名"}, 114 | "ShowHidden": {"Name": "显示隐藏文件"}, 115 | "ShowHiddenSystem": {"Name": "显示隐藏的系统文件"}, 116 | "ShowThisPC": {"Name": "显示此电脑"}, 117 | "ShutdownAcceleration": {"Name": "关机加速","Desc": "减少关机时的应用程序空闲以改善关机过程"}, 118 | "SnippingPrintScreen": {"Name": "截图打印屏幕"}, 119 | "StartMenu": {"Name": "开始菜单"}, 120 | "System": {"Name": "系统"}, 121 | "Text_Architecture": "架构", 122 | "Text_BackgroundImage": "背景图", 123 | "Text_Cancel": "取消", 124 | "Text_CheckUpdate": "检查更新", 125 | "Text_ClearStartMenu_Confirm": "您确定要清除“开始”菜单布局吗?\n(将创建备份文件 \"WinTune_StartMenuLayout_xxxx.json\")", 126 | "Text_ClearStartMenu_Done": "清除开始菜单 完成!", 127 | "Text_Close": "关闭", 128 | "Text_CommandLine": "命令行", 129 | "Text_ConnectionFailed": "连接到服务器失败。", 130 | "Text_CurrentVersion": "当前版本", 131 | "Text_Custom": "自定义", 132 | "Text_DefaultImage": "默认图片", 133 | "Text_Delete": "删除", 134 | "Text_DeprovisionPackage": "取消配置包", 135 | "Text_DeselectAll": "取消全选", 136 | "Text_Details": "详细", 137 | "Text_Disable": "禁用", 138 | "Text_Disabled": "已禁用", 139 | "Text_DisableMSDefender0": "启用 Microsoft Defender 需要重新启动计算机。\n您确定要执行此操作吗?", 140 | "Text_DisableMSDefender1": "禁用 Microsoft Defender 需要重新启动计算机。\n您确定要执行此操作吗?", 141 | "Text_DisplayName": "显示名称", 142 | "Text_EffectivePath": "有效路径", 143 | "Text_Enable": "启用", 144 | "Text_Enabled": "启用", 145 | "Text_FamilyName": "家庭名称", 146 | "Text_FindRegistry": "在注册表中查找", 147 | "Text_FullName": "全名", 148 | "Text_Homepage": "主页", 149 | "Text_HR_Optimize": " - - - - 优化 - - - -", 150 | "Text_HR_Tools": " - - - - 工具 - - - - ", 151 | "Text_Install": "安装", 152 | "Text_InstalledAllUsers": "全部用户", 153 | "Text_InstalledDate": "安装日期", 154 | "Text_InstalledMode": "已安装模式", 155 | "Text_InstalledPath": "安装路径", 156 | "Text_Name": "名称", 157 | "Text_NewestVersion": "最新版本", 158 | "Text_No": "不", 159 | "Text_None": "没有任何", 160 | "Text_NotInstalledMode": "未安装模式", 161 | "Text_NoUpdate": "没有可用的更新。您正在使用最新版本。", 162 | "Text_OK": "好的", 163 | "Text_OpenTarget": "目标位置", 164 | "Text_Properties": "特性", 165 | "Text_PublisherDisplayName": "发布者", 166 | "Text_Save": "节省", 167 | "Text_SearchOnline": "网上搜索", 168 | "Text_SelectAll": "全选", 169 | "Text_SignatureKind": "签名类型", 170 | "Text_Status": "状态", 171 | "Text_Target": "目标", 172 | "Text_Type": "类型", 173 | "Text_Uninstall": "卸载", 174 | "Text_Update": "更新", 175 | "Text_UpdateFailed": "更新失败,请稍后重试。", 176 | "Text_Updating": "更新中", 177 | "Text_Version": "版本", 178 | "Text_WaitDlg": "请稍等...", 179 | "Text_WhatsNew": "什么是新的", 180 | "Text_Yes": "是的", 181 | "UninstallOneDrive": {"Name": "卸载 OneDrive"}, 182 | "UnpinChat": {"Name": "聊天"}, 183 | "UnpinCopilot": {"Name": "副驾驶"}, 184 | "UnpinCortana": {"Name": "科塔娜"}, 185 | "UnpinEdge": {"Name": "边缘"}, 186 | "UnpinFileExplorer": {"Name": "文件管理器"}, 187 | "UnpinMail": {"Name": "邮件"}, 188 | "UnpinNewsandInterests": {"Name": "新闻和兴趣"}, 189 | "UnpinSearch": {"Name": "搜索"}, 190 | "UnpinStore": {"Name": "店铺"}, 191 | "UnpinTaskbar": {"Name": "任务栏"}, 192 | "UnpinTaskView": {"Name": "任务视图"}, 193 | "UnpinWidgets": {"Name": "小部件"}, 194 | "VerCtrl": {"Desc": "点击检查更新","Desc1": "有新版本\n(点击查看详情)"} 195 | } -------------------------------------------------------------------------------- /Lib/Gdip_All.ahk: -------------------------------------------------------------------------------- 1 | ; https://github.com/buliasz/AHKv2-Gdip 2 | ; v1.62 3 | 4 | Gdip_Startup() 5 | { 6 | if (!DllCall("LoadLibrary", "str", "gdiplus", "UPtr")) { 7 | throw Error("Could not load GDI+ library") 8 | } 9 | 10 | si := Buffer(A_PtrSize = 4 ? 20:32, 0) ; sizeof(GdiplusStartupInputEx) = 20, 32 11 | NumPut("uint", 0x2, si) 12 | NumPut("uint", 0x4, si, A_PtrSize = 4 ? 16:24) 13 | DllCall("gdiplus\GdiplusStartup", "UPtr*", &pToken:=0, "Ptr", si, "UPtr", 0) 14 | if (!pToken) { 15 | throw Error("Gdiplus failed to start. Please ensure you have gdiplus on your system") 16 | } 17 | 18 | return pToken 19 | } 20 | 21 | Gdip_Shutdown(pToken) 22 | { 23 | DllCall("gdiplus\GdiplusShutdown", "UPtr", pToken) 24 | hModule := DllCall("GetModuleHandle", "str", "gdiplus", "UPtr") 25 | if (!hModule) { 26 | throw Error("GDI+ library was unloaded before shutdown") 27 | } 28 | if (!DllCall("FreeLibrary", "UPtr", hModule)) { 29 | throw Error("Could not free GDI+ library") 30 | } 31 | 32 | return 0 33 | } 34 | 35 | Gdip_GraphicsFromImage(pBitmap) 36 | { 37 | DllCall("gdiplus\GdipGetImageGraphicsContext", "UPtr", pBitmap, "UPtr*", &pGraphics:=0) 38 | return pGraphics 39 | } 40 | Gdip_CreateBitmap(Width, Height, Format:=0x26200A) 41 | { 42 | DllCall("gdiplus\GdipCreateBitmapFromScan0", "Int", Width, "Int", Height, "Int", 0, "Int", Format, "UPtr", 0, "UPtr*", &pBitmap:=0) 43 | return pBitmap 44 | } 45 | Gdip_CreateHBITMAPFromBitmap(pBitmap, Background:=0xffffffff) 46 | { 47 | DllCall("gdiplus\GdipCreateHBITMAPFromBitmap", "UPtr", pBitmap, "UPtr*", &hbm:=0, "Int", Background) 48 | return hbm 49 | } 50 | 51 | Gdip_DeleteBrush(pBrush) 52 | { 53 | return DllCall("gdiplus\GdipDeleteBrush", "UPtr", pBrush) 54 | } 55 | 56 | ;##################################################################################### 57 | 58 | Gdip_DisposeImage(pBitmap) 59 | { 60 | return DllCall("gdiplus\GdipDisposeImage", "UPtr", pBitmap) 61 | } 62 | 63 | ;##################################################################################### 64 | 65 | Gdip_DeleteGraphics(pGraphics) 66 | { 67 | return DllCall("gdiplus\GdipDeleteGraphics", "UPtr", pGraphics) 68 | } 69 | 70 | DeleteObject(hObject) 71 | { 72 | return DllCall("DeleteObject", "UPtr", hObject) 73 | } 74 | Gdip_CreateBitmapFromHBITMAP(hBitmap, Palette:=0) 75 | { 76 | DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", "UPtr", hBitmap, "UPtr", Palette, "UPtr*", &pBitmap:=0) 77 | return pBitmap 78 | } 79 | Gdip_BitmapFromScreen(Screen:=0, Raster:="") 80 | { 81 | hhdc := 0 82 | if (Screen = 0) { 83 | _x := DllCall( "GetSystemMetrics", "Int", 76 ) 84 | _y := DllCall( "GetSystemMetrics", "Int", 77 ) 85 | _w := DllCall( "GetSystemMetrics", "Int", 78 ) 86 | _h := DllCall( "GetSystemMetrics", "Int", 79 ) 87 | } 88 | else if (SubStr(Screen, 1, 5) = "hwnd:") { 89 | Screen := SubStr(Screen, 6) 90 | if !WinExist("ahk_id " Screen) { 91 | return -2 92 | } 93 | WinGetRect(Screen,,, &_w, &_h) 94 | _x := _y := 0 95 | hhdc := GetDCEx(Screen, 3) 96 | } 97 | else if IsInteger(Screen) { 98 | M := GetMonitorInfo(Screen) 99 | _x := M.Left, _y := M.Top, _w := M.Right-M.Left, _h := M.Bottom-M.Top 100 | } 101 | else { 102 | S := StrSplit(Screen, "|") 103 | _x := S[1], _y := S[2], _w := S[3], _h := S[4] 104 | } 105 | 106 | if (_x = "") || (_y = "") || (_w = "") || (_h = "") { 107 | return -1 108 | } 109 | 110 | chdc := CreateCompatibleDC() 111 | hbm := CreateDIBSection(_w, _h, chdc) 112 | obm := SelectObject(chdc, hbm) 113 | hhdc := hhdc ? hhdc : GetDC() 114 | BitBlt(chdc, 0, 0, _w, _h, hhdc, _x, _y, Raster) 115 | ReleaseDC(hhdc) 116 | 117 | pBitmap := Gdip_CreateBitmapFromHBITMAP(hbm) 118 | 119 | SelectObject(chdc, obm) 120 | DeleteObject(hbm) 121 | DeleteDC(hhdc) 122 | DeleteDC(chdc) 123 | return pBitmap 124 | } 125 | Gdip_SaveBitmapToFile(pBitmap, sOutput, Quality:=75) 126 | { 127 | _p := 0 128 | 129 | SplitPath sOutput,,, &extension:="" 130 | if (!RegExMatch(extension, "^(?i:BMP|DIB|RLE|JPG|JPEG|JPE|JFIF|GIF|TIF|TIFF|PNG)$")) { 131 | return -1 132 | } 133 | extension := "." extension 134 | 135 | DllCall("gdiplus\GdipGetImageEncodersSize", "uint*", &nCount:=0, "uint*", &nSize:=0) 136 | ci := Buffer(nSize) 137 | DllCall("gdiplus\GdipGetImageEncoders", "UInt", nCount, "UInt", nSize, "UPtr", ci.Ptr) 138 | if !(nCount && nSize) { 139 | return -2 140 | } 141 | 142 | loop nCount { 143 | address := NumGet(ci, (idx := (48+7*A_PtrSize)*(A_Index-1))+32+3*A_PtrSize, "UPtr") 144 | sString := StrGet(address, "UTF-16") 145 | if !InStr(sString, "*" extension) 146 | continue 147 | 148 | pCodec := ci.Ptr+idx 149 | break 150 | } 151 | 152 | if !pCodec { 153 | return -3 154 | } 155 | 156 | if (Quality != 75) { 157 | Quality := (Quality < 0) ? 0 : (Quality > 100) ? 100 : Quality 158 | 159 | if RegExMatch(extension, "^\.(?i:JPG|JPEG|JPE|JFIF)$") { 160 | DllCall("gdiplus\GdipGetEncoderParameterListSize", "UPtr", pBitmap, "UPtr", pCodec, "uint*", &nSize) 161 | EncoderParameters := Buffer(nSize, 0) 162 | DllCall("gdiplus\GdipGetEncoderParameterList", "UPtr", pBitmap, "UPtr", pCodec, "UInt", nSize, "UPtr", EncoderParameters.Ptr) 163 | nCount := NumGet(EncoderParameters, "UInt") 164 | loop nCount 165 | { 166 | elem := (24+(A_PtrSize ? A_PtrSize : 4))*(A_Index-1) + 4 + (pad := A_PtrSize = 8 ? 4 : 0) 167 | if (NumGet(EncoderParameters, elem+16, "UInt") = 1) && (NumGet(EncoderParameters, elem+20, "UInt") = 6) 168 | { 169 | _p := elem + EncoderParameters.Ptr - pad - 4 170 | NumPut("UInt", Quality, NumGet(NumPut("UInt", 4, NumPut("UInt", 1, _p+0)+20), "UInt")) 171 | break 172 | } 173 | } 174 | } 175 | } 176 | 177 | _E := DllCall("gdiplus\GdipSaveImageToFile", "UPtr", pBitmap, "UPtr", StrPtr(sOutput), "UPtr", pCodec, "UInt", _p ? _p : 0) 178 | 179 | return _E ? -5 : 0 180 | } 181 | 182 | CreateRect(&Rect, x, y, w, h) 183 | { 184 | Rect := Buffer(16) 185 | NumPut("UInt", x, "UInt", y, "UInt", w, "UInt", h, Rect) 186 | } 187 | CreateDIBSection(w, h, hdc:="", bpp:=32, &ppvBits:=0) 188 | { 189 | hdc2 := hdc ? hdc : GetDC() 190 | bi := Buffer(40, 0) 191 | 192 | NumPut("UInt", 40, "UInt", w, "UInt", h, "ushort", 1, "ushort", bpp, "UInt", 0, bi) 193 | 194 | hbm := DllCall("CreateDIBSection" 195 | , "UPtr", hdc2 196 | , "UPtr", bi.Ptr 197 | , "UInt", 0 198 | , "UPtr*", &ppvBits 199 | , "UPtr", 0 200 | , "UInt", 0, "UPtr") 201 | 202 | if (!hdc) { 203 | ReleaseDC(hdc2) 204 | } 205 | return hbm 206 | } 207 | CreateCompatibleDC(hdc:=0) 208 | { 209 | return DllCall("CreateCompatibleDC", "UPtr", hdc) 210 | } 211 | SelectObject(hdc, hgdiobj) 212 | { 213 | return DllCall("SelectObject", "UPtr", hdc, "UPtr", hgdiobj) 214 | } 215 | GetDC(hwnd:=0) 216 | { 217 | return DllCall("GetDC", "UPtr", hwnd) 218 | } 219 | GetDCEx(hwnd, flags:=0, hrgnClip:=0) 220 | { 221 | return DllCall("GetDCEx", "UPtr", hwnd, "UPtr", hrgnClip, "Int", flags) 222 | } 223 | ReleaseDC(hdc, hwnd:=0) 224 | { 225 | return DllCall("ReleaseDC", "UPtr", hwnd, "UPtr", hdc) 226 | } 227 | DeleteDC(hdc) 228 | { 229 | return DllCall("DeleteDC", "UPtr", hdc) 230 | } 231 | 232 | GetMonitorInfo(MonitorNum) 233 | { 234 | Monitors := MDMF_Enum() 235 | for k,v in Monitors { 236 | if (v.Num = MonitorNum) { 237 | return v 238 | } 239 | } 240 | } 241 | 242 | MDMF_Enum(HMON := "") { 243 | static EnumProc := CallbackCreate(MDMF_EnumProc) 244 | static Monitors := Map() 245 | 246 | if (HMON = "") { ; new enumeration 247 | Monitors := Map("TotalCount", 0) 248 | if !DllCall("User32.dll\EnumDisplayMonitors", "Ptr", 0, "Ptr", 0, "Ptr", EnumProc, "Ptr", ObjPtr(Monitors), "Int") 249 | return False 250 | } 251 | 252 | return (HMON = "") ? Monitors : Monitors.HasKey(HMON) ? Monitors[HMON] : False 253 | } 254 | MDMF_EnumProc(HMON, HDC, PRECT, ObjectAddr) { 255 | Monitors := ObjFromPtrAddRef(ObjectAddr) 256 | 257 | Monitors[HMON] := MDMF_GetInfo(HMON) 258 | Monitors["TotalCount"]++ 259 | if (Monitors[HMON].Primary) { 260 | Monitors["Primary"] := HMON 261 | } 262 | 263 | return true 264 | } 265 | MDMF_GetInfo(HMON) { 266 | MIEX := Buffer(40 + (32 << !!1)) 267 | NumPut("UInt", MIEX.Size, MIEX) 268 | if DllCall("User32.dll\GetMonitorInfo", "Ptr", HMON, "Ptr", MIEX.Ptr, "Int") { 269 | return {Name: (Name := StrGet(MIEX.Ptr + 40, 32)) ; CCHDEVICENAME = 32 270 | , Num: RegExReplace(Name, ".*(\d+)$", "$1") 271 | , Left: NumGet(MIEX, 4, "Int") ; display rectangle 272 | , Top: NumGet(MIEX, 8, "Int") ; " 273 | , Right: NumGet(MIEX, 12, "Int") ; " 274 | , Bottom: NumGet(MIEX, 16, "Int") ; " 275 | , WALeft: NumGet(MIEX, 20, "Int") ; work area 276 | , WATop: NumGet(MIEX, 24, "Int") ; " 277 | , WARight: NumGet(MIEX, 28, "Int") ; " 278 | , WABottom: NumGet(MIEX, 32, "Int") ; " 279 | , Primary: NumGet(MIEX, 36, "UInt")} ; contains a non-zero value for the primary monitor. 280 | } 281 | return False 282 | } 283 | ; Based on WinGetClientPos by dd900 and Frosti - https://www.autohotkey.com/boards/viewtopic.php?t=484 284 | WinGetRect( hwnd, &x:="", &y:="", &w:="", &h:="" ) { 285 | Ptr := A_PtrSize ? "UPtr" : "UInt" 286 | CreateRect(&winRect, 0, 0, 0, 0) ;is 16 on both 32 and 64 287 | ;VarSetCapacity( winRect, 16, 0 ) ; Alternative of above two lines 288 | DllCall( "GetWindowRect", "Ptr", hwnd, "Ptr", winRect ) 289 | x := NumGet(winRect, 0, "UInt") 290 | y := NumGet(winRect, 4, "UInt") 291 | w := NumGet(winRect, 8, "UInt") - x 292 | h := NumGet(winRect, 12, "UInt") - y 293 | } 294 | BitBlt(ddc, dx, dy, dw, dh, sdc, sx, sy, Raster:="") 295 | { 296 | return DllCall("gdi32\BitBlt" 297 | , "UPtr", dDC 298 | , "Int", dx 299 | , "Int", dy 300 | , "Int", dw 301 | , "Int", dh 302 | , "UPtr", sDC 303 | , "Int", sx 304 | , "Int", sy 305 | , "UInt", Raster ? Raster : 0x00CC0020) 306 | } 307 | 308 | ; ==================================== 309 | 310 | Gdip_BitmapFromBase64(&Base64) 311 | { 312 | ; calculate the length of the buffer needed 313 | if !(DllCall("crypt32\CryptStringToBinary", "UPtr", StrPtr(Base64), "UInt", 0, "UInt", 0x01, "UPtr", 0, "UInt*", &DecLen:=0, "UPtr", 0, "UPtr", 0)) { 314 | return -1 315 | } 316 | 317 | Dec := Buffer(DecLen, 0) 318 | 319 | ; decode the Base64 encoded string 320 | if !(DllCall("crypt32\CryptStringToBinary", "UPtr", StrPtr(Base64), "UInt", 0, "UInt", 0x01, "UPtr", Dec.Ptr, "UInt*", &DecLen, "UPtr", 0, "UPtr", 0)) { 321 | return -2 322 | } 323 | 324 | ; create a memory stream 325 | if !(pStream := DllCall("shlwapi\SHCreateMemStream", "UPtr", Dec.Ptr, "UInt", DecLen, "UPtr")) { 326 | return -3 327 | } 328 | 329 | DllCall("gdiplus\GdipCreateBitmapFromStreamICM", "UPtr", pStream, "Ptr*", &pBitmap:=0) 330 | ObjRelease(pStream) 331 | 332 | return pBitmap 333 | } 334 | 335 | Gdip_CreateARGBHBITMAPFromBitmap(&pBitmap) { 336 | ; This version is about 25% faster than Gdip_CreateHBITMAPFromBitmap(). 337 | ; Get Bitmap width and height. 338 | DllCall("gdiplus\GdipGetImageWidth", "ptr", pBitmap, "uint*", &width:=0) 339 | DllCall("gdiplus\GdipGetImageHeight", "ptr", pBitmap, "uint*", &height:=0) 340 | 341 | ; Convert the source pBitmap into a hBitmap manually. 342 | ; struct BITMAPINFOHEADER - https://docs.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-bitmapinfoheader 343 | hdc := DllCall("CreateCompatibleDC", "ptr", 0, "ptr") 344 | bi := Buffer(40, 0) ; sizeof(bi) = 40 345 | NumPut( 346 | "UInt", 40, ; Size 347 | "UInt", width, ; Width 348 | "Int", -height, ; Height - Negative so (0, 0) is top-left. 349 | "ushort", 1, ; Planes 350 | "ushort", 32, ; BitCount / BitsPerPixel 351 | bi) 352 | hbm := DllCall("CreateDIBSection", "ptr", hdc, "ptr", bi.Ptr, "UInt", 0, "ptr*", &pBits:=0, "ptr", 0, "UInt", 0, "ptr") 353 | obm := DllCall("SelectObject", "ptr", hdc, "ptr", hbm, "ptr") 354 | 355 | ; Transfer data from source pBitmap to an hBitmap manually. 356 | Rect := Buffer(16, 0) ; sizeof(Rect) = 16 357 | NumPut( 358 | "UInt", width, ; Width 359 | "UInt", height, ; Height 360 | Rect, 8) 361 | BitmapData := Buffer(16+2*A_PtrSize, 0) ; sizeof(BitmapData) = 24, 32 362 | NumPut( 363 | "UInt", width, ; Width 364 | "UInt", height, ; Height 365 | "Int", 4 * width, ; Stride 366 | "Int", 0xE200B, ; PixelFormat 367 | "ptr", pBits, ; Scan0 368 | BitmapData) 369 | DllCall("gdiplus\GdipBitmapLockBits" 370 | , "ptr", pBitmap 371 | , "ptr", Rect.Ptr 372 | , "UInt", 5 ; ImageLockMode.UserInputBuffer | ImageLockMode.ReadOnly 373 | , "Int", 0xE200B ; Format32bppPArgb 374 | , "ptr", BitmapData.Ptr) ; Contains the pointer (pBits) to the hbm. 375 | DllCall("gdiplus\GdipBitmapUnlockBits", "ptr", pBitmap, "ptr", BitmapData.Ptr) 376 | 377 | ; Cleanup the hBitmap and device contexts. 378 | DllCall("SelectObject", "ptr", hdc, "ptr", obm) 379 | DllCall("DeleteDC", "ptr", hdc) 380 | 381 | return hbm 382 | } 383 | Gdip_CreateHICONFromBitmap(pBitmap) { 384 | DllCall("gdiplus\GdipCreateHICONFromBitmap", "UPtr", pBitmap, "UPtr*", &hIcon:=0) 385 | return hIcon 386 | } 387 | Gdip_CreateTextureBrush(pBitmap, WrapMode:=1, x:=0, y:=0, w:="", h:="") { 388 | if !(w && h) { 389 | DllCall("gdiplus\GdipCreateTexture", "UPtr", pBitmap, "Int", WrapMode, "UPtr*", &pBrush:=0) 390 | } else { 391 | DllCall("gdiplus\GdipCreateTexture2", "UPtr", pBitmap, "Int", WrapMode, "Float", x, "Float", y, "Float", w, "Float", h, "UPtr*", &pBrush:=0) 392 | } 393 | return pBrush 394 | } -------------------------------------------------------------------------------- /Lib/Hex.ahk: -------------------------------------------------------------------------------- 1 | /* 2 | Bin2Hex() and Hex2Bin() 3 | Machine code functions: Bit Wizardry [ By Laszlo Hars ] 4 | Topic : http://www.autohotkey.com/forum/viewtopic.php?t=21172 5 | Post : http://www.autohotkey.com/forum/viewtopic.php?p=180469#180469 6 | */ 7 | 8 | ;C functions 9 | /* 10 | #include 11 | void Bin2Hex(uint8_t *hex, uint8_t *bin, int32_t len) { // in hex room for 2*len+1 bytes 12 | int32_t i; uint8_t d; 13 | for (i=0; i> 4) - 10; 15 | *hex++ = d + 65 - (d>>5); 16 | d = (*bin++ & 15) - 10; 17 | *hex++ = d + 65 - (d>>5); 18 | } 19 | *hex = 0; 20 | } 21 | #include 22 | void Hex2Bin(uint8_t *bin, uint8_t *hex) { // in bin room for ceil(strlen(hex)/2) bytes 23 | uint8_t b, c, d; 24 | for(;;) { 25 | c = *hex++; if (c == 0) break; 26 | b = c >> 6; 27 | *bin = ((c & 15) + b + (b << 3)) << 4; 28 | d = *hex++; if (d == 0) break; 29 | b = d >> 6; 30 | *bin++ |= (d & 15) + b + (b << 3); 31 | } 32 | } 33 | */ 34 | NumToHex(Num, NumType:="UInt", Size:=4) { 35 | buf:=Buffer(Size) 36 | NumPut(NumType, Num, buf) 37 | Return Bin2Hex(buf, buf.Size) 38 | } 39 | HexToNum(HexText, NumType:="UInt") { 40 | Bin:=Hex2Bin(HexText) 41 | Return NumGet(Bin, NumType) 42 | } 43 | StrToHex(Str, Encoding:="UTF-8") { 44 | buf := Buffer(StrPut(Str, Encoding)-1) 45 | StrPut(Str, buf, Encoding) 46 | Return Bin2Hex(buf, buf.Size) 47 | } 48 | HexToStr(HexText, Encoding:="UTF-8") { 49 | Bin:=Hex2Bin(HexText) 50 | Return StrGet(Bin, Encoding) 51 | } 52 | Bin2Hex(addr,len, rType:="CP0") { 53 | fun := MCode("2,x86:VTHSieVXVotNCFOLdRA58n02i0UMigQQwOgEjXg3g+gKwOgFifspw4tFDIgcUYoEEIPgD414N4PoCsDoBYn7KcOIXFEBQuvGhfa4AAAAAA9I8MYEcQBbXl9dww,x64:RTHJRTnIfjZCigQKwOgERI1QN4PoCsDoBUEpwkaIFElCigQKg+APRI1QN4PoCsDoBUEpwkaIVEkBSf/B68VFhcC4AAAAAEQPSMBNY8BCxgRBAMM") 54 | hex:= Buffer(2*len+1) 55 | DllCall(fun, "ptr", hex, "ptr", addr, "UInt", len , "CDecl") 56 | If !rType 57 | Return hex 58 | Else 59 | Return StrGet(hex,rType) 60 | } 61 | Hex2Bin(hex) { 62 | fun := MCode("2,x86:VTHJieVXVot9DFOLdQiKFE+E0nQwidCD4g/A6AYBwo0EwsHgBIgEDopUTwGE0nQVidOD4g/A6wYB2o0U2gnQiAQOQevJW15fXcM,x64:RTHJQooESoTAdEBBicCD4A9BwOgGRAHAQo0EwMHgBEKIBAlGikRKAUWEwHQeRYnCQYPgD0HA6gZFAdBHjQTQRAnAQogECUn/weu4ww") 63 | bin := Buffer(StrLen(hex)//2) 64 | DllCall(fun, "ptr", bin, "AStr", hex , "CDecl") 65 | Return bin 66 | } 67 | MCode(mcode) { 68 | static e := {1:4, 2:1}, c := (A_PtrSize=8) ? "x64" : "x86" 69 | if (!regexmatch(mcode, "^([0-9]+),(" c ":|.*?," c ":)([^,]+)", &m)) 70 | return 71 | if (!DllCall("crypt32\CryptStringToBinaryW", "str", m[3], "uint", 0, "uint", e.%m[1]%, "ptr", 0, "uint*", &s:=0, "ptr", 0, "ptr", 0)) 72 | return 73 | p := DllCall("GlobalAlloc", "uint", 0, "ptr", s, "ptr") 74 | if (c="x64") 75 | DllCall("VirtualProtect", "ptr", p, "ptr", s, "uint", 0x40, "uint*", &op:=0) 76 | if (DllCall("crypt32\CryptStringToBinaryW", "str", m[3], "uint", 0, "uint", e.%m[1]%, "ptr", p, "uint*", s, "ptr", 0, "ptr", 0)) 77 | return p 78 | DllCall("GlobalFree", "ptr", p) 79 | } -------------------------------------------------------------------------------- /Lib/JSON.ahk: -------------------------------------------------------------------------------- 1 | /************************************************************************ 2 | * @description: JSON格式字符串序列化和反序列化, 修改自[HotKeyIt/Yaml](https://github.com/HotKeyIt/Yaml) 3 | * 增加了对true/false/null类型的支持, 保留了数值的类型 4 | * @author thqby, HotKeyIt 5 | * @date 2024/02/24 6 | * @version 1.0.7 7 | ***********************************************************************/ 8 | 9 | class JSON { 10 | static null := ComValue(1, 0), true := ComValue(0xB, 1), false := ComValue(0xB, 0) 11 | 12 | /** 13 | * Converts a AutoHotkey Object Notation JSON string into an object. 14 | * @param text A valid JSON string. 15 | * @param keepbooltype convert true/false/null to JSON.true / JSON.false / JSON.null where it's true, otherwise 1 / 0 / '' 16 | * @param as_map object literals are converted to map, otherwise to object 17 | */ 18 | static parse(text, keepbooltype := false, as_map := true) { 19 | keepbooltype ? (_true := this.true, _false := this.false, _null := this.null) : (_true := true, _false := false, _null := "") 20 | as_map ? (map_set := (maptype := Map).Prototype.Set) : (map_set := (obj, key, val) => obj.%key% := val, maptype := Object) 21 | NQ := "", LF := "", LP := 0, P := "", R := "" 22 | D := [C := (A := InStr(text := LTrim(text, " `t`r`n"), "[") = 1) ? [] : maptype()], text := LTrim(SubStr(text, 2), " `t`r`n"), L := 1, N := 0, V := K := "", J := C, !(Q := InStr(text, '"') != 1) ? text := LTrim(text, '"') : "" 23 | Loop Parse text, '"' { 24 | Q := NQ ? 1 : !Q 25 | NQ := Q && RegExMatch(A_LoopField, '(^|[^\\])(\\\\)*\\$') 26 | if !Q { 27 | if (t := Trim(A_LoopField, " `t`r`n")) = "," || (t = ":" && V := 1) 28 | continue 29 | else if t && (InStr("{[]},:", SubStr(t, 1, 1)) || A && RegExMatch(t, "m)^(null|false|true|-?\d+(\.\d*(e[-+]\d+)?)?)\s*[,}\]\r\n]")) { 30 | Loop Parse t { 31 | if N && N-- 32 | continue 33 | if InStr("`n`r `t", A_LoopField) 34 | continue 35 | else if InStr("{[", A_LoopField) { 36 | if !A && !V 37 | throw Error("Malformed JSON - missing key.", 0, t) 38 | C := A_LoopField = "[" ? [] : maptype(), A ? D[L].Push(C) : map_set(D[L], K, C), D.Has(++L) ? D[L] := C : D.Push(C), V := "", A := Type(C) = "Array" 39 | continue 40 | } else if InStr("]}", A_LoopField) { 41 | if !A && V 42 | throw Error("Malformed JSON - missing value.", 0, t) 43 | else if L = 0 44 | throw Error("Malformed JSON - to many closing brackets.", 0, t) 45 | else C := --L = 0 ? "" : D[L], A := Type(C) = "Array" 46 | } else if !(InStr(" `t`r,", A_LoopField) || (A_LoopField = ":" && V := 1)) { 47 | if RegExMatch(SubStr(t, A_Index), "m)^(null|false|true|-?\d+(\.\d*(e[-+]\d+)?)?)\s*[,}\]\r\n]", &R) && (N := R.Len(0) - 2, R := R.1, 1) { 48 | if A 49 | C.Push(R = "null" ? _null : R = "true" ? _true : R = "false" ? _false : IsNumber(R) ? R + 0 : R) 50 | else if V 51 | map_set(C, K, R = "null" ? _null : R = "true" ? _true : R = "false" ? _false : IsNumber(R) ? R + 0 : R), K := V := "" 52 | else throw Error("Malformed JSON - missing key.", 0, t) 53 | } else { 54 | ; Added support for comments without '"' 55 | if A_LoopField == '/' { 56 | nt := SubStr(t, A_Index + 1, 1), N := 0 57 | if nt == '/' { 58 | if nt := InStr(t, '`n', , A_Index + 2) 59 | N := nt - A_Index - 1 60 | } else if nt == '*' { 61 | if nt := InStr(t, '*/', , A_Index + 2) 62 | N := nt + 1 - A_Index 63 | } else nt := 0 64 | if N 65 | continue 66 | } 67 | throw Error("Malformed JSON - unrecognized character.", 0, A_LoopField " in " t) 68 | } 69 | } 70 | } 71 | } else if A || InStr(t, ':') > 1 72 | throw Error("Malformed JSON - unrecognized character.", 0, SubStr(t, 1, 1) " in " t) 73 | } else if NQ && (P .= A_LoopField '"', 1) 74 | continue 75 | else if A 76 | LF := P A_LoopField, C.Push(InStr(LF, "\") ? UC(LF) : LF), P := "" 77 | else if V 78 | LF := P A_LoopField, map_set(C, K, InStr(LF, "\") ? UC(LF) : LF), K := V := P := "" 79 | else 80 | LF := P A_LoopField, K := InStr(LF, "\") ? UC(LF) : LF, P := "" 81 | } 82 | return J 83 | UC(S, e := 1) { 84 | static m := Map('"', '"', "a", "`a", "b", "`b", "t", "`t", "n", "`n", "v", "`v", "f", "`f", "r", "`r") 85 | local v := "" 86 | Loop Parse S, "\" 87 | if !((e := !e) && A_LoopField = "" ? v .= "\" : !e ? (v .= A_LoopField, 1) : 0) 88 | v .= (t := m.Get(SubStr(A_LoopField, 1, 1), 0)) ? t SubStr(A_LoopField, 2) : 89 | (t := RegExMatch(A_LoopField, "i)^(u[\da-f]{4}|x[\da-f]{2})\K")) ? 90 | Chr("0x" SubStr(A_LoopField, 2, t - 2)) SubStr(A_LoopField, t) : "\" A_LoopField, 91 | e := A_LoopField = "" ? e : !e 92 | return v 93 | } 94 | } 95 | 96 | /** 97 | * Converts a AutoHotkey Array/Map/Object to a Object Notation JSON string. 98 | * @param obj A AutoHotkey value, usually an object or array or map, to be converted. 99 | * @param expandlevel The level of JSON string need to expand, by default expand all. 100 | * @param space Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read. 101 | */ 102 | static stringify(obj, expandlevel := unset, space := " ") { 103 | expandlevel := IsSet(expandlevel) ? Abs(expandlevel) : 10000000 104 | return Trim(CO(obj, expandlevel)) 105 | CO(O, J := 0, R := 0, Q := 0) { 106 | static M1 := "{", M2 := "}", S1 := "[", S2 := "]", N := "`n", C := ",", S := "- ", E := "", K := ":" 107 | if (OT := Type(O)) = "Array" { 108 | D := !R ? S1 : "" 109 | for key, value in O { 110 | F := (VT := Type(value)) = "Array" ? "S" : InStr("Map,Object", VT) ? "M" : E 111 | Z := VT = "Array" && value.Length = 0 ? "[]" : ((VT = "Map" && value.count = 0) || (VT = "Object" && ObjOwnPropCount(value) = 0)) ? "{}" : "" 112 | D .= (J > R ? "`n" CL(R + 2) : "") (F ? (%F%1 (Z ? "" : CO(value, J, R + 1, F)) %F%2) : ES(value)) (OT = "Array" && O.Length = A_Index ? E : C) 113 | } 114 | } else { 115 | D := !R ? M1 : "" 116 | for key, value in (OT := Type(O)) = "Map" ? (Y := 1, O) : (Y := 0, O.OwnProps()) { 117 | F := (VT := Type(value)) = "Array" ? "S" : InStr("Map,Object", VT) ? "M" : E 118 | Z := VT = "Array" && value.Length = 0 ? "[]" : ((VT = "Map" && value.count = 0) || (VT = "Object" && ObjOwnPropCount(value) = 0)) ? "{}" : "" 119 | D .= (J > R ? "`n" CL(R + 2) : "") (Q = "S" && A_Index = 1 ? M1 : E) ES(key) K (F ? (%F%1 (Z ? "" : CO(value, J, R + 1, F)) %F%2) : ES(value)) (Q = "S" && A_Index = (Y ? O.count : ObjOwnPropCount(O)) ? M2 : E) (J != 0 || R ? (A_Index = (Y ? O.count : ObjOwnPropCount(O)) ? E : C) : E) 120 | if J = 0 && !R 121 | D .= (A_Index < (Y ? O.count : ObjOwnPropCount(O)) ? C : E) 122 | } 123 | } 124 | if J > R 125 | D .= "`n" CL(R + 1) 126 | if R = 0 127 | D := RegExReplace(D, "^\R+") (OT = "Array" ? S2 : M2) 128 | return D 129 | } 130 | ES(S) { 131 | switch Type(S) { 132 | case "Float": 133 | if (v := '', d := InStr(S, 'e')) 134 | v := SubStr(S, d), S := SubStr(S, 1, d - 1) 135 | if ((StrLen(S) > 17) && (d := RegExMatch(S, "(99999+|00000+)\d{0,3}$"))) 136 | S := Round(S, Max(1, d - InStr(S, ".") - 1)) 137 | return S v 138 | case "Integer": 139 | return S 140 | case "String": 141 | S := StrReplace(S, "\", "\\") 142 | S := StrReplace(S, "`t", "\t") 143 | S := StrReplace(S, "`r", "\r") 144 | S := StrReplace(S, "`n", "\n") 145 | S := StrReplace(S, "`b", "\b") 146 | S := StrReplace(S, "`f", "\f") 147 | S := StrReplace(S, "`v", "\v") 148 | S := StrReplace(S, '"', '\"') 149 | return '"' S '"' 150 | default: 151 | return S == this.true ? "true" : S == this.false ? "false" : "null" 152 | } 153 | } 154 | CL(i) { 155 | Loop (s := "", space ? i - 1 : 0) 156 | s .= space 157 | return s 158 | } 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /Lib/PackageManager.ahk: -------------------------------------------------------------------------------- 1 | ;================================================================================ 2 | ; PackageManager 3 | ; tranht17 4 | ; v1.1.0 5 | ;================================================================================ 6 | 7 | Class PackageManager { 8 | static __New() { 9 | DllCall('combase\RoActivateInstance' 10 | , 'Ptr', this.HString('Windows.Management.Deployment.PackageManager') 11 | , 'Ptr*', IPackageManager := ComValue(13, 0), 'HRESULT') 12 | this.IPackageManager:=IPackageManager 13 | } 14 | static IPackageManager2 { 15 | get => ComObjQuery(this.IPackageManager, "{F7AAD08D-0840-46F2-B5D8-CAD47693A095}") 16 | } 17 | static IPackageManager3 { 18 | get => ComObjQuery(this.IPackageManager, "{DAAD9948-36F1-41A7-9188-BC263E0DCB72}") 19 | } 20 | static IPackageManager8 { 21 | get => ComObjQuery(this.IPackageManager, "{B8575330-1298-4EE2-80EE-7F659C5D2782}") 22 | } 23 | static IPackageManager9 { 24 | get => ComObjQuery(this.IPackageManager, "{1AA79035-CC71-4B2E-80A6-C7041D8579A7}") 25 | } 26 | 27 | Class IPackage { 28 | __New(ptr?) { 29 | if IsSet(ptr) && !ptr 30 | throw ValueError('Invalid IUnknown interface pointer', -2, this.__Class) 31 | this.DefineProp("ptr", {Value:ptr ?? 0}) 32 | } 33 | __Delete() => this.ptr ? ObjRelease(this.ptr) : 0 34 | 35 | IsFramework { 36 | get => (ComCall(8, this, "Char*", &value:=0), value) 37 | } 38 | Id { 39 | get => (ComCall(6, this, "Ptr*", IPackageId:=ComValue(13, 0)), IPackageId) 40 | } 41 | Name { 42 | get => (ComCall(6, this.Id, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 43 | } 44 | Version { 45 | get { 46 | PackageVersion := Buffer(8) 47 | ComCall(7, this.Id, 'Ptr', PackageVersion) 48 | Return Major:=NumGet(PackageVersion, "UShort") "." 49 | . Minor:=NumGet(PackageVersion,2, "UShort") "." 50 | . Build:=NumGet(PackageVersion,4, "UShort") "." 51 | . Revision:=NumGet(PackageVersion,6, "UShort") 52 | } 53 | } 54 | Architecture { 55 | ; 0: x86 56 | ; 9: x64 57 | ; 11: Neutral 58 | get => (ComCall(8, this.Id, "Int*", &value:=0), value) 59 | } 60 | Publisher { 61 | get => (ComCall(10, this.Id, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 62 | } 63 | PublisherId { 64 | get => (ComCall(11, this.Id, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 65 | } 66 | FullName { 67 | get => (ComCall(12, this.Id, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 68 | } 69 | FamilyName { 70 | get => (ComCall(13, this.Id, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 71 | } 72 | 73 | IPackage2 { 74 | get => ComObjQuery(this, "{A6612FB6-7688-4ACE-95FB-359538E7AA01}") 75 | } 76 | DisplayName { 77 | get => (ComCall(6, this.IPackage2, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 78 | } 79 | PublisherDisplayName { 80 | get => (ComCall(7, this.IPackage2, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 81 | } 82 | 83 | IPackage3 { 84 | get => ComObjQuery(this, "{5F738B61-F86A-4917-93D1-F1EE9D3B35D9}") 85 | } 86 | IPackageStatus { 87 | get => (ComCall(6, this.IPackage3, "Ptr*", value:=ComValue(13, 0)), value) 88 | } 89 | VerifyIsOK { 90 | get => (ComCall(6, this.IPackageStatus, "Char*", &value:=0), value) 91 | } 92 | NotAvailable { 93 | get => (ComCall(7, this.IPackageStatus, "Char*", &value:=0), value) 94 | } 95 | PackageOffline { 96 | get => (ComCall(8, this.IPackageStatus, "Char*", &value:=0), value) 97 | } 98 | DataOffline { 99 | get => (ComCall(9, this.IPackageStatus, "Char*", &value:=0), value) 100 | } 101 | Disabled { 102 | get => (ComCall(10, this.IPackageStatus, "Char*", &value:=0), value) 103 | } 104 | 105 | InstalledDate { 106 | get => (ComCall(7, this.IPackage3, "Int64*", &value:=0), DateAdd(1601,value/10000000, "S")) 107 | } 108 | 109 | IPackage4 { 110 | get => ComObjQuery(this, "{65AED1AE-B95B-450C-882B-6255187F397E}") 111 | } 112 | SignatureKind { 113 | ; PackageSignatureKind_None = 0, 114 | ; PackageSignatureKind_Developer = 1, 115 | ; PackageSignatureKind_Enterprise = 2, 116 | ; PackageSignatureKind_Store = 3, 117 | ; PackageSignatureKind_System = 4, 118 | get => (ComCall(6, this.IPackage4, "Int*", &value:=0), value) 119 | } 120 | 121 | IPackage5 { 122 | get => ComObjQuery(this, "{0E842DD4-D9AC-45ED-9A1E-74CE056B2635}") 123 | } 124 | 125 | UriLogo { 126 | get { 127 | ComCall(9, this.IPackage2, 'Ptr*', IUriRuntimeClass:=ComValue(13, 0)) ;get_Logo 128 | Return ComObjQuery(IUriRuntimeClass, "{9e365e57-48b2-4160-956f-c7385120bbfc}") 129 | } 130 | } 131 | DisplayUri { 132 | get => (ComCall(7, this.UriLogo, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 133 | } 134 | RawUri { 135 | get => (ComCall(16, this.UriLogo, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 136 | } 137 | Logo { 138 | get { 139 | InstalledPath:=this.InstalledPath 140 | rLogo:="" 141 | try rLogo:=this.RawUri 142 | If !FileExist(rLogo) && FileExist(InstalledPath "\AppxManifest.xml") { 143 | AppxManifest:=FileRead(InstalledPath "\AppxManifest.xml") 144 | If RegExMatch(AppxManifest, 'Square44x44Logo="(.*?)"', &SubPat) { 145 | rLogo:= InstalledPath "\" SubPat[1] 146 | If !FileExist(rLogo) { 147 | SplitPath rLogo,, &dir, &ext, &name_no_ext 148 | rLogo:=dir "\" name_no_ext ".scale-100." ext 149 | } 150 | } 151 | } 152 | Return rLogo 153 | } 154 | } 155 | 156 | IPackage8 { 157 | get => ComObjQuery(this, "{2C584F7B-CE2A-4BE6-A093-77CFBB2A7EA1}") 158 | } 159 | InstalledPath { 160 | get => (ComCall(9, this.IPackage8, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 161 | } 162 | MutablePath { 163 | get => (ComCall(10, this.IPackage8, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 164 | } 165 | EffectivePath { 166 | get => (ComCall(11, this.IPackage8, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 167 | } 168 | EffectiveExternalPath { 169 | get => (ComCall(12, this.IPackage8, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 170 | } 171 | MachineExternalPath { 172 | get => (ComCall(13, this.IPackage8, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 173 | } 174 | UserExternalPath { 175 | get => (ComCall(14, this.IPackage8, "Ptr*", &value:=0), PackageManager.HStringToStr(value)) 176 | } 177 | } 178 | static RegisterPackage(manifestFilePath, dependencyPackageUris:=0, deploymentOptions:=0) { 179 | ; deploymentOptions: 180 | ; https://learn.microsoft.com/en-us/uwp/api/windows.management.deployment.deploymentoptions?view=winrt-22621 181 | ComCall(10, this.IPackageManager 182 | , 'Ptr', this.CreateUri(manifestFilePath) 183 | , 'Ptr', dependencyPackageUris 184 | , 'Ptr', deploymentOptions 185 | , 'Ptr*', DeploymentOperation := ComValue(13, 0)) 186 | Return this.WaitForAsync(DeploymentOperation) 187 | } 188 | static RegisterPackageByFullName(mainPackageFullName, dependencyPackageFullNames:=0, deploymentOptions:=0) { 189 | ComCall(8, this.IPackageManager2 190 | , 'Ptr', this.HString(mainPackageFullName) 191 | , 'Ptr', dependencyPackageFullNames 192 | , 'Ptr', deploymentOptions 193 | , 'Ptr*', DeploymentOperation := ComValue(13, 0)) 194 | Return this.WaitForAsync(DeploymentOperation) 195 | } 196 | static RemovePackage(packageFullName, removalOptions:=0) { 197 | If removalOptions { 198 | ; RemovalOptions_None = 0, 199 | ; RemovalOptions_PreserveApplicationData = 0x1000, 200 | ; RemovalOptions_PreserveRoamableApplicationData = 0x80, 201 | ; RemovalOptions_RemoveForAllUsers = 0x80000, In Windows 11 this will deprovision package 202 | ComCall(6, this.IPackageManager2 203 | , 'Ptr', this.HString(packageFullName) 204 | , 'UInt', removalOptions 205 | , 'Ptr*', DeploymentOperation := ComValue(13, 0)) ;RemovePackageWithOptionsAsync 206 | } Else { 207 | ComCall(8, this.IPackageManager 208 | , 'Ptr', this.HString(packageFullName) 209 | , 'Ptr*', DeploymentOperation := ComValue(13, 0)) ;RemovePackageAsync 210 | } 211 | Return this.WaitForAsync(DeploymentOperation) 212 | ; 0x80073D19 : An error occurred because a user was logged off. 213 | ; 0x8a15000f : Data required by the source is missing. No packages were found among the working sources. 214 | ; 0x80073cfa 215 | } 216 | static FindPackages(UserSID:="", IncludeFramework:=0, IncludeSignatureKindSystem:=0) { 217 | ; UserSID="": Current UserSID 218 | If UserSID="All" 219 | ComCall(11, this.IPackageManager, 'Ptr*', PackageCollection := ComValue(13, 0)) ;FindPackages 220 | Else 221 | ComCall(12, this.IPackageManager 222 | , 'Ptr', (UserSID?this.HString(UserSID):0) 223 | , 'Ptr*', PackageCollection := ComValue(13, 0)) ;FindPackagesByUserSecurityId 224 | ComCall(6, PackageCollection, 'Ptr*', CPackage:=ComValue(13, 0)) ;First 225 | arr := Array() 226 | Loop { 227 | Try { 228 | obj:={} 229 | ComCall(6, CPackage, 'Ptr*', IPackage:=this.IPackage()) ;get_Current 230 | SignatureKind:=IPackage.SignatureKind 231 | IsFramework:=IPackage.IsFramework 232 | FamilyName:=IPackage.FamilyName 233 | If (IncludeSignatureKindSystem 234 | || (!IncludeSignatureKindSystem 235 | && SignatureKind!=4 236 | && FamilyName != "Microsoft.SecHealthUI_8wekyb3d8bbwe" 237 | && FamilyName!="Microsoft.DesktopAppInstaller_8wekyb3d8bbwe")) 238 | && (IncludeFramework 239 | || (!IncludeFramework && IsFramework==0)) { 240 | arr.Push IPackage 241 | } 242 | ComCall(8, CPackage, 'Char*', &IsMoveNext:=0) ;MoveNext 243 | If !IsMoveNext { 244 | IPackage:="" 245 | CPackage:="" 246 | PackageCollection:="" 247 | Break 248 | } 249 | } Catch { 250 | IPackage:="" 251 | CPackage:="" 252 | PackageCollection:="" 253 | Break 254 | } 255 | } 256 | return arr 257 | } 258 | static FindPackagesByPackageFamilyName(packageFamilyName, UserSID:="") { 259 | If UserSID && UserSID="All" 260 | ComCall(19, this.IPackageManager 261 | , 'Ptr', this.HString(packageFamilyName) 262 | , 'Ptr*', PackageCollection := ComValue(13, 0)) ;FindPackagesByPackageFamilyName 263 | Else 264 | ComCall(20, this.IPackageManager 265 | , 'Ptr', (UserSID?this.HString(UserSID):0) 266 | , 'Ptr', this.HString(packageFamilyName) 267 | , 'Ptr*', PackageCollection := ComValue(13, 0)) ;FindPackagesByUserSecurityIdPackageFamilyName 268 | ComCall(6, PackageCollection, 'Ptr*', CPackage:=ComValue(13, 0)) ;First 269 | arr := Array() 270 | Loop { 271 | Try { 272 | ComCall(6, CPackage, 'Ptr*', IPackage:=this.IPackage()) ;get_Current 273 | arr.Push IPackage 274 | ComCall(8, CPackage, 'Char*', &IsMoveNext:=0) ;MoveNext 275 | If !IsMoveNext { 276 | IPackage:="" 277 | CPackage:="" 278 | PackageCollection:="" 279 | Break 280 | } 281 | } Catch { 282 | IPackage:="" 283 | CPackage:="" 284 | PackageCollection:="" 285 | Break 286 | } 287 | } 288 | return arr 289 | } 290 | 291 | ; Windows 10, version 2004 (introduced in 10.0.19041.0) 292 | static FindProvisionedPackages() { 293 | arr := Array() 294 | ComCall(6, this.IPackageManager9, 'Ptr*', PackageCollection := ComValue(13, 0)) 295 | ComCall(7, PackageCollection, 'UInt*', &Size:=0) ;get_Size 296 | Loop Size { 297 | ComCall(6, PackageCollection, "UInt", A_Index-1, 'Ptr*', IPackage := this.IPackage()) ;GetAt 298 | arr.Push IPackage 299 | } 300 | IPackage:="" 301 | PackageCollection:="" 302 | return arr 303 | } 304 | ; Windows 10, version 1809 (introduced in 10.0.17763.0) 305 | static DeprovisionPackageForAllUsers(packageFamilyName) { 306 | ComCall(6, this.IPackageManager8 307 | , 'Ptr', this.HString(packageFamilyName) 308 | , 'Ptr*', DeploymentOperation := ComValue(13, 0)) 309 | Return this.WaitForAsync(DeploymentOperation) 310 | } 311 | 312 | static SetPackageStatus(packageFullName, PackageStatus:=0) { 313 | ; PackageStatus_OK := 0 314 | ; PackageStatus_LicenseIssue := 0x1 315 | ; PackageStatus_Modified := 0x2 316 | ; PackageStatus_Tampered := 0x4 317 | ; PackageStatus_Disabled := 0x8 318 | ; PackageStatus:= This enumeration supports a bitwise combination of its member values. 319 | ComCall(16, this.IPackageManager3, 'Ptr', this.HString(packageFullName), 'UInt', PackageStatus) 320 | } 321 | static ClearPackageStatus(packageFullName, PackageStatus:=0) { 322 | ComCall(8, this.IPackageManager3, 'Ptr', this.HString(packageFullName), 'UInt', PackageStatus) 323 | } 324 | 325 | static CheckInstallUser(packageFullName, UserSID_Need_Search, InstallState:=2) { 326 | ComCall(15, this.IPackageManager, 'Ptr', this.HString(packageFullName), 'Ptr*', Iterable_Users := ComValue(13, 0)) ;FindUsers 327 | ComCall(6, Iterable_Users, 'Ptr*', Iterator_User:=ComValue(13, 0)) ;First 328 | s:=0 329 | Loop { 330 | ComCall(7, Iterator_User, 'Char*', &HasCurrent:=0) ;get_HasCurrent 331 | If !HasCurrent 332 | Break 333 | ComCall(6, Iterator_User, 'Ptr*', ABI_User:=ComValue(13, 0)) ;get_Current 334 | ComCall(6, ABI_User, 'Ptr*', &UserSecurityId:=0) ;get_UserSecurityId 335 | ComCall(7, ABI_User, 'UInt*', &PackageInstallState:=0) ;get_InstallState 336 | ; PackageInstallState_NotInstalled = 0 ;The package has not been installed. 337 | ; PackageInstallState_Staged = 1 ;The package has been downloaded. 338 | ; PackageInstallState_Installed = 2 ;The package is ready for use. 339 | ; PackageInstallState_Paused = 6 ;The installation of the package has been paused. 340 | 341 | If this.HStringToStr(UserSecurityId)=UserSID_Need_Search && PackageInstallState==InstallState { 342 | s:=1 343 | Break 344 | } 345 | ComCall(8, Iterator_User, 'Char*', &IsMoveNext:=0) ;MoveNext 346 | If !IsMoveNext 347 | Break 348 | } 349 | ABI_User:="" 350 | UserSecurityId:="" 351 | Iterator_User:="" 352 | Iterable_Users:="" 353 | Return s 354 | } 355 | 356 | static WaitForAsync(obj, rIndex:=0, rType:="Ptr*", &rArg:=ComValue(13, 0)) { 357 | local AsyncInfo := ComObjQuery(obj, "{00000036-0000-0000-C000-000000000046}"), status, ErrorCode 358 | Loop { 359 | ComCall(7, AsyncInfo, "uint*", &status:=0) 360 | ; AsyncStatus 361 | ; 0:Started: The operation is in progress. 362 | ; 1:Completed:The operation has completed without error. 363 | ; 2:Canceled: The client has initiated a cancellation of the operation. 364 | ; 3:Error: The operation has completed with an error. No results are available. 365 | if (status != 0) { 366 | if (status = 3) { 367 | ComCall(8, ASyncInfo, "uint*", &ErrorCode:=0) 368 | A_LastError:=ErrorCode 369 | } 370 | break 371 | } 372 | Sleep 10 373 | } 374 | If rIndex!=0 { 375 | ComCall(rIndex, obj, rType, rArg) ;GetResults 376 | } 377 | ComCall(10, AsyncInfo) 378 | Return status 379 | } 380 | 381 | static CreateUri(str) { 382 | result := DllCall("Combase\RoGetActivationFactory" 383 | , "Ptr", this.HString("Windows.Foundation.Uri") 384 | , "Ptr", this.CLSIDFromString("{44A9796F-723E-4FDF-A218-033E75B0C084}") 385 | , "Ptr*", IUriRuntimeClassFactory:=ComValue(13, 0), "HRESULT") 386 | ComCall(6, IUriRuntimeClassFactory, "Ptr", this.HString(str), "Ptr*", IUriRuntimeClass2:=ComValue(13, 0)) 387 | Return IUriRuntimeClass2 388 | } 389 | 390 | class HString { 391 | Ptr:=0 392 | __New(str) => DllCall('combase\WindowsCreateString', 'WStr', str, 'UInt', StrLen(str), 'Ptr*', this, 'HRESULT') 393 | __Delete() => DllCall('combase\WindowsDeleteString', 'Ptr', this, 'HRESULT') 394 | } 395 | 396 | static HStringToStr(HS) { 397 | bStr:=DllCall("Combase.dll\WindowsGetStringRawBuffer", "Ptr", HS, "uint*", &length:=0, "Ptr") 398 | Return StrGet(bStr) 399 | } 400 | static CLSIDFromString(IID) { 401 | local CLSID := Buffer(16), res 402 | if res := DllCall("ole32\CLSIDFromString", "WStr", IID, "Ptr", CLSID, "UInt") 403 | throw Error("CLSIDFromString failed. Error: " . Format("{:#x}", res)) 404 | Return CLSID 405 | } 406 | } 407 | -------------------------------------------------------------------------------- /Lib/PicSwitch.ahk: -------------------------------------------------------------------------------- 1 | ;================================================================================ 2 | ; PicSwitch - Switch, Checkbox controls with picture 3 | ; tranht17 4 | ; 2024/01/14 5 | ;================================================================================ 6 | Class PicSwitch Extends Gui.Text { 7 | Static __New() { 8 | Gui.Prototype.AddPicSwitch:=this.AddPicSwitch 9 | } 10 | Static AddPicSwitch(Options:="", sText:="", iValue:=0, SOptions:="") { 11 | hPic:=SOptions && SOptions.Has("SHeight")?SOptions["SHeight"]:20 12 | wPic:=SOptions && SOptions.Has("SWidth")?SOptions["SWidth"]:20 13 | TextOpt:="" 14 | PicOpt:="" 15 | Loop parse, Options, A_Space A_Tab { 16 | If SubStr(A_LoopField,1,1) = 'w' && IsNumber(n:=SubStr(A_LoopField,2)) { 17 | TextOpt.=" w" n-wPic-3 18 | } Else If SubStr(A_LoopField,1,1) = 'x' { 19 | PicOpt.=" " A_LoopField 20 | } Else If SubStr(A_LoopField,1,1) = 'y' { 21 | PicOpt.=" " A_LoopField 22 | } Else { 23 | TextOpt.=" " A_LoopField 24 | } 25 | } 26 | ctlPic:=this.AddPic("BackgroundTrans" PicOpt " w" wPic " h" hPic) 27 | ctlPic.GetPos(&X, &Y) 28 | ctlTxt:=this.AddText("BackgroundTrans yp 0x200" TextOpt " h" hPic,sText) 29 | 30 | ctlEnabled:=ctlTxt.Enabled 31 | ctlVisible:=ctlTxt.Visible 32 | ctlPic.Enabled:=ctlEnabled 33 | ctlPic.Visible:=ctlVisible 34 | 35 | ctlTxt.base:=PicSwitch.Prototype 36 | ctlTxt.SPic:=ctlPic 37 | ctlTxt._Value:=iValue 38 | ctlTxt._Enabled:=ctlEnabled 39 | ctlTxt._Visible:=ctlVisible 40 | 41 | ctlTxt.OnEvent("click",ObjBindMethod(ctlTxt,"_ClickChangeValue")) 42 | ctlPic.OnEvent("click",ObjBindMethod(ctlTxt,"_ClickChangeValue")) 43 | 44 | ctlTxt.SOpt:=Map() 45 | If SOptions 46 | ctlTxt.SOpt:=SOptions 47 | If !ctlTxt.SOpt.Has("SWidth") 48 | ctlTxt.SOpt["SWidth"]:=wPic 49 | If !ctlTxt.SOpt.Has("SHeight") 50 | ctlTxt.SOpt["SHeight"]:=hPic 51 | ctlTxt.RefreshStatusIcon 52 | return ctlTxt 53 | } 54 | Type => "PicSwitch" 55 | Value { 56 | get => this._Value 57 | set { 58 | if (this._Value!=value) { 59 | this._Value:=value 60 | this.RefreshStatusIcon 61 | } 62 | Return value 63 | } 64 | } 65 | Enabled { 66 | get => this._Enabled 67 | set { 68 | if (this._Enabled!=value) { 69 | super.Enabled:=value 70 | this.SPic.Enabled:=value 71 | this._Enabled:=value 72 | this.RefreshStatusIcon 73 | } 74 | Return value 75 | } 76 | } 77 | Visible { 78 | get => this._Visible 79 | set { 80 | if (this._Visible!=value) { 81 | super.Visible:=value 82 | this.SPic.Visible:=value 83 | this._Visible:=value 84 | } 85 | Return value 86 | } 87 | } 88 | Move(X?, Y?, W?, H?) { 89 | wSPic:=this.SOpt["SWidth"] 90 | hSPic:=this.SOpt["SHeight"] 91 | If IsSet(H) { 92 | wSPic+=(H-hSPic) 93 | this.SOpt["SHeight"]:=H 94 | this.SOpt["SWidth"]:=wSPic 95 | } 96 | this.SPic.Move(X?, Y?, IsSet(H)?wSPic:unset, H?) 97 | this.SPic.GetPos(&wX) 98 | super.Move((IsSet(X)||IsSet(H))?(wX+wSPic+3):unset, Y?, IsSet(W)?W-wSPic-3:unset, H?) 99 | } 100 | GetPos(&X?, &Y?, &W?, &H?) { 101 | this.SPic.GetPos(&X, &Y, &sW) 102 | super.GetPos(,, &tW, &H) 103 | W:=sW+tW+3 104 | } 105 | _ClickChangeValue(*) { 106 | this._Value:=!this._Value 107 | this.RefreshStatusIcon 108 | } 109 | RefreshStatusIcon(*) { 110 | this.SPic.GetPos(&sX,, &sW, &sH) 111 | If sW!=this.SOpt["SWidth"] { 112 | this.SPic.Move(,, this.SOpt["SWidth"]) 113 | super.Move(sX+this.SOpt["SWidth"]+3) 114 | } 115 | If sH!=this.SOpt["SHeight"] { 116 | this.Move(,,, this.SOpt["SHeight"]) 117 | } 118 | nOpt:="Value" this._Value (this._Enabled?"":"Disabled") "Icon" 119 | this.SPic.Value:=(this.SOpt.Has(nOpt) && this.SOpt[nOpt])?this.SOpt[nOpt]:"" 120 | } 121 | } -------------------------------------------------------------------------------- /Lib/Powrprof.ahk: -------------------------------------------------------------------------------- 1 | ; https://docs.microsoft.com/en-us/windows-hardware/customize/power-settings/configure-power-settings 2 | 3 | GetSleepIdleTimeout() { 4 | SubGroupGUID:=GUID("{238c9fa8-0aad-41ed-83f4-97be242c8f20}") 5 | PowerSettingGUID:=GUID("{29f6c1db-86da-48c5-9fdb-f2b67b1f44da}") 6 | return PowerReadValueIndex(SubGroupGUID, PowerSettingGUID) 7 | } 8 | 9 | SetSleepIdleTimeout(Num) { 10 | SubGroupGUID:=GUID("{238c9fa8-0aad-41ed-83f4-97be242c8f20}") 11 | PowerSettingGUID:=GUID("{29f6c1db-86da-48c5-9fdb-f2b67b1f44da}") 12 | PowerWriteACValueIndex(SubGroupGUID, PowerSettingGUID, Num) 13 | } 14 | 15 | GetHibernateIdleTimeout() { 16 | SubGroupGUID:=GUID("{238c9fa8-0aad-41ed-83f4-97be242c8f20}") 17 | PowerSettingGUID:=GUID("{9d7815a6-7ee4-497e-8888-515a05f02364}") 18 | return PowerReadValueIndex(SubGroupGUID, PowerSettingGUID) 19 | } 20 | 21 | SetHibernateIdleTimeout(Num) { 22 | SubGroupGUID:=GUID("{238c9fa8-0aad-41ed-83f4-97be242c8f20}") 23 | PowerSettingGUID:=GUID("{9d7815a6-7ee4-497e-8888-515a05f02364}") 24 | PowerWriteACValueIndex(SubGroupGUID, PowerSettingGUID, Num) 25 | } 26 | 27 | GetHybridSleepIdleTimeout() { 28 | SubGroupGUID:=GUID("{238c9fa8-0aad-41ed-83f4-97be242c8f20}") 29 | PowerSettingGUID:=GUID("{94ac6d29-73ce-41a6-809f-6363ba21b47e}") 30 | return PowerReadValueIndex(SubGroupGUID, PowerSettingGUID) 31 | } 32 | 33 | SetHybridSleepIdleTimeout(Num) { 34 | SubGroupGUID:=GUID("{238c9fa8-0aad-41ed-83f4-97be242c8f20}") 35 | PowerSettingGUID:=GUID("{94ac6d29-73ce-41a6-809f-6363ba21b47e}") 36 | PowerWriteACValueIndex(SubGroupGUID, PowerSettingGUID, Num) 37 | } 38 | 39 | GetDisplayBrightnessLevel() { 40 | SubGroupGUID:=GUID("{7516b95f-f776-4464-8c53-06167f40cc99}") 41 | PowerSettingGUID:=GUID("{aded5e82-b909-4619-9949-f5d71dac0bcb}") 42 | return PowerReadValueIndex(SubGroupGUID, PowerSettingGUID) 43 | } 44 | 45 | GetDisplayIdleTimeout() { 46 | SubGroupGUID:=GUID("{7516b95f-f776-4464-8c53-06167f40cc99}") 47 | PowerSettingGUID:=GUID("{3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e}") 48 | return PowerReadValueIndex(SubGroupGUID, PowerSettingGUID) 49 | } 50 | 51 | SetDisplayIdleTimeout(Num) { 52 | SubGroupGUID:=GUID("{7516b95f-f776-4464-8c53-06167f40cc99}") 53 | PowerSettingGUID:=GUID("{3c0bc021-c8a8-4e07-a973-6b14cbcb2b7e}") 54 | PowerWriteACValueIndex(SubGroupGUID, PowerSettingGUID, Num) 55 | } 56 | 57 | PowerWriteACValueIndex(SubGroupGUID, PowerSettingGUID, Num) { 58 | DllCall("powrprof\PowerGetActiveScheme", "Ptr",0, "Ptr*",&currSchemeGuid:=0, "UInt") 59 | If IsOnAc() 60 | DllCall("powrprof\PowerWriteACValueIndex", "Ptr", 0, "Ptr", currSchemeGuid, "Ptr", SubGroupGUID, "Ptr", PowerSettingGUID, "UInt", Num, "UInt") 61 | Else 62 | DllCall("powrprof\PowerWriteDCValueIndex", "Ptr", 0, "Ptr", currSchemeGuid, "Ptr", SubGroupGUID, "Ptr", PowerSettingGUID, "UInt", Num, "UInt") 63 | DllCall("powrprof\PowerSetActiveScheme", "Ptr",0, "Ptr",currSchemeGuid) 64 | DllCall("LocalFree", "Ptr", currSchemeGuid, "Ptr") 65 | } 66 | 67 | PowerReadValueIndex(SubGroupGUID, PowerSettingGUID) { 68 | DllCall("powrprof\PowerGetActiveScheme", "Ptr",0, "Ptr*",&currSchemeGuid:=0, "UInt") 69 | If IsOnAc() 70 | DllCall("powrprof\PowerReadACValueIndex", "Ptr",0, "Ptr",currSchemeGuid, "Ptr",SubGroupGUID, "Ptr",PowerSettingGUID, "UIntP",&r:=0, "UInt") 71 | Else 72 | DllCall("powrprof\PowerReadDCValueIndex", "Ptr",0, "Ptr",currSchemeGuid, "Ptr",SubGroupGUID, "Ptr",PowerSettingGUID, "UIntP",&r:=0, "UInt") 73 | DllCall("LocalFree", "Ptr", currSchemeGuid, "Ptr") 74 | Return r 75 | } 76 | 77 | IsOnAc() { 78 | SystemPowerStatus := Buffer(12) 79 | If DllCall("GetSystemPowerStatus", "Ptr", SystemPowerStatus) 80 | If acStatus := NumGet(SystemPowerStatus, 0, "UChar") == 1 81 | return True 82 | return False 83 | } 84 | 85 | GUID(sGUID) ; Converts a string to a binary GUID and returns it in a Buffer. 86 | { 87 | rGUID := Buffer(16, 0) 88 | if DllCall("ole32\CLSIDFromString", "WStr", sGUID, "Ptr", rGUID) < 0 89 | throw ValueError("Invalid parameter #1", -1, sGUID) 90 | return rGUID 91 | } 92 | 93 | StringFromCLSID(rclsid) ; Converts a binary GUID to a string. 94 | { 95 | DllCall("ole32\StringFromCLSID", "Ptr", rclsid, "Ptr*", &lplpsz:=0) 96 | s := StrGet(lplpsz, "UTF-16") 97 | DllCall("ole32\CoTaskMemFree", "Ptr", lplpsz) 98 | return s 99 | } -------------------------------------------------------------------------------- /Lib/RunTerminal.ahk: -------------------------------------------------------------------------------- 1 | ; https://www.autohotkey.com/boards/viewtopic.php?f=83&t=93944 2 | RunTerminal(CmdLine, WorkingDir:="", Codepage:="utf-8", Fn:="RunTerminal_Output") { 3 | DllCall("CreatePipe", "PtrP",&hPipeR:=0, "PtrP",&hPipeW:=0, "Ptr",0, "Int",0) 4 | , DllCall("SetHandleInformation", "Ptr",hPipeW, "Int",1, "Int",1) 5 | , DllCall("SetNamedPipeHandleState","Ptr",hPipeR, "UIntP",&PIPE_NOWAIT:=1, "Ptr",0, "Ptr",0) 6 | , P8 := (A_PtrSize=8) 7 | , SI:=Buffer(P8 ? 104 : 68, 0) ; STARTUPINFO structure 8 | , NumPut("UInt", P8 ? 104 : 68, SI) ; size of STARTUPINFO 9 | , NumPut("UInt", STARTF_USESTDHANDLES:=0x100, SI, P8 ? 60 : 44) ; dwFlags 10 | , NumPut("Ptr", hPipeW, SI, P8 ? 88 : 60) ; hStdOutput 11 | , NumPut("Ptr", hPipeW, SI, P8 ? 96 : 64) ; hStdError 12 | , PI:=Buffer(P8 ? 24 : 16) ; PROCESS_INFORMATION structure 13 | If not DllCall("CreateProcess", "Ptr",0, "Str",CmdLine, "Ptr",0, "Int",0, "Int",True 14 | ,"Int",0x08000000 | DllCall("GetPriorityClass", "Ptr",-1, "UInt"), "Int",0 15 | ,"Ptr",WorkingDir ? StrPtr(WorkingDir) : 0, "Ptr",SI.ptr, "Ptr",PI.ptr) 16 | Return Format("{1:}", "", -1 17 | ,DllCall("CloseHandle", "Ptr",hPipeW), DllCall("CloseHandle", "Ptr",hPipeR)) 18 | DllCall("CloseHandle", "Ptr",hPipeW) 19 | , PID := NumGet(PI, P8 ? 16 : 8, "UInt") 20 | , sFile := FileOpen(hPipeR, "h", Codepage) 21 | , LineNum := 1, sOutput := "" 22 | While (PID + DllCall("Sleep", "Int",1)) and DllCall("PeekNamedPipe", "Ptr",hPipeR, "Ptr",0, "Int",0, "Ptr",0, "Ptr",0, "Ptr",0) 23 | While PID and !sFile.AtEOF 24 | Line := sFile.ReadLine() "`r`n", sOutput .= Type(Fn)="Func" ? Fn.Call(Line, LineNum++,&PID) : Line 25 | PID := 0 26 | , hProcess := NumGet(PI, 0, "Ptr") 27 | , hThread := NumGet(PI, A_PtrSize, "Ptr") 28 | , DllCall("CloseHandle", "Ptr",hProcess) 29 | , DllCall("CloseHandle", "Ptr",hThread) 30 | , DllCall("CloseHandle", "Ptr",hPipeR) 31 | Return sOutput 32 | } 33 | -------------------------------------------------------------------------------- /Lib/SC.ahk: -------------------------------------------------------------------------------- 1 | ; ============ Service ================ 2 | ; State 3 | ; 1:Stopped 4 | ; 2:Start Pending 5 | ; 3:Stop Pending 6 | ; 4:Running 7 | ; 5:Continue Pending 8 | ; 6:Pause Pending 9 | ; 7:Paused 10 | ; StartType 11 | ; SERVICE_BOOT_START:=0x00000000 12 | ; SERVICE_SYSTEM_START:=0x00000001 13 | ; SERVICE_AUTO_START:=0x00000002 14 | ; SERVICE_DEMAND_START:=0x00000003 15 | ; SERVICE_DISABLED:=0x00000004 16 | ; SERVICE_NO_CHANGE:=0xFFFFFFFF 17 | Service_State(ServiceName, textResult:=false) { ; Return Values 18 | SCM_HANDLE := OpenSCManager(0x1) 19 | hSvc := OpenService(SCM_HANDLE,ServiceName,0x4) 20 | 21 | If (!hSvc) 22 | result := 0 23 | Else { 24 | SC_STATUS := Buffer(28, 0) 25 | QueryServiceStatus(hSvc, SC_STATUS) 26 | result := NumGet(SC_STATUS,4,"UInt") 27 | CloseServiceHandle(hSvc) 28 | } 29 | CloseServiceHandle(SCM_HANDLE) 30 | 31 | If (textResult) { 32 | r := result 33 | result := (r=1) ? "Stopped" : (r=2) ? "Start Pending" : (r=3) ? "Stop Pending" : (r=4) ? "Running" : (r=5) ? "Continue Pending" : (r=6) ? "Pause Pending" : (r=7) ? "Paused" : "Unknown" 34 | } 35 | return result 36 | } 37 | 38 | Service_Info(ServiceName) { 39 | encoding := (!StrLen(Chr(0xFFFF))) ? "UTF-8" : "UTF-16" 40 | SCM_HANDLE := OpenSCManager(0xF003F) 41 | hSvc := OpenService(SCM_HANDLE,ServiceName,0x0001) 42 | 43 | If (!hSvc) { 44 | result := 0 45 | } Else { 46 | QueryServiceConfig(hSvc,,,&bSize:=0) 47 | QUERY_SERVICE_CONFIG := Buffer(bSize,0) 48 | QueryServiceConfig(hSvc,QUERY_SERVICE_CONFIG,bSize) 49 | 50 | If (bSize) { 51 | svcType := NumGet(QUERY_SERVICE_CONFIG,0,"UInt") 52 | svcStartMode := NumGet(QUERY_SERVICE_CONFIG,4,"UInt") 53 | svcErrCtl := NumGet(QUERY_SERVICE_CONFIG,8,"UInt") 54 | binPath_LPSTR := NumGet(QUERY_SERVICE_CONFIG,(A_PtrSize=4) ? 12 : 16, "UPtr") 55 | svcPathName := StrGet(binPath_LPSTR,encoding) 56 | ;lpLoadOrderGroup:16:24 57 | ;dwTagId:20:32 58 | depen_LPSTR := NumGet(QUERY_SERVICE_CONFIG,(A_PtrSize=4) ? 24 : 40, "UPtr") 59 | ServiceStartName_LPSTR := NumGet(QUERY_SERVICE_CONFIG,(A_PtrSize=4) ? 28 : 48, "UPtr") 60 | DispName_LPSTR := NumGet(QUERY_SERVICE_CONFIG,(A_PtrSize=4) ? 32 : 56, "UPtr") 61 | svcDispName := StrGet(DispName_LPSTR,encoding) 62 | 63 | offset := 0, svcDep := Map(), svcTrigger := 0, svcDelayed := false, svcDesc := "" 64 | While (curDep := StrGet(depen_LPSTR+offset,encoding)) { 65 | svcDep[curDep] := "" 66 | offset += (StrLen(curDep) + 1) * ((A_PtrSize=4) ? 1 : 2) 67 | } 68 | 69 | SERVICE_CONFIG_DESCRIPTION:=1 70 | QueryServiceConfig2(hSvc, SERVICE_CONFIG_DESCRIPTION,,, &bSize:=0) 71 | if (bSize) { 72 | SERVICE_DESCRIPTION := Buffer(bSize,0) 73 | QueryServiceConfig2(hSvc, SERVICE_CONFIG_DESCRIPTION,SERVICE_DESCRIPTION,bSize) 74 | str_ptr := NumGet(SERVICE_DESCRIPTION,"UPtr") 75 | svcDesc := str_ptr ? StrGet(str_ptr,encoding) : "" 76 | } 77 | 78 | SERVICE_CONFIG_DELAYED_AUTO_START_INFO:=3 79 | QueryServiceConfig2(hSvc, SERVICE_CONFIG_DELAYED_AUTO_START_INFO,,, &bSize:=0) 80 | if (bSize) { 81 | SERVICE_DELAYED_AUTO_START_INFO := Buffer(bSize,0) 82 | r:=QueryServiceConfig2(hSvc, SERVICE_CONFIG_DELAYED_AUTO_START_INFO,SERVICE_DELAYED_AUTO_START_INFO,bSize) 83 | svcDelayed := r ? NumGet(SERVICE_DELAYED_AUTO_START_INFO,"Char") : false 84 | } 85 | 86 | SERVICE_CONFIG_TRIGGER_INFO:=8 87 | QueryServiceConfig2(hSvc, SERVICE_CONFIG_TRIGGER_INFO,,, &bSize:=0) 88 | If (bSize) { 89 | SERVICE_TRIGGER_INFO := Buffer(bSize,0) 90 | QueryServiceConfig2(hSvc, SERVICE_CONFIG_TRIGGER_INFO,SERVICE_TRIGGER_INFO,bSize) 91 | svcTrigger := NumGet(SERVICE_TRIGGER_INFO,"UInt") 92 | } 93 | } 94 | CloseServiceHandle(hSvc) 95 | result := Map("svcName",ServiceName,"svcDispName",svcDispName,"svcStartMode",svcStartMode 96 | ,"svcDesc",svcDesc,"svcPathName",svcPathName,"svcType",svcType,"svcDep",svcDep 97 | ,"svcTrigger",svcTrigger,"svcDelayed",svcDelayed) 98 | } 99 | CloseServiceHandle(SCM_HANDLE) 100 | Return result 101 | } 102 | 103 | Service_List(State:="", SvcType:="") { 104 | ServiceState := (State="Active") ? 0x1 : (State="Inactive") ? 0x2 : 0x3 ; 0x3 = All 105 | ServiceType := (SvcType="Driver") ? 0xB : (SvcType="All") ? 0x3B : 0x30 ; 0x30 = Services Only 106 | 107 | SCM_HANDLE := OpenSCManager(0x4) 108 | 109 | EnumServicesStatus(SCM_HANDLE, ServiceType, ServiceState,,, &bSize:=0) 110 | ENUM_SERVICE_STATUS := Buffer(bSize, 0) 111 | EnumServicesStatus(SCM_HANDLE, ServiceType, ServiceState, ENUM_SERVICE_STATUS, bSize,, &ServiceCount:=0) 112 | 113 | struct_size1 := (A_PtrSize=4) ? 36 : 48 114 | encoding := (!StrLen(Chr(0xFFFF))) ? "UTF-8" : "UTF-16" 115 | svcObjList := Map() 116 | 117 | Loop ServiceCount { 118 | SvcName_LPSTR := NumGet(ENUM_SERVICE_STATUS,(A_Index-1)*struct_size1,"UPtr") 119 | svcName := StrGet(SvcName_LPSTR,encoding) 120 | svcState := NumGet(ENUM_SERVICE_STATUS, ((A_Index-1)*struct_size1)+(A_PtrSize * 2)+4,"UInt") 121 | 122 | svcObj := Service_Info(svcName) 123 | svcObj["svcState"]:=svcState 124 | svcObjList[svcName] := svcObj 125 | } 126 | CloseServiceHandle(SCM_HANDLE) 127 | Return svcObjList 128 | } 129 | 130 | Service_Start(ServiceName) { 131 | ;Static ERROR_ACCESS_DENIED:=5, ERROR_INVALID_HANDLE:=6, ERROR_INVALID_NAME:=123, ERROR_SERVICE_DOES_NOT_EXIST:=1060 132 | SCM_HANDLE := OpenSCManager(0x1) ;SC_MANAGER_CONNECT 133 | hSvc := OpenService(SCM_HANDLE,ServiceName,0x10) ;SC_MANAGER_QUERY_LOCK_STATUS 0x10 134 | result := 0 135 | If (hSvc) { 136 | result := StartService(hSvc) 137 | CloseServiceHandle(hSvc) 138 | } 139 | CloseServiceHandle(SCM_HANDLE) 140 | return result 141 | } 142 | 143 | Service_Stop(ServiceName) { 144 | SCM_HANDLE := OpenSCManager(0x1) ;SC_MANAGER_CONNECT 145 | hSvc := OpenService(SCM_HANDLE,ServiceName,0x0020) ;SERVICE_STOP (0x0020) 146 | result := 0 147 | If (!hSvc) 148 | LastErr := 0 149 | Else { 150 | SERVICE_STATUS := Buffer((A_PtrSize=4)?28:32,0) 151 | result := ControlService(hSvc, SERVICE_STATUS) 152 | LastErr := A_LastError 153 | SERVICE_STATUS := "" 154 | CloseServiceHandle(hSvc) 155 | } 156 | CloseServiceHandle(SCM_HANDLE) 157 | A_LastError := LastErr 158 | return result 159 | } 160 | 161 | ; StartType: [Auto/AutoMatic], [Demand/OnDemand], Disabled 162 | Service_Add(ServiceName, BinaryPath, StartType:="", DisplayName:="") { 163 | if !A_IsAdmin 164 | Return False 165 | 166 | SCM_HANDLE := OpenSCManager(0x2) 167 | StartType := (StartType="Auto" Or StartType="Automatic") ? 0x2 : (StartType="Demand" Or StartType="OnDemand") ? 0x3 : 0x4 ; 0x4 = Disabled 168 | SC_HANDLE := CreateService(SCM_HANDLE, ServiceName, DisplayName, 0xF01FF, 0x110, StartType, 0x1, BinaryPath) 169 | result := A_LastError ? SC_HANDLE "," A_LastError : 1 170 | CloseServiceHandle(SC_HANDLE) 171 | CloseServiceHandle(SCM_HANDLE) 172 | Return result 173 | } 174 | 175 | Service_Delete(ServiceName) { 176 | if !A_IsAdmin ;Requires Administrator rights 177 | Return False 178 | 179 | SCM_HANDLE := OpenSCManager(0x1) 180 | result := 0 181 | hSvc := OpenService(SCM_HANDLE,ServiceName,0xF01FF) ;SERVICE_ALL_ACCESS (0xF01FF) 182 | If !hSvc 183 | result := -4 ;Service Not Found 184 | 185 | if !result 186 | result := DeleteService(hSvc) 187 | CloseServiceHandle(SCM_HANDLE) 188 | Return result 189 | } 190 | 191 | Service_Change_StartType(ServiceName, sStartType) { 192 | if !A_IsAdmin ;Requires Administrator rights 193 | Return False 194 | SCM_HANDLE := OpenSCManager(0xF003F) 195 | hSvc := OpenService(SCM_HANDLE,ServiceName,0x0002) 196 | 197 | If (!hSvc) { 198 | result := 0 199 | } Else { 200 | result := ChangeServiceConfig(hSvc,,sStartType) 201 | CloseServiceHandle(hSvc) 202 | } 203 | CloseServiceHandle(SCM_HANDLE) 204 | Return result 205 | } 206 | 207 | ;SC_MANAGER_ALL_ACCESS := 0xF003F 208 | OpenSCManager(AR) { 209 | f := (!StrLen(Chr(0xFFFF))) ? "OpenSCManagerA" : "OpenSCManagerW" 210 | Return DllCall("advapi32\" f, "Ptr", 0, "Ptr", 0, "UInt", AR) 211 | } 212 | 213 | ;SERVICE_CHANGE_CONFIG (0x0002) 214 | OpenService(SCM_HANDLE,ServiceName,AR) { 215 | f := (!StrLen(Chr(0xFFFF))) ? "OpenServiceA" : "OpenServiceW" 216 | Return DllCall("advapi32\" f, "UInt", SCM_HANDLE, "Str", ServiceName, "UInt", AR) 217 | } 218 | 219 | QueryServiceConfig(hService, ServiceConfig:=0, BufSize:=0, &BytesNeeded:=0) { 220 | f := (!StrLen(Chr(0xFFFF))) ? "QueryServiceConfigA" : "QueryServiceConfigW" 221 | Return DllCall("advapi32\" f, "Ptr", hService, "Ptr", (ServiceConfig?ServiceConfig.Ptr:0), "UInt", BufSize, "UInt*", &BytesNeeded) 222 | } 223 | 224 | QueryServiceConfig2(hService, InfoLevel:=0, Buff:=0, BufSize:=0, &BytesNeeded:=0) { 225 | f := (!StrLen(Chr(0xFFFF))) ? "QueryServiceConfig2A" : "QueryServiceConfig2W" 226 | Return DllCall("advapi32\" f,"Ptr",hService, "UInt", InfoLevel,"Ptr",(Buff?Buff.Ptr:0), "UInt", BufSize, "UInt*", &BytesNeeded) 227 | } 228 | 229 | ChangeServiceConfig(hService,sType:=0xFFFFFFFF,sStartType:=0xFFFFFFFF) { 230 | ;SERVICE_BOOT_START:=0x00000000 231 | ;SERVICE_SYSTEM_START:=0x00000001 232 | ;SERVICE_AUTO_START:=0x00000002 233 | ;SERVICE_DEMAND_START:=0x00000003 234 | ;SERVICE_DISABLED:=0x00000004 235 | ;SERVICE_NO_CHANGE:=0xFFFFFFFF 236 | f := (!StrLen(Chr(0xFFFF))) ? "ChangeServiceConfigA" : "ChangeServiceConfigW" 237 | Return DllCall("advapi32\" f, "Ptr", hService, "UInt", sType, "UInt", sStartType, "UInt", 0xFFFFFFFF, "Ptr", 0, "Ptr", 0, "Ptr", 0, "Ptr", 0, "Ptr", 0, "Ptr", 0, "Ptr", 0) 238 | } 239 | 240 | EnumServicesStatus(hService, sType, sState, lpServices:=0, BufSize:=0, &BytesNeeded:=0, &sCount:=0, &ResumeHandle:=0) { 241 | f := (!StrLen(Chr(0xFFFF))) ? "EnumServicesStatusA" : "EnumServicesStatusW" 242 | Return DllCall("advapi32\" f 243 | ,"Ptr", hService,"UInt", sType,"UInt", sState,"Ptr", (lpServices?lpServices.Ptr:0) 244 | ,"UInt", BufSize,"UInt*", &BytesNeeded,"UInt*", &sCount,"UInt*", ResumeHandle) 245 | } 246 | 247 | QueryServiceStatus(hService, SC_STATUS) { 248 | Return DllCall("advapi32\QueryServiceStatus", "Ptr", hService, "Ptr", SC_STATUS.ptr) 249 | } 250 | 251 | StartService(hService) { 252 | f := (!StrLen(Chr(0xFFFF))) ? "StartServiceA" : "StartServiceW" 253 | Return DllCall("advapi32\" f, "UPtr", hService, "UInt", 0, "Ptr", 0) 254 | } 255 | 256 | ControlService(hService, SERVICE_STATUS) { 257 | Return DllCall("advapi32\ControlService", "UPtr", hService, "UInt", 1, "Ptr", SERVICE_STATUS.ptr) 258 | } 259 | 260 | CreateService(SCM_HANDLE, ServiceName, DisplayName:="", dwDesiredAccess:=0xF01FF, dwServiceType:=0x00000010, dwStartType:=2, dwErrorControl:=0x00000001, lpBinaryPathName:=0) { 261 | funcName2 := (!StrLen(Chr(0xFFFF))) ? "CreateServiceA" : "CreateServiceW" 262 | 263 | Return DllCall("advapi32\" funcName2 264 | , "Ptr", SCM_HANDLE ; UInt? 265 | , "Ptr", StrPtr(ServiceName) 266 | , "Ptr", (!DisplayName ? StrPtr(ServiceName) : StrPtr(DisplayName)) 267 | , "UInt", dwDesiredAccess ;SERVICE_ALL_ACCESS (0xF01FF) 268 | , "UInt", dwServiceType ;SERVICE_WIN32_OWN_PROCESS(0x00000010) | SERVICE_INTERACTIVE_PROCESS(0x00000100) 269 | ;;;;;; interactable service with desktop (requires local account) 270 | ;;;;;; http://msdn.microsoft.com/en-us/library/ms683502(VS.85).aspx 271 | , "UInt", dwStartType 272 | , "UInt", dwErrorControl ;SERVICE_ERROR_NORMAL(0x00000001) 273 | , "Ptr", (lpBinaryPathName?StrPtr(lpBinaryPathName):0) 274 | , "Ptr", 0 ;No Group (string) 275 | , "UInt", 0 ;No TagId 276 | , "Ptr", 0 ;No Dependencies (string) 277 | , "Int", 0 ;Use LocalSystem Account 278 | , "Ptr", 0) ;(String) 279 | } 280 | 281 | DeleteService(hService) { 282 | Return DllCall("advapi32\DeleteService", "Ptr", hService) 283 | } 284 | 285 | CloseServiceHandle(Handle) { 286 | DllCall("advapi32\CloseServiceHandle", "Ptr", Handle) 287 | } 288 | -------------------------------------------------------------------------------- /Lib/ToolTipOptions.ahk: -------------------------------------------------------------------------------- 1 | ; Class ToolTipOptions - 2024-03-27 2 | ; just me 3 | ; https://www.autohotkey.com/boards/viewtopic.php?f=83&t=113308 4 | ; ====================================================================================================================== 5 | ; ToolTipOptions - additional options for ToolTips 6 | ; 7 | ; Tooltip control -> https://learn.microsoft.com/en-us/windows/win32/controls/tooltip-control-reference 8 | ; TTM_SETMARGIN = 1050 9 | ; TTM_SETTIPBKCOLOR = 1043 10 | ; TTM_SETTIPTEXTCOLOR = 1044 11 | ; TTM_SETTITLEW = 1057 12 | ; WM_SETFONT = 0x30 13 | ; SetClassLong() -> https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-setclasslongw 14 | ; ====================================================================================================================== 15 | Class ToolTipOptions { 16 | ; ------------------------------------------------------------------------------------------------------------------- 17 | Static HTT := DllCall("User32.dll\CreateWindowEx", "UInt", 8, "Str", "tooltips_class32", "Ptr", 0, "UInt", 3 18 | , "Int", 0, "Int", 0, "Int", 0, "Int", 0, "Ptr", A_ScriptHwnd, "Ptr", 0, "Ptr", 0, "Ptr", 0) 19 | Static SWP := CallbackCreate(ObjBindMethod(ToolTipOptions, "_WNDPROC_"), , 4) ; subclass window proc 20 | Static OWP := 0 ; original window proc 21 | Static ToolTips := Map() 22 | ; ------------------------------------------------------------------------------------------------------------------- 23 | Static BkgColor := "" 24 | Static TxtColor := "" 25 | Static Icon := "" 26 | Static Title := "" 27 | Static HFONT := 0 28 | Static Margins := "" 29 | ; ------------------------------------------------------------------------------------------------------------------- 30 | Static Call(*) => False ; do not create instances 31 | ; ------------------------------------------------------------------------------------------------------------------- 32 | ; Init() - Initialize some class variables and subclass the tooltip control. 33 | ; ------------------------------------------------------------------------------------------------------------------- 34 | Static Init() { 35 | If (This.OWP = 0) { 36 | This.BkgColor := "" 37 | This.TxtColor := "" 38 | This.Icon := "" 39 | This.Title := "" 40 | This.Margins := "" 41 | If (A_PtrSize = 8) 42 | This.OWP := DllCall("User32.dll\SetClassLongPtr", "Ptr", This.HTT, "Int", -24, "Ptr", This.SWP, "UPtr") 43 | Else 44 | This.OWP := DllCall("User32.dll\SetClassLongW", "Ptr", This.HTT, "Int", -24, "Int", This.SWP, "UInt") 45 | OnExit(ToolTipOptions._EXIT_, -1) 46 | Return This.OWP 47 | } 48 | Else 49 | Return False 50 | } 51 | ; ------------------------------------------------------------------------------------------------------------------- 52 | ; Reset() - Close all existing tooltips, delete the font object, and remove the tooltip's subclass. 53 | ; ------------------------------------------------------------------------------------------------------------------- 54 | Static Reset() { 55 | If (This.OWP != 0) { 56 | For HWND In This.ToolTips.Clone() 57 | DllCall("DestroyWindow", "Ptr", HWND) 58 | This.ToolTips.Clear() 59 | If This.HFONT 60 | DllCall("DeleteObject", "Ptr", This.HFONT) 61 | This.HFONT := 0 62 | If (A_PtrSize = 8) 63 | DllCall("User32.dll\SetClassLongPtrW", "Ptr", This.HTT, "Int", -24, "Ptr", This.OWP, "UPtr") 64 | Else 65 | DllCall("User32.dll\SetClassLongW", "Ptr", This.HTT, "Int", -24, "Int", This.OWP, "UInt") 66 | This.OWP := 0 67 | Return True 68 | } 69 | Else 70 | Return False 71 | } 72 | ; ------------------------------------------------------------------------------------------------------------------- 73 | ; SetColors() - Set or remove the text and/or the background color for the tooltip. 74 | ; Parameters: 75 | ; BkgColor - color value like used in Gui.BackColor(...) 76 | ; TxtColor - see above. 77 | ; ------------------------------------------------------------------------------------------------------------------- 78 | Static SetColors(BkgColor := "", TxtColor := "") { 79 | This.BkgColor := BkgColor = "" ? "" : BGR(BkgColor) 80 | This.TxtColor := TxtColor = "" ? "" : BGR(TxtColor) 81 | BGR(Color, Default := "") { ; converts colors to BGR 82 | ; HTML Colors (BGR) 83 | Static HTML := {AQUA: 0xFFFF00, BLACK: 0x000000, BLUE: 0xFF0000, FUCHSIA: 0xFF00FF, GRAY: 0x808080, 84 | GREEN: 0x008000, LIME: 0x00FF00, MAROON: 0x000080, NAVY: 0x800000, OLIVE: 0x008080, 85 | PURPLE: 0x800080, RED: 0x0000FF, SILVER: 0xC0C0C0, TEAL: 0x808000, WHITE: 0xFFFFFF, 86 | YELLOW: 0x00FFFF} 87 | If HTML.HasProp(Color) 88 | Return HTML.%Color% 89 | If (Color Is String) && IsXDigit(Color) && (StrLen(Color) = 6) 90 | Color := Integer("0x" . Color) 91 | If IsInteger(Color) 92 | Return ((Color >> 16) & 0xFF) | (Color & 0x00FF00) | ((Color & 0xFF) << 16) 93 | Return Default 94 | } 95 | } 96 | ; ------------------------------------------------------------------------------------------------------------------- 97 | ; SetFont() - Set or remove the font used by the tooltip. 98 | ; Parameters: 99 | ; FntOpts - font options like Gui.SetFont(Options, ...) 100 | ; FntName - font name like Gui.SetFont(..., Name) 101 | ; ------------------------------------------------------------------------------------------------------------------- 102 | Static SetFont(FntOpts := "", FntName := "") { 103 | Static HDEF := DllCall("GetStockObject", "Int", 17, "UPtr") ; DEFAULT_GUI_FONT 104 | Static LOGFONTW := 0 105 | If (FntOpts = "") && (FntName = "") { 106 | If This.HFONT 107 | DllCall("DeleteObject", "Ptr", This.HFONT) 108 | This.HFONT := 0 109 | LOGFONTW := 0 110 | } 111 | Else { 112 | If (LOGFONTW = 0) { 113 | LOGFONTW := Buffer(92, 0) 114 | DllCall("GetObject", "Ptr", HDEF, "Int", 92, "Ptr", LOGFONTW) 115 | } 116 | HDC := DllCall("GetDC", "Ptr", 0, "UPtr") 117 | LOGPIXELSY := DllCall("GetDeviceCaps", "Ptr", HDC, "Int", 90, "Int") 118 | DllCall("ReleaseDC", "Ptr", HDC, "Ptr", 0) 119 | If (FntOpts != "") { 120 | For Opt In StrSplit(RegExReplace(Trim(FntOpts), "\s+", " "), " ") { 121 | Switch StrUpper(Opt) { 122 | Case "BOLD": NumPut("Int", 700, LOGFONTW, 16) 123 | Case "ITALIC": NumPut("Char", 1, LOGFONTW, 20) 124 | Case "UNDERLINE": NumPut("Char", 1, LOGFONTW, 21) 125 | Case "STRIKE": NumPut("Char", 1, LOGFONTW, 22) 126 | Case "NORM": NumPut("Int", 400, "Char", 0, "Char", 0, "Char", 0, LOGFONTW, 16) 127 | Default: 128 | O := StrUpper(SubStr(Opt, 1, 1)) 129 | V := SubStr(Opt, 2) 130 | Switch O { 131 | Case "C": 132 | Continue ; ignore the color option 133 | Case "Q": 134 | If !IsInteger(V) || (Integer(V) < 0) || (Integer(V) > 5) 135 | Throw ValueError("Option Q must be an integer between 0 and 5!", -1, V) 136 | NumPut("Char", Integer(V), LOGFONTW, 26) 137 | Case "S": 138 | If !IsNumber(V) || (Number(V) < 1) || (Integer(V) > 255) 139 | Throw ValueError("Option S must be a number between 1 and 255!", -1, V) 140 | NumPut("Int", -Round(Integer(V + 0.5) * LOGPIXELSY / 72), LOGFONTW) 141 | Case "W": 142 | If !IsInteger(V) || (Integer(V) < 1) || (Integer(V) > 1000) 143 | Throw ValueError("Option W must be an integer between 1 and 1000!", -1, V) 144 | NumPut("Int", Integer(V), LOGFONTW, 16) 145 | Default: 146 | Throw ValueError("Invalid font option!", -1, Opt) 147 | } 148 | } 149 | } 150 | } 151 | NumPut("Char", 1, "Char", 4, "Char", 0, LOGFONTW, 23) ; DEFAULT_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS 152 | NumPut("Char", 0, LOGFONTW, 27) ; FF_DONTCARE 153 | If (FntName != "") 154 | StrPut(FntName, LOGFONTW.Ptr + 28, 32) 155 | If !(HFONT := DllCall("CreateFontIndirectW", "Ptr", LOGFONTW, "UPtr")) 156 | Throw OSError() 157 | If This.HFONT 158 | DllCall("DeleteObject", "Ptr", This.HFONT) 159 | This.HFONT := HFONT 160 | } 161 | } 162 | ; ------------------------------------------------------------------------------------------------------------------- 163 | ; SetMargins() - Set or remove the margins used by the tooltip 164 | ; Parameters: 165 | ; L, T, R, B - left, top, right, and bottom margin in pixels. 166 | ; ------------------------------------------------------------------------------------------------------------------- 167 | Static SetMargins(L := 0, T := 0, R := 0, B := 0) { 168 | If ((L + T + R + B) = 0) 169 | This.Margins := 0 170 | Else { 171 | This.Margins := Buffer(16, 0) 172 | NumPut("Int", L, "Int", T, "Int", R, "Int", B, This.Margins) 173 | } 174 | } 175 | ; ------------------------------------------------------------------------------------------------------------------- 176 | ; SetTitle() - Set or remove the title and/or the icon displayed on the tooltip. 177 | ; Parameters: 178 | ; Title - string to be used as title. 179 | ; Icon - icon to be shown in the ToolTip. 180 | ; This can be the number of a predefined icon (1 = info, 2 = warning, 3 = error 181 | ; (add 3 to display large icons on Vista+) or a HICON handle. 182 | ; ------------------------------------------------------------------------------------------------------------------- 183 | Static SetTitle(Title := "", Icon := "") { 184 | Switch { 185 | Case (Title = "") && (Icon != ""): 186 | This.Icon := Icon 187 | This.Title := " " 188 | Case (Title != "") && (Icon = ""): 189 | This.Icon := 0 190 | This.Title := Title 191 | Default: 192 | This.Icon := Icon 193 | This.Title := Title 194 | } 195 | } 196 | ; ------------------------------------------------------------------------------------------------------------------- 197 | ; For internal use only! 198 | ; ------------------------------------------------------------------------------------------------------------------- 199 | Static _WNDPROC_(hWnd, uMsg, wParam, lParam) { 200 | ; WNDPROC -> https://learn.microsoft.com/en-us/windows/win32/api/winuser/nc-winuser-wndproc 201 | Switch uMsg { 202 | Case 0x0411: ; TTM_TRACKACTIVATE - just handle the first message after the control has been created 203 | If This.ToolTips.Has(hWnd) && (This.ToolTips[hWnd] = 0) { 204 | If (This.BkgColor != "") 205 | SendMessage(1043, This.BkgColor, 0, hWnd) ; TTM_SETTIPBKCOLOR 206 | If (This.TxtColor != "") 207 | SendMessage(1044, This.TxtColor, 0, hWnd) ; TTM_SETTIPTEXTCOLOR 208 | If This.HFONT 209 | SendMessage(0x30, This.HFONT, 0, hWnd) ; WM_SETFONT 210 | If (Type(This.Margins) = "Buffer") 211 | SendMessage(1050, 0, This.Margins.Ptr, hWnd) ; TTM_SETMARGIN 212 | If (This.Icon != "") || (This.Title != "") 213 | SendMessage(1057, This.Icon, StrPtr(This.Title), hWnd) ; TTM_SETTITLE 214 | This.ToolTips[hWnd] := 1 215 | } 216 | Case 0x0001: ; WM_CREATE 217 | DllCall("UxTheme.dll\SetWindowTheme", "Ptr", hWnd, "Ptr", 0, "Ptr", StrPtr("")) 218 | This.ToolTips[hWnd] := 0 219 | Case 0x0002: ; WM_DESTROY 220 | If This.ToolTips.Has(hWnd) 221 | This.ToolTips.Delete(hWnd) 222 | } 223 | r:=0 224 | If This.OWP 225 | r:=DllCall(This.OWP, "Ptr", hWnd, "UInt", uMsg, "Ptr", wParam, "Ptr", lParam, "UInt") 226 | Return r 227 | } 228 | ; ------------------------------------------------------------------------------------------------------------------- 229 | Static _EXIT_(*) { 230 | If (ToolTipOptions.OWP != 0) 231 | ToolTipOptions.Reset() 232 | } 233 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | 4 | 5 |

6 | 7 |

Tweak & optimize your Windows System

8 |
9 | 10 | ## Features 11 | 12 | ![](Img/1.png) 13 | 14 | - System optimization 15 | 16 | - Privacy optimization 17 | 18 | - Explorer optimization 19 | 20 | - Optional optimization 21 | 22 | - Startup manager 23 | 24 | ![](Img/StartupManager.png) 25 | 26 | - Host edit 27 | 28 | ![](Img/HostEdit.png) 29 | 30 | - Clear StartMenu 31 | 32 | - There are tooltips describing functions for easier use 33 | 34 | - Save/Load optimization configuration JSON file 35 | 36 | - Self-Capture and Save to Image 37 | 38 | - Multiple Themes support 39 | 40 | - Multilingual support 41 | 42 | ## Compatibility 43 | 44 | - Windows 10 or higher 45 | - Windows Server 2016 or higher 46 | 47 | ## Requirements 48 | 49 | - Administrator privileges 50 | 51 | ## Command Line 52 | 53 | - /User: Swich users 54 | 55 | `WinTune /User=YourUserName` 56 | 57 | - /SaveConfig: Save all optimization configurations to file 58 | 59 | `WinTune /SaveConfig` 60 | 61 | `WinTune /SaveConfig=YourConfig.json` 62 | 63 | `WinTune /SaveConfig="d:\Path\Your Config.json"` 64 | 65 | `WinTune /User=YourUserName /SaveConfig` 66 | 67 | - /LoadConfig: Load optimization configurations file 68 | 69 | `WinTune /LoadConfig=YourConfig.json` 70 | 71 | `WinTune /LoadConfig="d:\Path\Your Config.json"` 72 | 73 | `WinTune /User=YourUserName /LoadConfig=YourConfig.json` 74 | 75 | ## Community 76 | 77 | - [Join discord](https://discord.gg/mk6uwQscrq) 78 | 79 | ## Translations 80 | 81 | - Chinese (Simplified) | Jvcon 82 | - Turkish | mikropsoft 83 | -------------------------------------------------------------------------------- /Sample_config/WindowsPro_VMwareWorkstation.json: -------------------------------------------------------------------------------- 1 | { 2 | "AUOptions":1, 3 | "AutoEndTasks":1, 4 | "ClassicContextMenu":1, 5 | "DiagnosticDataOff":1, 6 | "DisableAADCloudSearch":1, 7 | "DisableAdsOnLockScreen":1, 8 | "DisableAeDebug":1, 9 | "DisableAnimationEffectMaxMin":1, 10 | "DisableAppendCompletion":1, 11 | "DisableAutoDefragIdle":1, 12 | "DisableAutoInstallationApps":1, 13 | "DisableAutoplay":1, 14 | "DisableAutoSuggest":1, 15 | "DisableAutoWindowsUpdates":1, 16 | "DisableBackgroundApps":1, 17 | "DisableBootOptimize":1, 18 | "DisableCrashAutoReboot":1, 19 | "DisableCustomInking":1, 20 | "DisableDeviceSearchHistory":1, 21 | "DisableDiagTrack":1, 22 | "DisabledVBSCodeIntegrity":1, 23 | "DisableErrorReporting":1, 24 | "DisableFrequentFolders":1, 25 | "DisableGameBar":1, 26 | "DisableHibernate":1, 27 | "DisableHybridSleep":1, 28 | "DisableLockScreen":1, 29 | "DisableLowDiskSpaceChecks":1, 30 | "Disablememorypagination":1, 31 | "DisableMenuShowDelay":1, 32 | "DisableMSACloudSearch":1, 33 | "DisableMSDefender":1, 34 | "DisableOfferSuggestions":1, 35 | "DisablePersonalizedAdsStoreApps":1, 36 | "DisablePrefetchParameters":1, 37 | "DisablePrintSpooler":1, 38 | "DisableRecentFiles":1, 39 | "DisableRemoteRegAccess":1, 40 | "DisableScheduledDefrag":1, 41 | "DisableSettingsAppSuggestions":1, 42 | "DisableShortcutText":1, 43 | "DisableSleep":1, 44 | "DisableSyncProviderNotifications":1, 45 | "DisableSystemRestore":1, 46 | "DisableTailoredExperiences":1, 47 | "DisableTipsAndSuggestions":1, 48 | "DisableTurnOffDisplay":1, 49 | "DisableVisualStudioTelemetry":1, 50 | "DisableWCE":1, 51 | "DisableWebSearch":1, 52 | "DisableWindowsFeedback":1, 53 | "DisableWindowsSearch":1, 54 | "EnableDarkMode":1, 55 | "HideMostUsedApps":1, 56 | "HideStartMenuAccountNotifications":1, 57 | "HideStartMenuRecentlyAdded":1, 58 | "HideStartMenuRecentlyOpened":1, 59 | "HideStartMenuRecommendations":1, 60 | "HideWindowsSecurityNoncriticalNotifications":1, 61 | "HideWindowsSecurityNotifications":1, 62 | "IncreaseIconCache":1, 63 | "IoPageLockLimit":1, 64 | "LinkResolveIgnoreLinkInfo":1, 65 | "MouseHoverTime":1, 66 | "NoInternetOpenWith":1, 67 | "NoResolveSearch":1, 68 | "NoResolveTrack":1, 69 | "NumLockonStartup":1, 70 | "OpenFileExplorerThisPC":1, 71 | "OptimizeNetworkTransfer":1, 72 | "Optimizeprocessorperformance":1, 73 | "OptimizeRefreshPolicy":1, 74 | "ShowExtensions":1, 75 | "ShowHidden":1, 76 | "ShowHiddenSystem":1, 77 | "ShowThisPC":1, 78 | "ShutdownAcceleration":1, 79 | "SnippingPrintScreen":1, 80 | "StartMenuLayout":{ 81 | "StartBin":"E27AE14B01FC4D1B9C00810BDE6E51854E5A5F47005BB1498A5C92AF9084F95ED76A61CE8F3CDA01200D00005CF6EE792CDF05E1BA2B6325C41A5F10E7E459FAA111B337AA5218595C3BDC8D317AAE0769ADAB884CBA8F80C54C6D265B46C2CDFCEE6E32348B12BEA7598230B0C26464C9D9C99AE14773EE81485428E603AB0C92098EBF08F90BFCEA33FF98F64768705911AA73B66C2710C53350D6A1F8D48868C3527CBE63C523A3092741568F61AA343C2E1BCA02846DE66A0AA46F4A03DA952739DCE16A0A1D851F2773974F5F0A16A8B37F3942F178D040C48123BC53DFDD9ED01E3542F0BAE6418BB06459220E9963759787BE4D96ED4895F09FE108340261447C8248D7A4BB6D5DB30F9C3282E8ACC2A746684930BBC4F8209D80D28868FA3F2AB8B3BDAD7E6CCB08F1B4A457F0B16824CB5E875BFCDB81602B081D8D6C4EF6F048144D30FBDC730E3744909429946404B95FE489AF0384120362882D413A50E4E4743CD324D2C7B1CA133E059418AE4BA4EA764EBEA360678362D6262C9EB9EDEE642A5D12A65922C1CC47E2DCC5AEAB081858DFA2A173DDC9C420EB6181887175D7D207D5E10309D7C95FE815270E6ACEE99704EFAC110D9DC3A6727FFDE85F97014ABECBD48600C9A207DE37BA5501BE5A96A8CC745DDB10E00997FAE31D0D2E2515897EDB008B3030C77A89FF56BFD785C4F7234DC52A202DBE598679876AC333E68B9E3B8303DD1A2006A0D657ED2D733E2E14CFDDAF06DEB93C87AA35A3B001FA65374A707A6982D3330186A9C9C357A656EA3038EAB2F94F1E5D5F9F2E214E1F823F02BC76A33ACD5C8E63F53298CD2814DE867656C9675FF5DBC1A69C819A77A35B9D12B47051668804CC9A0F7227F30599D9BA89F9AB55B45DB2C3EBF23D68D54AA9A4E4F1E45215AC5B9024B890B8E6C0D5F46A0387E09F0F6E29BC3F4159FD091F1BF1F41F19D8D93A7C8B3C60AFA29BA83E239CAE8610123F214187F1F1766090C426CB3D3BF8096F57AFBE6E7973DF820DE3A3B52458D0B0DB4EFB2D617DB6ADC067A33089A9B9E15A6DB1D40D086C591DE0795237FE87DFCFA539A08BAF1D9E4616C90FA9E3F21D6935C67BDDC4FC33F08B92D22A9F39BEE04F23C73C26E1A687A81A7CDB15B0C0BE8C4514C9239BE79BFF69945D160FC71F15EA80CEE63BDB84D4FE32CF82A028D69ADD7243E2909C0178FF6415A6D49129998E52C3DB0AE6F808CD85D5FE3A84F85EEAA398DC4E6409B60E96A3C33D6ABC6461D32281CE55ADD4993B08B0A78D903D91B60E9793DA0D8CC62E0F8F71B2D61D774E4E8CE7A9775B0832E1E7EE22B07F8EF6BBA264642CA1BF3EE69620E9AC05BD5CCD3C7945BAB1F02D5C0186F29C9798B693D1C996BCC9C10943F09C73B56A64D2EA819F6F6581C330A1E36D491A9E0BB94E2927815453BFD119857771B3C4F041C5FE3BE484D91C272B8E1EA05F7F62DF5DC83E7F8DC602029BF53990D52A7122E3E34C8367DA120213DF11FEC43212C0C8546ACB11D9F4120B94D5E4C75608BD49CA19D9F4DE5006DFB5C293273925C6A1A15D7371DE5997A95586F0427FE799AF3BA83E944EC5D489B6DA6C399CB06AAACA11B3B5FAFB5415F8762C27582B11A7DEA46F2DFEB4DF071B142D9C47AE0AA031AB721FA03F1952EF87BBE9438A2A95A7F198F4DFF765DBEFE0C01D30759ECE96E1C365A9B7D33C4814D76A35F67ACC6B7BF8E43E3DC9C3B66062B129919FEEB35E63C778A51B10E9319C422C4733359435B6972DB4BA0604F107AC3F782BA29D18002BE2837F26E074A9EED0182909826C726812B7407F3138A22886A13256A2B3041494734A6C96636E1057FAE533E5264B8BCC3749376F9DCA257F26CC70D71538696355545964DD28614410746528220504E8F4BF4D92AEC3C4CFD9A8AA5B29D247A5B2AB2271A082B2E5DD2E8DBDF51A2C64D545661A9BE5B3707CBE507DF57D331B2467843ABE723837F8907224576BF52F6E4F5640AB419D88E1729345635154F9A688AF32EA177A43E6EB5C5B7A51FBAA23939B66F6F854D6416DADED2BBF3D2A7E58A3B52243AC5B2E28844246A08EE2AB47ECC06E4B7DC2F212395411FB623381C6E86D1BBBC7D0107935472BC4377A6A142BED025E37786B545040D940AA14F585C3C6FD475FDCCD1ACC9E9BDE7B60B3C12FCDC7A0EEC1816C1B16B88B1C07C13345FE62C3D704C72AA3CDCA88942CD39DF0842B70D6B6BC3214BDD9A3B40F5D167924DEB43E987C1B1F1438F3952F904E64270A12E0FA2D6C7C468F3DA68FF6110C6913F7492DFC806BB432E11C51A6B5E2D1FC901448A8DA54B3B42F6B60801B936107F9E220962F8F20D04370A2831B3D9B42F7007023F9C87DA8D1C7559D81568977B6E9040F867968DF91EF79FD6367D7E54B7AAEE4199431C29F2DFCF3046FACEC6C39608290CB6D48366CB6AA9BF9CBCF1994A61E8E1403D1105B5B16A3758C51CEE915403DB135623F564E3A32E828E7435110B87ED80EAC43F717F57290D9D1E3C79760A57654F822F80F292D3A2A10D2C11BFB19E4665D8BE2840F231D74A0BCD9B6E667696404F54462A9A1ECFB1FBE4E64A50EB4625C801F9A3B2CDA627B078CAD5C1E527CDFF38C1EFE1106CBA813C4B315D2EC0BE6BDE7E2E12638E8F2BEBD25930EF7916C6E11FFDC5A5F280AD0655EAF6E0656C6D5F899A317891EB8FADDA57C171483D28CFE8BCD4376234080D73EA18056F811C8DBD1F7DD7696E58B1FB68E853F13294A92C73AF9BCD16A502D3CD27EE0DC359DF4CE5F08306D672D86A086E3A1260368A1F56B9CAAF4A244AF296FBF4ADE073B6A42BF5F62C30F0DAC8477D122414623E800EA12BF21E0BCE435EC933211029BE58540140D03A5C35B74970DC66D26C0C340297EF9831D079028DD1D2F442B2ED8A914C11BF55381BA8E91CE80CCC27B4C381B69AD64F70A6F733E5C894C4ECAA8CD4938E76CE35773910C39BC0181232E530E4CB4ECCFAC78D594ECE0A1CBE6795E7BC8815AACF6F5C7EA7493C3ED2B55E11F00A2C47168244A9E36E1DCCF86FCDCF2AA03A452E1869D33B253A7FD4BE5A6302883BCD8DC7E377F4C2C4329F8136C6AD06CB7D4F10BDFBA2BA206D8C8634423B0C7F096AE6BFBE7ED6465846568867C85D74415B834789A1CAF4E7DCFDFE0C065125E0498564B8CC0C12562B6674618FC5EF7613170AE9834931E973BA9F7E27C4AADC93148E43C15684DDAA5DEE36EABDDDC4A457B4A854B4ECCCB71FF873E44F0D1016D767A75232A101F9C691E37378D081E4AD76D0EEC1443AD198447CD07A7873946297F1755ACBA2D33F6331A2E9029C225B0B8995E5DE1845865E97D00FF7AAE873C370995F246372410314062DE2CE3BFB1A87D5A45804B5E9F927638812186D8DD66F94E603EDAD7B318DFF270DB342CF1F8257A4F6A391B4E5144BC5B1E6419EF34AE9C6C0BEE591626548BF077F56CAD8C349E4350F1A006872DC3EF948E344EF3D0A5D537E00B8EC775E6DFA43EC55F162FAF9DF2E24E99C5941A0C1D098DEFF4BBC77FE20BEA4528D6BAD2D7CAB7A5E228D2CAB81E4842896BC0D647BEB1B5698DC804F68A8EA96595E6A3BC90A441EC486FB1B09D4C56C46AEE92CE5A0549CDC32759E850C143EE46CC78A448AD58DC5AA20A9CCEF1559DB940DB2DD436A8FF920AC537B334D9B0AE192ACE93EA3FE242EA47DEF97ED989A8CD9F5425BD62C67B63A5FFDFCFF4E73CDF3F1F7768D1DE13C1428134D0D27B21C5E57045CDD8041B4A86070090957EF9F1A4137B326100577406826AEE74C99FBF53469ABCCC2D7180C643D4660F111D72730675A903FC2A3A4AE61002FF139CE562330C1C9256EE5E4EAFDE3218792DCCE9002409C56ABBFDF6BB4A558903730995CDEB53173C1D5F019C10AEF45D0D23A863F3E0E2BAFF81134EF97558032184C258FB077B67DE07381C959476675F2A5A901B0ADF9F03D975E67FBB15F3CD5EC4DFA921F3C860DBF954362BC89D48C929A070F49F37A9BB79A9E43731052D70507F8266B75981917B734B14DB9C25E3BA22BC9D9D591BD25C1956D190DBE6EB5FB7FBEE27F05EFED485706B92FC1018381A712D27DFAED9B6174D59760B4A18DC3BE58E4E5537E8872D57A9A61D4884704F64CE9443221DD6A6AF6E935B0088C602F26EEABF5860A08BB24DEBFBEF695C07B2690C0736DF6063FFB23DDBAF2A1C03902FFEB7809F6ED5DFEB6F67CC13E3FF0A2A0749FACF2B625788FF9060737DC6CAEAFBF80F476F4D1586591179404972853240FD8E0497F97761B7B08CCA395B968DA08DA3D2BF445F768574A72C61CAEBCFA548EAFE40719587F6D76D7BBCF4417EBBEEF6A73505F9E5C5EE23D41F0D202E68A9E10060A18E61E33457DE179FC21FCE2DA9E7254D8B161789BD6425EC1E4E01A11FCE88B7F83F4594AC9D39A2F84A60723713DF34375A5A62DA4D38757555122E66AC676733BC555306844C31E5ED6BD1990255F5B6E0035B2DF1D7A1F1C330BC7114D52904F4A0CC61E7B9E1E49C409C7FA2781C2141AB3BD21F54E34374BA27CB6ADB2690FA314D93119132EB2175734D8933630C560C24DBE044BDA5BBADCD3C4F82C72F88282D4D74A2F078574E199AF6CB52B622475E7E637D70B650FC2557930F10C369CEAFF9EDC2E155FEDBC9A0F5B610ECD1985D973BC9900D0BF9D64E7FBF8644D952F474822F8F533E28FC349D2B36EF542025A9D8C0ADC2A4596E2BFD629448BB24A0E2913F174D2CF5419764BA6E58DEE0BBC1CEE9697875AE6D759F096E082EE388", 82 | "VisiblePlaces":"" 83 | }, 84 | "UninstallOneDrive":1, 85 | "PackageManager":[ 86 | { 87 | "Act":"Uninstall", 88 | "AllUsers":1, 89 | "Deprovision":1, 90 | "FamilyNames":[ 91 | "Microsoft.Copilot_8wekyb3d8bbwe", 92 | "MicrosoftWindows.CrossDevice_cw5n1h2txyewy", 93 | "Microsoft.Windows.DevHome_8wekyb3d8bbwe", 94 | "Microsoft.WindowsFeedbackHub_8wekyb3d8bbwe", 95 | "Microsoft.XboxGamingOverlay_8wekyb3d8bbwe", 96 | "Microsoft.XboxSpeechToTextOverlay_8wekyb3d8bbwe", 97 | "Microsoft.GetHelp_8wekyb3d8bbwe", 98 | "Microsoft.MicrosoftOfficeHub_8wekyb3d8bbwe", 99 | "Microsoft.BingSearch_8wekyb3d8bbwe", 100 | "Clipchamp.Clipchamp_yxz26nhyzhsrt", 101 | "Microsoft.MicrosoftEdge.Stable_8wekyb3d8bbwe", 102 | "Microsoft.BingNews_8wekyb3d8bbwe", 103 | "Microsoft.Windows.Photos_8wekyb3d8bbwe", 104 | "Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe", 105 | "MSTeams_8wekyb3d8bbwe", 106 | "Microsoft.Todos_8wekyb3d8bbwe", 107 | "Microsoft.BingWeather_8wekyb3d8bbwe", 108 | "Microsoft.OutlookForWindows_8wekyb3d8bbwe", 109 | "Microsoft.YourPhone_8wekyb3d8bbwe", 110 | "Microsoft.PowerAutomateDesktop_8wekyb3d8bbwe", 111 | "MicrosoftCorporationII.QuickAssist_8wekyb3d8bbwe", 112 | "Microsoft.MicrosoftSolitaireCollection_8wekyb3d8bbwe", 113 | "Microsoft.WindowsCamera_8wekyb3d8bbwe", 114 | "Microsoft.ZuneMusic_8wekyb3d8bbwe", 115 | "Microsoft.WindowsNotepad_8wekyb3d8bbwe", 116 | "Microsoft.WindowsSoundRecorder_8wekyb3d8bbwe", 117 | "Microsoft.WindowsTerminal_8wekyb3d8bbwe", 118 | "MicrosoftWindows.Client.WebExperience_cw5n1h2txyewy", 119 | "Microsoft.GamingApp_8wekyb3d8bbwe", 120 | "Microsoft.XboxIdentityProvider_8wekyb3d8bbwe", 121 | "Microsoft.Xbox.TCUI_8wekyb3d8bbwe" 122 | ] 123 | } 124 | ] 125 | } -------------------------------------------------------------------------------- /Tools/1.Drag&DropAHKFileHereToRun.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | :: Edit the path here. Just edit "WinTunePath1" 4 | SET WinTunePath1=WinTune.exe 5 | SET WinTunePath2=..\WinTune.exe 6 | SET WinTunePath3=WinTune32.exe 7 | SET WinTunePath4=..\WinTune32.exe 8 | 9 | setlocal enabledelayedexpansion 10 | FOR /l %%n IN (1,1,4) DO ( 11 | IF EXIST !WinTunePath%%n! ( 12 | START !WinTunePath%%n! /script %1 13 | goto :EOF 14 | ) 15 | ) 16 | :DE 17 | ECHO "WinTune.exe" path doesn't exist. 18 | ECHO Just copy "WinTune.exe" or "WinTune32.exe" to the same folder as this file 19 | ECHO or edit the path in bat file. 20 | pause 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /Tools/Debug_Startup.ahk: -------------------------------------------------------------------------------- 1 | #Requires AutoHotkey v2 2 | Keys:=["HKCU\Software\Microsoft\Windows\CurrentVersion\Run", 3 | "HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce", 4 | "HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run", 5 | "HKLM\Software\Microsoft\Windows\CurrentVersion\Run", 6 | "HKLM\Software\Microsoft\Windows\CurrentVersion\RunOnce", 7 | "HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Run", 8 | "HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\RunOnce", 9 | "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run" 10 | ] 11 | CheckError() 12 | CheckError() { 13 | m:="" 14 | Loop Keys.Length { 15 | Loop Reg, Keys[A_Index] { 16 | try { 17 | FindTarget(RegRead(), &rFileAttr) 18 | } catch { 19 | m.=RegRead() "`n" 20 | } 21 | } 22 | } 23 | if m { 24 | FileAppend m, "Startup_Error.txt" 25 | MsgBox 'Error! Please see "Startup_Error.txt"' 26 | } else { 27 | MsgBox "No error!" 28 | } 29 | } 30 | FindTarget(InPath, &rFileAttr) { 31 | If !InPath 32 | Return 33 | StartPos:=1 34 | tmpTarget:="" 35 | while (fpo:=RegexMatch(InPath, '[^" ]+|"([^"]*)"', &m, StartPos)) { 36 | if A_Index!=1 37 | tmpTarget.=' ' 38 | tmpTarget.=m[1]?m[1]:m[] 39 | If InStr(tmpTarget, "%") 40 | tmpTarget:=ExpandEnvironmentStrings(tmpTarget) 41 | If InStr(FileExist(tmpTarget), "D") { 42 | rFileAttr:="D" 43 | Return tmpTarget 44 | } Else If InStr(FileExist(tmpTarget), "A") || InStr(FileExist(tmpTarget), "N") { 45 | SplitPath tmpTarget, &rFileName 46 | rFileAttr:="A" 47 | If SubStr(rFileName, -4)=".exe" 48 | rFileAttr.="E" 49 | Return tmpTarget 50 | } 51 | StartPos := fpo + StrLen(m[]) 52 | } 53 | } 54 | ExpandEnvironmentStrings(str) { 55 | rExpanded:=Buffer(2000) 56 | DllCall("ExpandEnvironmentStrings", "str", str, "ptr", rExpanded, "int", 1999) 57 | return StrGet(rExpanded) 58 | } -------------------------------------------------------------------------------- /Tools/LangConverterTool.ahk: -------------------------------------------------------------------------------- 1 | #Requires AutoHotkey v2 2 | #Include ../Lib/JSON.ahk 3 | #Include ../Inc/LangData.ahk 4 | 5 | A_FileEncoding:="UTF-8-RAW" 6 | g := Gui(,"Language Converter Tool") 7 | g.AddText(, "LangData.ahk path:") 8 | g.AddEdit("readonly w300", "..\Inc\LangData.ahk") 9 | g.AddText(, "Json path:") 10 | g.AddEdit("readonly w300", "..\Lang\") 11 | g.AddButton("h30 w124", "Convert to Json files").OnEvent("Click", Convert_LangJson) 12 | g.AddButton("yp h30 w170", "Convert back LangData.ahk").OnEvent("Click", Convert_LangDataAHK) 13 | g.Show() 14 | 15 | Convert_LangDataAHK(*) { 16 | out:="LangData:= {" 17 | Loop Files, "..\Lang\*.json" { 18 | LangDataText:=FileRead(A_LoopFilePath) 19 | Lang:=JSON.parse(LangDataText,,False) 20 | out.="`n" SubStr(A_LoopFileName, 1, StrLen(A_LoopFileName)-5) ": " DisplayObj(Lang,1) "," 21 | } 22 | out:=RTrim(out,',') 23 | out.="`n}" 24 | tLangDataFile:="..\Inc\LangData.ahk" 25 | try FileMove tLangDataFile, tLangDataFile "." A_Now ".bak", 1 26 | FileAppend out, tLangDataFile 27 | MsgBox "Done!" 28 | } 29 | Convert_LangJson(*) { 30 | LangPath:="..\Lang\" 31 | DirCreate LangPath 32 | For k,v In LangData.OwnProps() { 33 | tFile:=LangPath k ".json" 34 | try FileMove tFile, tFile "." A_Now ".bak", 1 35 | FileAppend DisplayObj(v, 1, True), tFile 36 | } 37 | MsgBox "Done!" 38 | } 39 | 40 | DisplayObj(Obj, ExpandLevel:=0, JsonFormat:=False, Child:=0) { 41 | Quotes:=JsonFormat?'"':'' 42 | NewLine:=(ExpandLevel>Child?'`n':'') 43 | out:="{" 44 | If Obj.HasOwnProp("Name") { 45 | out.=NewLine Quotes 'Name' Quotes ': "' Obj.Name '",' 46 | Obj.DeleteProp("Name") 47 | } 48 | If Obj.HasOwnProp("Translator") { 49 | out.=NewLine Quotes 'Translator' Quotes ': "' Obj.Translator '",' 50 | Obj.DeleteProp("Translator") 51 | } 52 | If Obj.HasOwnProp("Flag") { 53 | out.=NewLine Quotes 'Flag' Quotes ': "' Obj.Flag '",' 54 | Obj.DeleteProp("Flag") 55 | } 56 | For k,v In Obj.OwnProps() { 57 | out.=NewLine Quotes k Quotes ': ' 58 | If IsObject(v) && Child<5 59 | out.=DisplayObj(v, ExpandLevel, JsonFormat, Child+1) 60 | Else 61 | out.='"' ES(v, (JsonFormat?"\":"``")) '"' 62 | out.=',' 63 | } 64 | out:=RTrim(out,',') 65 | Return out.=NewLine '}' 66 | } 67 | ES(S, E:="``") { 68 | S := StrReplace(S, "\", E "\") 69 | S := StrReplace(S, "`t", E "t") 70 | S := StrReplace(S, "`r", E "r") 71 | S := StrReplace(S, "`n", E "n") 72 | S := StrReplace(S, "`b", E "b") 73 | S := StrReplace(S, "`f", E "f") 74 | S := StrReplace(S, "`v", E "v") 75 | S := StrReplace(S, '"', E '"') 76 | Return S 77 | } 78 | -------------------------------------------------------------------------------- /WinTune.ahk: -------------------------------------------------------------------------------- 1 | ;@Ahk2Exe-SetName WinTune 2 | ;@Ahk2Exe-SetCopyright tranht17 3 | ;@Ahk2Exe-SetVersion 2.7.4 4 | ;@Ahk2Exe-SetMainIcon Icon.ico 5 | #Requires AutoHotkey 2.0 6 | #SingleInstance Off 7 | #Warn 8 | 9 | App:={Name: "WinTune", Ver: "2.7.4"} 10 | 11 | SetTitleMatchMode 3 12 | If WinExist(App.Name) { 13 | WinActivate 14 | Return 15 | } 16 | 17 | A_IconTip:= App.Name 18 | tray := A_TrayMenu 19 | tray.delete 20 | tray.Add("Exit", (*) => ExitApp()) 21 | 22 | #include 23 | #include 24 | #include 25 | #include 26 | #Include 27 | #Include 28 | 29 | #Include Inc/Data.ahk 30 | #Include Inc/LangData.ahk 31 | #Include Inc/Base.ahk 32 | #Include Inc/Optimizer.ahk 33 | #Include Inc/CustomFn.ahk 34 | #Include Inc/OptimizeConfig.ahk 35 | 36 | #include 37 | #Include 38 | #Include 39 | 40 | #Include Gui/Base.ahk 41 | #Include Gui/Theme.ahk 42 | #Include Gui/Language.ahk 43 | #Include Gui/User.ahk 44 | #Include Gui/Optimizer.ahk 45 | #Include Gui/HostsEdit.ahk 46 | #Include Gui/StartupManager.ahk 47 | #Include Gui/PackageManager.ahk 48 | #Include Gui/CheckUpdate.ahk 49 | 50 | CheckOS 51 | CheckAdmin 52 | OnError LogError 53 | OnExit ExitFunc 54 | ArgParse 55 | Init 56 | ArgProcess 57 | 58 | OnMessage 0x0111, ON_EN_SETFOCUS 59 | CreateGui 60 | OnMessage 0x0200, WM_MOUSEMOVE 61 | OnMessage 0x0201, WM_LBUTTONDOWN 62 | OnMessage 0x47, WM_WINDOWPOSCHANGED 63 | --------------------------------------------------------------------------------