- 積分
- 4130
- 最後登入
- 1970-1-1
- 閱讀權限
- 255
- 積分
- 4130
- 帖子
- 精華
升級
100%
|
源碼
- #AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w 7
- #cs
- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- | 文件說明 |
- =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Dim ==> 如變數名稱不存在於 Global 中,則設定為 Local 區域範圍
- Local ==> 宣告為 區域變數, 生命週期只有在 Fuction 裡面
- Gobal ==> 宣告為 全域變數, 生命週期從程式開始一直到結束
- Const ==> 常數,使用 Const 時,第一次一定要給右值,因其後便無法再 指定數值 給 Const 變數
- #ce
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- ;;| 編譯程式後的資訊 |
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- #RequireAdmin
- #AutoIt3Wrapper_Icon=C:\Program Files (x86)\AutoIt3\Icons\Kakeru.ico
- #AutoIt3Wrapper_Compression=4
- #AutoIt3Wrapper_UseUpx=y
- #AutoIt3Wrapper_Res_HiDpi = y
- #AutoIt3Wrapper_UseX64=n ;;; x86系統應將=y改為=n。;;將程序編譯為32位,能完美運行於64位系統中
- #AutoIt3Wrapper_Res_Comment=MuiCache Tool
- #AutoIt3Wrapper_Res_Description=MuiCache Tool
- #AutoIt3Wrapper_Res_Fileversion=1.0.0.1
- #AutoIt3Wrapper_Res_LegalCopyright=Copyright © 2019 SHIWASU KAKERU 版權所有。保留一切權利。
- #AutoIt3Wrapper_Res_Language=1028
- #AutoIt3Wrapper_Res_requestedExecutionLevel=highestAvailable
- #cs ____________________________________
- Au3版本:3.3.14.5
- SciTE版本:3.6.6
- 腳本作者:しわす かける(SHIWASU KAKER)
- 腳本功能:MuiCache 修改
- 參考代碼:
- #ce _______________腳本開始_________________
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- ;;| 載入Fuction |
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- #include <GUIConstantsEx.au3> ;;基本
- #include <Misc.au3> ;;防止重複執行
- #include <StaticConstants.au3> ;;控件
- #include <ComboConstants.au3> ;;Combo
- #include <WindowsConstants.au3> ;;Combo
- #include <EditConstants.au3> ;;Input
- #include <ButtonConstants.au3> ;;按鈕樣式
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- ;;| 防止重複執行 |
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- _Singleton(@ScriptName)
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- ;;| 判斷是否以管理員身份執行 |
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Local $ADMIN
- If IsAdmin() Then
- $ADMIN="當前管理員權限運行"
- Else
- $ADMIN="當前非管理員權限運行"
- MsgBox(262144,'',$ADMIN)
- EndIf
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- ;;| 宣告變數 |
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Global $GUIWidth = 800 ;;介面寬
- Global $GUILength = 300 ;;介面高
- Global $fontsize=13, $font_xing=300, $font_var=Default, $font_name='Microsoft JhengHei', $font_quality=5 ;;全局字體及大小(備用字體:'Comic Sans Ms'、'YaHei Consolas Hybrid')
- Global Const $Title = 'MuiCache Tool' ;;軟體名稱
- Global Const $ver = '1.0.0.1' ;;版本號碼
- Global $rootPath[5] = ["HKLM64", "HKU64", "HKCU64", "HKCR64", "HKCC64"]
- Global $fa = 1
- Global $RegAims1 = $rootPath[2] & '\Software\Microsoft\Windows\ShellNoRoam\MUICache'
- Global $RegAims2 = $rootPath[2] & '\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache'
- Global $RegAims3 = $rootPath[2] & '\Software\Classes\Local Settings\MuiCache'
- Global $Valbtn = 'N'
- Global $path
- Global Const $help = '請使用正確的 參數1 和 參數2 喔~ ヽ(*´∀`)ノ゚' & @CRLF & @CRLF & _
- '格式如下:' & @CRLF & _
- 'MuiCache.exe "@C:\WINDOWS\system32\notepad.exe,-469" "TXT文字項目"' & @CRLF & @CRLF & _
- '指令說明:本軟體名稱 "註冊表項目" "說明文字(值)"'
- Local $enVal, $val, $naPath, $na
- Global $RunMode
- Local $a,$b,$c,$d,$e,$f
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- ;;| 模式判斷 |
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- If $CmdLine[0] = 0 Then
- $RunMode = 'Windows'
- ElseIf $CmdLine[0] = 2 Then
- $RunMode = 'Dos'
- Else
- MsgBox(262144+16,'錯誤',$help,10)
- Exit
- EndIf
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- ;;| Dos模式 |
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- If $RunMode = 'Dos' Then
- ;;遍歷HKCU64\Software\Classes\Local Settings\MuiCache\
- readReg2($RegAims1, $fa)
- readReg2($RegAims2, $fa)
- readReg($RegAims3, $fa)
- ;;判斷是否REG含有要變更的值之項目
- If $Valbtn = 'Y' And $CmdLine[2] <> '' And $CmdLine[2] <> Null Then ;;檢查項值是否為空
- _regWrite($path,$CmdLine[1],$CmdLine[2])
- Sleep(50)
- If RegRead($path,$CmdLine[1]) = $CmdLine[2] Then ;;檢查是否修改成功
- ;;ConsoleWrite('修改完成' & @CRLF)
- MsgBox(262144+64,'完成','已成功執行變更。',3)
- Else
- MsgBox(262144+48,'錯誤','無法變更項目值,請檢查是否有執行權限。',3)
- EndIf
- ElseIf $Valbtn = 'N' Then
- ;;ConsoleWrite('找不到項目' & @CRLF)
- MsgBox(262144+48,'錯誤','找不到項目',3)
- Else
- ;;ConsoleWrite('例外狀況' & @CRLF)
- MsgBox(262144+48,'錯誤','例外狀況',3)
- EndIf
- Exit
- EndIf
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- ;;| 主窗體 |
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Opt("GUIOnEventMode",1);;使用事件模式
- Global $Form1 = GUICreate($Title & ' v' & $ver,$GUIWidth,$GUILength,-1,-1)
- GUISetFont($fontsize,$font_xing,$font_var,$font_name,$Form1,$font_quality) ;;全局字型
- GUISetBkColor(0xffe6ea) ; 將變更背景色彩
- GUISetOnEvent($GUI_EVENT_CLOSE, "AForm1Close")
- GUICtrlCreateLabel('MuiCache 路徑:',10,10,180,25)
- GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT);;控件透明
- GUICtrlSetFont(-1,$fontsize,700)
- Global $MuiCachePath = GUICtrlCreateInput('',10,40,780,30,$ES_READONLY)
- GUICtrlSetFont(-1,$fontsize-3)
- GUICtrlCreateLabel('MuiCache 項目:',10,80,180,25)
- GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT);;控件透明
- GUICtrlSetFont(-1,$fontsize,700)
- Global $MuiCacheItem = GUICtrlCreateCombo('',10,110,780,150,BitOR($CBS_DROPDOWN,$WS_VSCROLL,$CBS_NOINTEGRALHEIGHT,$CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL))
- GUICtrlSetData($MuiCacheItem,'請選擇項目','請選擇項目')
- GUICtrlSetFont(-1,$fontsize-4)
- GUICtrlSetOnEvent(-1, "_combo")
- #CS 樣式說明:
- ($CBS_DROPDOWN,$WS_VSCROLL,$CBS_NOINTEGRALHEIGHT,$CBS_DROPDOWNLIST,$CBS_AUTOHSCROLL)
- 1.默认只显示编辑控件. 用户需点击编辑控件下拉箭头显示列表框.
- 2.窗口带有垂直滚动条.
- 3.创建组合框控件的应用程序确定组合框尺寸. 通常 Windows CE(掌上型电脑的操作系统) 的组合框, 部份项目不能显示.
- 4.在列表框框中显示当前选择的静态文本字段.
- 5.在编辑控件行右边结束的位置输入字符时自动卷动文本. 如果没有设置这个样式, 则只能输入适合编辑控件矩形边界的有限文本.
- #CE
- GUICtrlCreateLabel('MuiCache 項值:',10,155,180,25)
- GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT);;控件透明
- GUICtrlSetFont(-1,$fontsize,700)
- Global $MuiCacheVal = GUICtrlCreateInput('',10,185,780,30)
- GUICtrlSetFont(-1,$fontsize-3)
- GUICtrlSetState(-1,$GUI_FOCUS) ;;預設光標所在位置
- ;;GUICtrlSetColor(-1,0xb50000)
- GUICtrlSetBkColor(-1,0xfff8e6)
- Global $runBtn = GUICtrlCreateButton('變更',($GUIWidth/2)-(90/2),240,90,35,$BS_DEFPUSHBUTTON)
- GUICtrlSetOnEvent(-1, "_apply")
- GUICtrlCreateLabel('Power By MicroDuo',$GUIWidth-210,7,200,25,$SS_CENTER)
- GUICtrlSetOnEvent(-1, "_OpenSite1")
- GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT);;控件透明
- GUICtrlSetFont(-1,$fontsize-1,700,2,$font_name)
- GUICtrlSetColor(-1,0xf695a6)
- GuiCtrlSetCursor(-1, 0)
- GUICtrlCreateLabel('命令行用法',10,$GUILength-25-5,100,25)
- GUICtrlSetOnEvent(-1, "_helper")
- GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT);;控件透明
- GUICtrlSetFont(-1,$fontsize-4,$font_var,4,$font_name)
- GUICtrlSetColor(-1,0xCB0DF7)
- GuiCtrlSetCursor(-1, 0)
- GUISetState(@SW_SHOW)
- readReg2($RegAims1, $fa)
- readReg2($RegAims2, $fa)
- readReg($RegAims3, $fa)
- While 1
- Sleep(50)
- _ReduceMemory(@AutoItPID) ;;記憶體優化
- WEnd
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- ;;| 基本函數 |
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Func AForm1Close() ;;關閉本程序
- Exit
- EndFunc
- Func _ReduceMemory($i_PID = -1) ;;整理記憶體
- #CS ------ Function 來(修改)源 -------------------------
- 作者:eaglelin(綠色風's Blog)
- 網址:http://www.jianyiit.com/post-277.html
- #CE -------------------------------------------------------------------
- Local $ai_Return
- If $i_PID <> -1 Then
- Local $ai_Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1f0fff, 'int', False, 'int', $i_PID)
- $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', $ai_Handle[0])
- DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle[0])
- Else
- $ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
- EndIf
- Return $ai_Return[0]
- EndFunc ;==>_ReduceMemory
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- ;;| 核心函數 |
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Func readReg($faPath, $step) ;;遍歷註冊表項,遍歷子鍵
- #CS ------ Function 來(修改)源 -------------------------
- 作者:vigiles
- 網址:https://autoit8.com/forum.php?mod=redirect&goto=findpost&ptid=43706&pid=569929&fromuid=7662477
- #CE -------------------------------------------------------------------
-
- While 1
- ;獲取子鍵(父鍵,索引)
- $naPath = RegEnumKey($faPath, $step)
- If Not @error Then
- ;----------------------遍歷本鍵的項--------------------
- $na = 1
- While 1
- ;;Sleep(50)
- ;獲取項(鍵,索引)
- $enVal = RegEnumVal($faPath & "\" & $naPath, $na)
- If @error Then ExitLoop
- ;讀取項的值(鍵,項)
- $val = RegRead($faPath & "\" & $naPath, $enVal)
- If $RunMode = 'Dos' Then
- ;;假如項目有與參數1相符
- If $enVal = $CmdLine[1] And $CmdLine[2] <> '' And $CmdLine[2] <> Null Then
- ;;開關打開
- $Valbtn = 'Y'
- ;;紀錄項目位置
- $path = $faPath & "\" & $naPath
- EndIf
- ElseIf $RunMode = 'Windows' Then
- ;;GUICtrlSetData($MuiCachePath,$faPath & "\" & $naPath)
- GUICtrlSetData($MuiCacheItem,$enVal & ' -- ' & $val,'請選擇項目')
- EndIf
- $na = $na + 1
- WEnd
- ;----------------------遍歷下一級 鍵---------------------
- readReg($faPath & "\" & $naPath, 1)
- Else
- ExitLoop ;如果獲取結束,退出
- EndIf
- $step = $step + 1
- WEnd
- EndFunc ;==>readReg
- Func readReg2($faPath, $step) ;;遍歷註冊表項,遍歷子鍵
- #CS ------ Function 來(修改)源 -------------------------
- 作者:vigiles
- 網址:https://autoit8.com/forum.php?mod=redirect&goto=findpost&ptid=43706&pid=569929&fromuid=7662477
- #CE -------------------------------------------------------------------
-
- While 1
- If Not @error Then
- ;----------------------遍歷本鍵的項--------------------
- $na = 1
- While 1
- ;;Sleep(50)
- ;獲取項(鍵,索引)
- $enVal = RegEnumVal($faPath, $na)
- If @error Then ExitLoop
- ;讀取項的值(鍵,項)
- $val = RegRead($faPath, $enVal)
- If $RunMode = 'Dos' Then
- ;;假如項目有與參數1相符
- If $enVal = $CmdLine[1] And $CmdLine[2] <> '' And $CmdLine[2] <> Null Then
- ;;開關打開
- $Valbtn = 'Y'
- ;;紀錄項目位置
- $path = $faPath & "\" & $naPath
- EndIf
- ElseIf $RunMode = 'Windows' Then
- ;;GUICtrlSetData($MuiCachePath,$faPath & "\" & $naPath)
- GUICtrlSetData($MuiCacheItem,$enVal & ' -- ' & $val,'請選擇項目')
- EndIf
- $na = $na + 1
- WEnd
- ;----------------------遍歷下一級 鍵---------------------
- If $faPath = $RegAims3 Then readReg($faPath & "\" & $naPath, 1)
- Else
- ExitLoop ;如果獲取結束,退出
- EndIf
- $step = $step + 1
- WEnd
- EndFunc ;==>readReg
- Func _regWrite($regpath,$regString,$regValue) ;;修改註冊表
- RegWrite($regpath,$regString,'REG_SZ',$regValue)
- EndFunc
- Func _FromComboToPath($item)
- $a = RegEnumKey($RegAims3,1)
- $b = RegEnumKey($RegAims3 & '\' & $a,1)
- $c = $RegAims3 & '\' & $a & '\' & $b
- $d = RegRead($c,$item)
- If @error = 0 Then Return $c
- $e = RegRead($RegAims1,$item)
- If @error = 0 Then Return $RegAims1
- $f = RegRead($RegAims2,$item)
- If @error = 0 Then Return $RegAims2
- Return '查無路徑'
- EndFunc
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- ;;| 其他函數 |
- ;;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
- Func _OpenSite($siteUrl) ;;修改註冊表
- Run(@ComSpec & " /c " & 'start ' & $siteUrl, "", @SW_HIDE)
- EndFunc
- Func _OpenSite1() ;;修改註冊表
- Local $url = 'https://www.microduo.tw/'
- _OpenSite($url)
- EndFunc
- Func _combo() ;;依選擇導入值
- Local $sStr = GUICtrlRead($MuiCacheItem)
- Local $str = StringSplit($sStr,' -- ',1)
- Local $mPath = _FromComboToPath($str[1])
- Local $val = RegRead($mPath, $str[1])
- If $sStr <> '請選擇項目' Then
- GUICtrlSetData($MuiCachePath,$mPath)
- GUICtrlSetData($MuiCacheVal,$val)
- GUICtrlSetTip($MuiCacheItem,$val,'',0,0)
- EndIf
- Return
- EndFunc
- Func _apply() ;;執行修改
- If GUICtrlRead($MuiCacheItem) = '請選擇項目' Then Return
- If GUICtrlRead($MuiCacheVal) = '' Or GUICtrlRead($MuiCacheVal) = Null Then Return
- GUICtrlSetState($runBtn,$GUI_DISABLE)
- GUICtrlSetState($MuiCacheVal,$GUI_DISABLE)
- GUICtrlSetState($MuiCacheItem,$GUI_DISABLE)
- If MsgBox(262144+36, "", "確定要值行變更嗎?") <> 6 Then
- GUICtrlSetState($runBtn,@SW_ENABLE)
- GUICtrlSetState($MuiCacheVal,@SW_ENABLE)
- GUICtrlSetState($MuiCacheItem,@SW_ENABLE)
- Return
- EndIf
- Local $mPath = GUICtrlRead($MuiCachePath) ;;讀取MuiCache路徑
- Local $sStr = GUICtrlRead($MuiCacheItem) ;;讀取Combo
- Local $str = StringSplit($sStr,' -- ',1) ;;拆分Combo文字
- Local $sVal = RegRead($mPath,$str[1]) ;;從REG讀取原始項目值
- Local $newVal = GUICtrlRead($MuiCacheVal) ;;輸入的項目值
- If $sVal = $newVal Then ;;如果沒有輸入新的值,和舊值一樣則不更改
- MsgBox(262144+48,'提示','舊值與新值相同,將不進行變更。',5)
- GUICtrlSetState($runBtn,@SW_ENABLE)
- GUICtrlSetState($MuiCacheVal,@SW_ENABLE)
- GUICtrlSetState($MuiCacheItem,@SW_ENABLE)
- Return
- Else
- _regWrite($mPath,$str[1],$newVal) ;;執行項值更改
- ;;判斷REG值和輸入值是否相同
- If RegRead($mPath,$str[1]) = GUICtrlRead($MuiCacheVal) Then ;;修改成功
- GUICtrlSetData($MuiCacheItem,'')
- GUICtrlSetData($MuiCacheItem,'請選擇項目','請選擇項目')
- readReg2($RegAims1, $fa)
- readReg2($RegAims2, $fa)
- readReg($RegAims3, $fa)
- GUICtrlSetData($MuiCacheVal,'')
- GUICtrlSetData($MuiCachePath,'')
- MsgBox(262144+64,'完成','已成功執行變更。',5)
- GUICtrlSetState($runBtn,@SW_ENABLE)
- GUICtrlSetState($MuiCacheVal,@SW_ENABLE)
- GUICtrlSetState($MuiCacheItem,@SW_ENABLE)
- Return
- Else ;;失敗
- MsgBox(262144+16,'錯誤','無法變更項目值,請檢查是否有執行權限。',5)
- GUICtrlSetState($runBtn,@SW_ENABLE)
- GUICtrlSetState($MuiCacheVal,@SW_ENABLE)
- GUICtrlSetState($MuiCacheItem,@SW_ENABLE)
- Return
- EndIf
- EndIf
- EndFunc
- Func _helper() ;;執行修改
- MsgBox(262144+64,'命令行用法',$help)
- EndFunc
複製代碼 |
|