您的位置:首页 > 其它

注册表添加策略方法及实现,添加桌面右键菜单

2017-12-21 10:02 645 查看
Windows Registry Editor Version 5.00

//////////////////////注册表添加协议方法///////////////////////////
[HKEY_CLASSES_ROOT\destoplancher]
@="destoplancher Protocol"
"URL Protocol"=""

[HKEY_CLASSES_ROOT\destoplancher\DefaultIcon]
@="C:\\Users\\Administrator\\Desktop\\notepad.exe"

[HKEY_CLASSES_ROOT\destoplancher\shell]

[HKEY_CLASSES_ROOT\destoplancher\shell\Open]

[HKEY_CLASSES_ROOT\destoplancher\shell\Open\Command]
@="C:\\Users\\Administrator\\Desktop\\notepad.exe"
//////////////////////注册表添加协议方法///////////////////////////

//////////////////////协议测试 html///////////////////////////
<html>
<meta charset="utf-8">

<body bgcolor="green">
<hr/>
<h4>协议测试</h4>
<a  name="label" href="destoplancher://"> 打开计算机</a>
<hr/>
</body>

</html>
//////////////////////协议测试 html///////////////////////////

//////////////////////C++实现///////////////////////////
#pragma once
#include <windows.h>
#include <iostream>
#include <tchar.h>

// 创建注册表项
BOOL CreateSubkey(HKEY hKey, LPCWSTR lpszSubkey, HKEY& hResult)
{
DWORD dwDisposition = REG_CREATED_NEW_KEY;
if (ERROR_SUCCESS != RegCreateKeyEx(hKey, lpszSubkey, 0, REG_NONE, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS | KEY_WOW64_64KEY, NULL, &hResult, &dwDisposition))
{
return FALSE;
}
return TRUE;
}

// 写入注册表键值对
BOOL WritRegKeyAndValue(HKEY hKey, LPCWSTR lpszKey, LPCWSTR lpszValue, DWORD dwType = REG_SZ)
{
if (ERROR_SUCCESS != RegSetValueEx(hKey, lpszKey, 0, dwType, (BYTE*)lpszValue, sizeof(TCHAR)*(_tcsclen(lpszValue) + 2 * sizeof(TCHAR))))
{
return FALSE;
}
return TRUE;
}

// 写入注册表值
BOOL WritRegValue(HKEY hKey, LPCWSTR lpszValue, DWORD dwType = REG_SZ)
{
if (ERROR_SUCCESS != RegSetValueEx(hKey, NULL, 0, dwType, (BYTE*)lpszValue, sizeof(TCHAR)*(_tcsclen(lpszValue) + 2 * sizeof(TCHAR))))
{
return FALSE;
}
return TRUE;
}

//隐藏启动协议对话框
BOOL HideWarnDlg(LPCWSTR lpProtocolName, LPCWSTR lpszValue, DWORD dwType = REG_DWORD)
{
// DefaultIcon
HKEY hSubKey = NULL;
WCHAR szSubKey[1024] = { 0 };
_stprintf_s(szSubKey, _T("Software\\Microsoft\\Internet Explorer\\ProtocolExecute\\%s"), lpProtocolName);
if (!CreateSubkey(HKEY_CURRENT_USER, szSubKey, hSubKey))
{
throw(_T("DefaultIcon create error\n"));
}
DWORD dwValue = 0;
if (ERROR_SUCCESS != RegSetValueEx(hSubKey, _T("WarnOnOpen"), 0, dwType, (BYTE*)&dwValue, sizeof(dwValue)))
{
return FALSE;
}
return TRUE;
}

