读书人

【高手】c++ Windows 注册表编程-之-自

发布时间: 2012-05-05 17:21:10 作者: rapoo

【高手】c++ Windows 注册表编程--之--自定义右键菜单(外壳拓展)
问题如下:
1)手动添加系统右键菜单,写入HKEY_CLASSES_ROOT/*/shell/command。 command里面假设是"c:\\windows\\notepad.exe %1"
------------------->能正确响应
2)用RegCreateKeyEx和RegSetValueEx完成上面的工作(写入值完全一样),写入成功
-------------------》显示有右键,但是没有响应,报没有程序关联警告
具体:
HKEY hresult;
DWORD dwPos;

LPCTSTR dataset1= _T("*\\shell\\txt...");

//第一层,命令项
long value = RegCreateKeyEx(HKEY_CLASSES_ROOT,dataset1,0,NULL,REG_OPTION_NON_VOLATILE,
KEY_CREATE_SUB_KEY|KEY_ALL_ACCESS,NULL,&hresult,&dwPos);
//value=RegSetValueEx(hresult,NULL,0,REG_SZ,(const BYTE*)str1,(_tcslen(str1) + 1) * sizeof(TCHAR));

//创建“command”子键
LPCTSTR dataset2= _T("*\\shell\\txt...\\command ");

value = RegCreateKeyEx(HKEY_CLASSES_ROOT,dataset2,0,NULL,REG_OPTION_NON_VOLATILE,
KEY_CREATE_SUB_KEY|KEY_ALL_ACCESS,NULL,&hresult,&dwPos);

//将该子键的“默认”数据项的数据设置为用户应用程序的路径
LPCTSTR str2=_T("c:\\windows\\notepad.exe %1");

value=RegSetValueEx(hresult,NULL,0,REG_SZ,(const BYTE*)str2,(_tcslen(str2) + 1) * sizeof(TCHAR));

::RegCloseKey(hresult);

[解决办法]
_T("*\\shellex\\ContextMenuHandlers")

读书人网 >C++

热点推荐