天天看點

資料總管 右鍵菜單和檔案關聯 相關系統資料庫操作

 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擴充程式設計完全指南

繼續閱讀