MuiCache Tools
本帖最後由 gary8349 於 2019-9-18 21:48 編輯【軟體名稱】:MuiCache Tools
【軟體版本】:1.0.0.1
【檔案大小】:604KB
【檔案格式】:exe
【測試環境】:Windows 10 x64 教育版(Win7以下未測試)
【放置空間】:Google
【下載網址】:傳送門
【校驗工具】:Google
檔案 : MuiCache.exe
檔案大小 : 604.5 KB
建立日期 : 2019/09/18
修改日期 : 2019/09/18
CRC32碼 : 5AEEA73A
MD5碼 : 329FEB6DE29D9248859558F3D5B8544D
SHA1碼 : DDB3F47900E846B2413019EF1A84AB3787867042
剛好看到論壇上有人有改MuiCache的需求,
就順手寫了一支小工具雖然不及市面上的軟體直觀方便
但應該也夠用了XD
如果有Bug再請回饋,感謝~
載點內有附上AutoIt3源碼
後來寫得有點亂,傷眼見諒0.0
以下為功能介紹:(以 "文字文件" 做示範)
支援以下三個路徑:
'HKCU\Software\Microsoft\Windows\ShellNoRoam\MUICache'
'HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache'
'HKCU\Software\Classes\Local Settings\MuiCache\*\**\'
本工具可以讓你:
更方便於修改MuiCache項目的對應值(文字)
只要先選擇要修改的項目,
然後將要修改的文字修改好,
按下變更就好囉~
本工具亦支援使用命令行,格式如下(軟體路徑如有空格,請自行補上雙引號)
指令:MuiCache.exe "@C:\WINDOWS\system32\notepad.exe,-469" "TXT文字項目"
說明:軟體名稱 "參數1 >>項目的名稱" "參數2>>要修改成的文字"
工具預覽:
https://imgur.com/cloKa57.jpg
變更示例:
https://imgur.com/HTJfiL5.jpg
源碼
#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 = ["HKLM64", "HKU64", "HKCU64", "HKCR64", "HKCC64"]
Global $fa = 1
Global $RegAims1 = $rootPath & '\Software\Microsoft\Windows\ShellNoRoam\MUICache'
Global $RegAims2 = $rootPath & '\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell\MuiCache'
Global $RegAims3 = $rootPath & '\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 Then
$RunMode = 'Windows'
ElseIf $CmdLine = 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 <> '' And $CmdLine <> Null Then ;;檢查項值是否為空
_regWrite($path,$CmdLine,$CmdLine)
Sleep(50)
If RegRead($path,$CmdLine) = $CmdLine 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)
DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $ai_Handle)
Else
$ai_Return = DllCall("psapi.dll", 'int', 'EmptyWorkingSet', 'long', -1)
EndIf
Return $ai_Return
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 And $CmdLine <> '' And $CmdLine <> 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 And $CmdLine <> '' And $CmdLine <> 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)
Local $val = RegRead($mPath, $str)
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) ;;從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,$newVal) ;;執行項值更改
;;判斷REG值和輸入值是否相同
If RegRead($mPath,$str) = 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
頁:
[1]