DiskDriveIcon.h文件
#ifndef _DISK_DRIVE_ICON_H_
#define _DISK_DRIVE_ICON_H_
#pragma once
class CDiskDriveIcon
{
public:
CDiskDriveIcon();
virtual ~CDiskDriveIcon();
public:
void UpdateDiskDriveIcon(char *drv);
void DeleteDiskDriveIcon(char *drv);
public:
void UpdateIconFile(char *drv);
void DeleteIconFile(char *drv);
};
#endif // !_DISK_DRIVE_ICON_H_
DiskDriveIcon.cpp文件
#include "pch.h"
#include "DiskDriveIcon.h"
CDiskDriveIcon::CDiskDriveIcon()
{
}
CDiskDriveIcon::~CDiskDriveIcon()
{
}
void Single2Double(string& s) {
string::size_type pos = 0;
while ((pos = s.find('\\', pos)) != string::npos) {
s.insert(pos, "\\");
pos = pos + 2;
}
}
void CDiskDriveIcon::UpdateDiskDriveIcon(char *drv)
{
UpdateIconFile(drv);
Sleep(200);
char path[MAX_PATH];
GetCurrentDirectoryA(MAX_PATH, path);
char buffer[200];
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "/s %s\\builder.reg", path);
ShellExecuteA(NULL, "open", "regedit.exe", buffer, NULL, SW_HIDE);
//Sleep(500);
//memset(buffer, 0, sizeof(buffer));
//sprintf_s(buffer, "%s\\builder.reg", path);
//DeleteFileA(buffer);
}
void CDiskDriveIcon::DeleteDiskDriveIcon(char *drv)
{
DeleteIconFile(drv);
Sleep(200);
char path[MAX_PATH];
GetCurrentDirectoryA(MAX_PATH, path);
char buffer[200];
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "/s %s\\delete.reg", path);
ShellExecuteA(NULL, "open", "regedit.exe", buffer, NULL, SW_HIDE);
Sleep(500);
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "%s\\delete.reg", path);
DeleteFileA(buffer);
}
void CDiskDriveIcon::UpdateIconFile(char *drv)
{
char path[MAX_PATH];
GetCurrentDirectoryA(MAX_PATH, path);
FILE* pf = nullptr;
fopen_s(&pf, "builder.reg", "w");
char buffer[150];
DWORD writesize = 0;
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "Windows Registry Editor Version 5.00\n");
fwrite(buffer, strlen(buffer), 1, pf);
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons]\n");
fwrite(buffer, strlen(buffer), 1, pf);
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\%s]\n", drv);
fwrite(buffer, strlen(buffer), 1, pf);
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\%s\\DefaultIcon]\n", drv);
fwrite(buffer, strlen(buffer), 1, pf);
char b1 = '\"';
string::size_type pos = 0;
string str = path;
Single2Double(str);
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "@=%c%s\\\\ViewUI.dll,0%c\n", b1, str.c_str(), b1);
fwrite(buffer, strlen(buffer), 1, pf);
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\%s\\Defaultlabel]\n", drv);
fwrite(buffer, strlen(buffer), 1, pf);
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "@=%cMCC NAS%c\n", b1, b1);
fwrite(buffer, strlen(buffer), 1, pf);
fclose(pf);
}
void CDiskDriveIcon::DeleteIconFile(char *drv)
{
FILE* pf = nullptr;
fopen_s(&pf, "delete.reg", "w");
char buffer[150];
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "Windows Registry Editor Version 5.00\n");
fwrite(buffer, strlen(buffer), 1, pf);
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "[HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons]\n");
fwrite(buffer, strlen(buffer), 1, pf);
memset(buffer, 0, sizeof(buffer));
sprintf_s(buffer, "[-HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons\\%s]\n", drv);
fwrite(buffer, strlen(buffer), 1, pf);
fclose(pf);
}
在Windows中,当应用程序需要对设备进行更改时,系统会弹出提示框来询问用户是否允许。这是为了确保用户的安全和隐私。
如果您想要消除“你要允许此应用对你的设备进行更改吗”的提示框,一般有两种方法:
使用管理员权限运行应用程序:以管理员身份运行应用程序可以绕过该提示框,因为管理员拥有对设备进行更改的权限。您可以尝试右键单击应用程序的可执行文件(例如.exe文件),然后选择“以管理员身份运行”。
修改应用程序的权限:您可以通过修改应用程序的权限,使其具有对设备进行更改的权限,从而避免弹出提示框。具体操作取决于您的应用程序和开发环境,通常涉及修改应用程序的清单文件(如.manifest文件)或者使用Windows API来请求权限。
请注意,修改应用程序的权限可能会对系统安全性造成影响,因此建议谨慎操作,并确保您的应用程序只在必要时才需要对设备进行更改。
试用下面的代码总是失败
HKEY hKey = nullptr;
CString strRegPath = L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\DriveIcons";
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, strRegPath, NULL, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS)
{
TRACE("RegOpenKeyExA fail...............\n");
}
```c++
```
Hi,试试这个
“单击开始,键入更改用户帐户控制设置
将其设置为从不通知,然后单击确定保存更改。”