这里首先说一下: 打开注册表,找到HKEY_CLASSES_ROOT\Directory\shell 和 HKEY_CLASSES_ROOT\exefile\shell
当对一个file(文件)右键时,找到的是Directory\shell里面的command
当对一个exe右键时,找到的是exefile\shell里面的command
其他也一样
主要思路: 通过操作注册表(我是对exe右键)在 HKEY_CLASSES_ROOT\exefile\shell 新建一个key,例如QQMusicEx,在里面新建一个key名字固定为command ,设置默认值为exe所在的绝对路径,另外对于图标问题是在QQMusicEx键下面设置一个新数据icon,data里面写exe所在的绝对路径
TCHAR exeFullPath[MAX_PATH]; // MAX_PATH
TCHAR exePath[MAX_PATH];
GetModuleFileName(NULL,exeFullPath,MAX_PATH);
GetModuleFileName(NULL,exePath,MAX_PATH);
strcat(exeFullPath," %1");
HKEY hKey;
HKEY hMusicKey;
HKEY hCmdKey;
LPCTSTR strRegPath = "exefile\\shell";
LPCTSTR strExePath = "QQMusicEx";
if (RegOpenKeyEx(HKEY_CLASSES_ROOT, strRegPath, 0, KEY_ALL_ACCESS, &hKey) == ERROR_SUCCESS)
{
if(RegCreateKey(hKey,strExePath,&hMusicKey) == ERROR_SUCCESS)
{
if(ERROR_SUCCESS != ::RegSetValueEx(hMusicKey,_T("icon"), 0, REG_SZ, (CONST BYTE*)exePath, strlen(exePath)))
{
::RegCloseKey(hKey);
return;
}
if(RegCreateKey(hMusicKey,"Command",&hCmdKey) == ERROR_SUCCESS)
{
if (ERROR_SUCCESS != ::RegSetValueEx(hCmdKey,NULL, 0, REG_SZ, (CONST BYTE*)exeFullPath, strlen(exeFullPath)))
{
//AfxMessageBox(_T("错误"));
::RegCloseKey(hKey);
return;
}
}
}
}
::RegCloseKey(hKey);
例外这里用到了关于注册表的一些函数,相关操作 点击打开链接