1.右鍵菜單必須
*;Folder;Directory;Drive
[HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers]
@="{FF770C85-53FE-4CCB-B5A9-D4B0511C6B4F}"
[HKEY_CLASSES_ROOT\CLSID\{FF770C85-53FE-4CCB-B5A9-D4B0511C6B4F}\InProcServer32]
@="F:\...\App.dll"
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FF770C85-53FE-4CCB-B5A9-D4B0511C6B4F}\InProcServer32] 同上
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved]
"{FF770C85-53FE-4CCB-B5A9-D4B0511C6B4F}"="app Shell comment"
WOW6432Node 32位
HKEY_LOCAL_MACHINE 可替換為 HKEY_CURRENT_USER
2.關聯檔案必備
[HKEY_CLASSES_ROOT\.ext]
@="RelevantKey"
[HKEY_CLASSES_ROOT\RelevantKey]
[HKEY_CLASSES_ROOT\RelevantKey\DefaultIcon]
@="D:\\..\\app.exe, 0"
[HKEY_CLASSES_ROOT\RelevantKey\shell\open\command ]
||\.\"app path" "%1"
[HKEY_CLASSES_ROOT\RelevantKey\shell]
[HKEY_CLASSES_ROOT\RelevantKey\shell\open]
[HKEY_CLASSES_ROOT\RelevantKey\shell\open\command]
@="\"D:\\...\\app.exe\" \"%1\"" 輕按兩下打開關聯檔案
[HKEY_CLASSES_ROOT\RelevantKey\shellex]
[HKEY_CLASSES_ROOT\RelevantKey\shellex\ContextMenuHandlers]
[HKEY_CLASSES_ROOT\RelevantKey\shellex\ContextMenuHandlers\{FF770C85-53FE-4CCB-B5A9-D4B0511C6B4F}] 為單一檔案類型添加右鍵菜單
[HKEY_CLASSES_ROOT\RelevantKey\shellex\DropHandler]
@="{FF770C85-53FE-4CCB-B5A9-D4B0511C6B4F}" 拖拽
[HKEY_CLASSES_ROOT\CLSID\{FF770C85-53FE-4CCB-B5A9-D4B0511C6B4F}\InProcServer32]
@="F:\...\App.dll"
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FF770C85-53FE-4CCB-B5A9-D4B0511C6B4F}\InProcServer32] 同上
不需要 Approved
WOW6432Node 32位
HKEY_LOCAL_MACHINE 可替換為 HKEY_CURRENT_USER
RelevantKey 為程式自定義
3.其他系統資料庫路徑
程式路徑
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\AppName.exe]
@="D:\\Program Files\\AppDir\\AppName.exe"
"Path"="D:\\Program Files\\AppDir\\"
WOW6432Node 32位
HKEY_LOCAL_MACHINE 可替換為 HKEY_CURRENT_USER
4.系統資料庫映射
HKEY_CURRENT_USER\Software\Classes\ --> HKEY_CLASSES_ROOT\ 目前使用者應用資料
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ -->HKEY_CLASSES_ROOT\ 所有使用者共享資料
[HKEY_CLASSES_ROOT\]優先映射[HKEY_CURRENT_USER\Software\Classes\]
當[HKEY_CURRENT_USER\Software\Classes\]鍵值不存在時會映射[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\]的鍵值
目前使用者程式需要儲存的應用資料(設定資訊)一般儲存在 "HKEY_CURRENT_USER\Software\" 下面
5.QSettings 操作系統資料庫
在64位系統 QSettings::Format屬性
在32位程式
//NativeFormat == Registry32Format
HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{FF770C85-53FE-4CCB-B5A9-D4B0511C6B4F}\InProcServer32
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Classes\CLSID\{FF770C85-53FE-4CCB-B5A9-D4B0511C6B4F}\InProcServer32
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\App Paths\7zFM.exe
在64位 程式
//NativeFormat == Registry64Format
HKEY_CLASSES_ROOT\CLSID\{FF770C85-53FE-4CCB-B5A9-D4B0511C6B4F}\InProcServer32
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{FF770C85-53FE-4CCB-B5A9-D4B0511C6B4F}\InProcServer32
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\7ZipFM.exe\path
右鍵菜單的 *;Folder;Directory;Drive; 不區分32/64位程式
QSettings settingClass(QSettings::Registry64Format, QSettings::UserScope, "Classes","");
經過測試+看源碼得到其等價于
QSettings settingClass0(QSettings::Registry64Format, QSettings::UserScope, "Classes","OrganizationDefaults");
6.
向 HKEY_LOCAL_MACHINE 下寫入資料需要管理者權限
參考:
Windows系統資料庫内容詳解
Qt配置資訊設定(QSettings在不同平台下的使用路徑)
360壓縮、WinRAR和7-Zip 系統資料庫結構
Windows+Shell擴充程式設計完全指南