添加程序图标到我的电脑

typedef struct
{
	HKEY  hRootKey;
	PCWSTR pszSubKey;
	PCWSTR pszClassID;
	PCWSTR pszValueName;
	BYTE *pszData;
	DWORD dwType;
} REGSTRUCT;
#define SPACE_CLISD L"{1424D46B-E681-4BCB-85F9-1A842E8A943B}"
std::wstring strExe = L"C:\\Users\\test\\AppData\\Local\\test\\test.exe";
std::wstring strName = L"test";
std::wstring strInfoTip = L"双击打开test";
std::wstring strCommand = L"rundll32.exe \"c:\test\testdel.dll\" DllUnregisterServer";

REGSTRUCT rgRegEntries[] =
{
	HKEY_CLASSES_ROOT,   L"CLSID\\%s", SPACE_CLISD, NULL,  (LPBYTE)strName.c_str(),       REG_SZ,
	HKEY_CLASSES_ROOT,   L"CLSID\\%s", SPACE_CLISD, L"InfoTip", (LPBYTE)strInfoTip.c_str(),   REG_SZ,
	HKEY_CLASSES_ROOT,   L"CLSID\\%s", SPACE_CLISD, L"LocalizedString", (LPBYTE)strName.c_str(),        REG_SZ,
	HKEY_CLASSES_ROOT,   L"CLSID\\%s", SPACE_CLISD, L"System.ItemAuthors",  (LPBYTE)strInfoTip.c_str(),   REG_SZ,
	HKEY_CLASSES_ROOT,   L"CLSID\\%s", SPACE_CLISD, L"TileInfo", (LPBYTE)L"prop:System.ItemAuthors",   REG_SZ,
	HKEY_CLASSES_ROOT,   L"CLSID\\%s\\DefaultIcon",  SPACE_CLISD, NULL,(LPBYTE)strExe.c_str(),REG_SZ,
	HKEY_CLASSES_ROOT,   L"CLSID\\%s\\Shell\\Open\\Command", SPACE_CLISD, NULL,(LPBYTE)strExe.c_str(),REG_SZ,
	HKEY_CLASSES_ROOT,   L"CLSID\\%s\\Shell\\Delete",SPACE_CLISD, NULL,(LPBYTE)L"删除", REG_SZ,
	HKEY_CLASSES_ROOT,   L"CLSID\\%s\\Shell\\Delete\\Command",   SPACE_CLISD, NULL, (LPBYTE)strCommand.c_str(),  REG_SZ,
	HKEY_CURRENT_USER,   L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\MyComputer\\NameSpace\\%s",  SPACE_CLISD, NULL,(LPBYTE)strName.c_str(),REG_SZ
};


void RegNameSpace()
{
	WCHAR szSubKey[MAX_PATH];
	WCHAR szData[MAX_PATH];
	HKEY hKey = NULL;
	HRESULT hr = S_OK;

	for (int i = 0; SUCCEEDED(hr) && (i < ARRAYSIZE(rgRegEntries)); i++)
	{
		// Create the sub key string.
		hr = StringCchPrintf(szSubKey, ARRAYSIZE(szSubKey), rgRegEntries[i].pszSubKey, rgRegEntries[i].pszClassID);
		if (SUCCEEDED(hr))
		{
			long lResult = RegCreateKeyEx(rgRegEntries[i].hRootKey, szSubKey, 0, NULL,
				REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hKey, NULL);
			if (ERROR_SUCCESS == lResult)
			{
				// If this is a string entry, create the string.
				if (REG_SZ == rgRegEntries[i].dwType)
				{
					hr = StringCchPrintf(szData, ARRAYSIZE(szData), (LPWSTR)rgRegEntries[i].pszData, strExe.c_str());
					if (SUCCEEDED(hr))
					{
						lResult = RegSetValueEx(hKey,
							rgRegEntries[i].pszValueName,
							0,
							rgRegEntries[i].dwType,
							(LPBYTE)szData,
							(lstrlen(szData) + 1) * sizeof(WCHAR));
					}
				}
				else if (REG_DWORD == rgRegEntries[i].dwType)
				{
					lResult = RegSetValueEx(hKey,
						rgRegEntries[i].pszValueName,
						0, rgRegEntries[i].dwType,
						rgRegEntries[i].pszData,
						sizeof(DWORD));
				}

				RegCloseKey(hKey);
			}

		}
	}
}

参考文章:windows在explorer中添加虚拟文件夹(Virtual Folder)_explorerdataprovider无法创建虚拟目录-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值