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扩展编程完全指南