// 添加策略
BOOL SetProtocolToKey(LPCWSTR lpProtocolName, LPCWSTR lpExePath, LPCWSTR lpszProPath = NULL)
{
BOOL bSuccess = FALSE;
HKEY hSubKey = NULL;
HKEY hSubKeyDefaultIcon = NULL;
HKEY hSubKeyShell = NULL;
HKEY hSubKeyOpen = NULL;
HKEY hSubKeyCommand = NULL;

try
{
// Protocol
if (!CreateSubkey(HKEY_CLASSES_ROOT, lpProtocolName, hSubKey))
{
throw(_T("CreateSubkey error"));
}
WCHAR chProtoclValue[100] = { 0 };
_stprintf_s(chProtoclValue, _T("%s Protocol"), lpProtocolName);
if (!WritRegValue(hSubKey, chProtoclValue))
{
throw(_T("WritRegValue error!\n"));
}
//Protocol - URL Protocol
if (!WritRegKeyAndValue(hSubKey, _T("URL Protocol"), _T("")))
{
throw(_T("WritRegKeyAndValue error!\n"));
}

// DefaultIcon
WCHAR szSubKey[100] = { 0 };
_stprintf_s(szSubKey, _T("%s\\DefaultIcon"), lpProtocolName);
if (!CreateSubkey(HKEY_CLASSES_ROOT, szSubKey, hSubKeyDefaultIcon))
{
throw(_T("DefaultIcon create error\n"));
}
if (!WritRegValue(hSubKeyDefaultIcon, lpExePath))
{
throw(_T("write DefaultIcon error"));
}

// shell
_stprintf_s(szSubKey, _T("%s\\shell"), lpProtocolName);
if (!CreateSubkey(HKEY_CLASSES_ROOT, szSubKey, hSubKeyShell))
{
throw(_T("shell create error\n"));
}
// Open
_stprintf_s(szSubKey, _T("%s\\shell\\Open"), lpProtocolName, hSubKeyOpen);
if (!CreateSubkey(HKEY_CLASSES_ROOT, szSubKey, hSubKeyOpen))
{
throw(_T("create error"));
}

// Command
_stprintf_s(szSubKey, _T("%s\\shell\\Open\\Command"), lpProtocolName, hSubKeyCommand);
if (!CreateSubkey(HKEY_CLASSES_ROOT, szSubKey, hSubKeyCommand))
{
throw(_T("create error"));
}
else
{
if (!WritRegValue(hSubKeyCommand, lpExePath))
{
throw(_T("write Command error\n"));
}
}

HideWarnDlg(lpProtocolName, L"");
bSuccess = TRUE;

}
catch (TCHAR* pError)
{
}

// 关闭注册表
if (hSubKey)
RegCloseKey(hSubKey);
if (hSubKeyDefaultIcon)
RegCloseKey(hSubKeyDefaultIcon);
if (hSubKeyShell)
RegCloseKey(hSubKeyShell);
if (hSubKeyOpen)
RegCloseKey(hSubKeyOpen);
if (hSubKeyCommand)
RegCloseKey(hSubKeyCommand);

return bSuccess;
}

// 删除注册表项
BOOL DelRegKey(HKEY hRoot, LPCWSTR lpszSubkey)
{
HKEY hResult = NULL;
if (ERROR_SUCCESS == RegOpenKeyEx(hRoot, lpszSubkey, 0, KEY_ALL_ACCESS | KEY_WOW64_64KEY, &hResult))
{
if (ERROR_SUCCESS != RegDeleteKey(hResult, _T("")))
{
}
RegCloseKey(hResult);
return TRUE;
}
return FALSE;
}

// 删除写入的协议注册表项
void DelSubKey(LPCWSTR lpProtocolName)
{
TCHAR szSubKey[MAX_PATH] = { 0 };
_stprintf_s(szSubKey, _T("%s\\shell\\Open\\Command"), lpProtocolName);
DelRegKey(HKEY_CLASSES_ROOT, szSubKey);

_stprintf_s(szSubKey, _T("%s\\shell\\Open"), lpProtocolName);
DelRegKey(HKEY_CLASSES_ROOT, szSubKey);

_stprintf_s(szSubKey, _T("%s\\shell"), lpProtocolName);
DelRegKey(HKEY_CLASSES_ROOT, szSubKey);

_stprintf_s(szSubKey, _T("%s\\DefaultIcon"), lpProtocolName);
DelRegKey(HKEY_CLASSES_ROOT, szSubKey);

_stprintf_s(szSubKey, _T("%s"), lpProtocolName);
DelRegKey(HKEY_CLASSES_ROOT, szSubKey);
}
//////////////////////C++实现///////////////////////////
//////////////////////C++调用///////////////////////////
SetProtocolToKey(_T("desktopicon"), "文件路径");
//////////////////////C++调用///////////////////////////

//////////////////////注册表添加桌面右键菜单及图标方法///////////////////////////
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell]

[HKEY_CLASSES_ROOT\Directory\Background\shell\启动★软件1★]
@=""
"icon"="C:\\Users\\Administrator\\Desktop\\工具条软件Exe\\MyClientIcon.exe"
"Position"="top"

[HKEY_CLASSES_ROOT\Directory\Background\shell\启动★软件1★\command]
@="C:\\Users\\Administrator\\Desktop\\工具条软件Exe\\MyClientIcon.exe"
//////////////////////注册表添加桌面右键菜单及图标方法///////////////////////////
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息