起因:我用QT为某款游戏写了外挂,其中需要用已逆向修改的
文件替换掉游戏源文件。但是UAC设置会导致QFile很多功能无法正常使用。
解决:首先判断UAC是否开启,然后提供两种解决方式
1.联系客服:弹出客服的QQ,然后进行远程协助。这种方式适合电脑小白。
2.提示处理:弹出UAC设置
对话框,提示玩家操作。
关键代码如下:
- void Widget::CloseUAC()
- {
- bool isuac = false;
- HKEY hkey = NULL;
- DWORD EnableLUA=0;
- DWORD type = REG_DWORD;
- DWORD size = sizeof(DWORD);
- //读取系统信息
- OSVERSIONINFO osinfo={ sizeof(osinfo) };
- if(GetVersionEx(&osinfo));
- if(osinfo.dwMajorVersion>5)
- if(RegOpenKeyEx(
- HKEY_LOCAL_MACHINE,
- L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System\\",
- 0,KEY_READ,
- &hkey)==ERROR_SUCCESS&&
- RegQueryValueEx(hkey,L"EnableLUA",NULL,&type,(BYTE*)&EnableLUA,&size)==ERROR_SUCCESS
- )isuac=(EnableLUA==1)?true:false;
- RegCloseKey(hkey);
- if(!isuac)return;
- //弹出UAC设置窗口
- ShellExecute(NULL,L"open",L"C:\\windows\\system32\\useraccountcontrolsettings.exe",NULL, NULL,SW_SHOWNORMAL);
- //弹出UAC错误窗口
- QMessageBox box;
- box.setIcon(QMessageBox::Critical);
- box.setWindowTitle("请求更改系统UAC设置");
- box.setText("<FONT size=4>"
- "<div><b>解决方式·一(推荐)</b></div>"
- "<div>点击此错误框的“确认”按钮,将弹出客服QQ</div>"
- "<div>添加为QQ好友,客服将远程协助完成操作</div>"
- "<div><b>解决方式·二</b></div>"
- "<div>目前已弹出名为“用户帐户控制设置”的窗口</div>"
- "<div>请将此窗口左侧的拉条拖到最下,并点击确定</div>"
- "<div>完成后会提示要求重启电脑,并允许,即可解决</div>"
- "<div>选择 <b>确定</b> :结束程序,并 QQ 联系客服</div>"
- "<div>选择 <b>取消</b> :结束程序</div>"
- "</FONT>");
- box.setStandardButtons(QMessageBox::Ok|QMessageBox::Cancel);
- box.setDetailedText(
- " UAC(User Account Control:用户帐户控制)是微软为了提高系统安全性而在Vista中开始引入的新技术。\n"
- " 它在开启的情况下,经常会弹出“您想允许XXX对此计算机进行更改吗?”的询问窗口。\n"
- " 此功能有效地遏制了病毒部分功能的实现,但也殃及了游戏辅助软件部分功能的实现。\n");
- switch(box.exec())
- {
- case QMessageBox::Ok:QDesktopServices::openUrl(QUrl("http://wpa.qq.com/msgrd?V=1&Uin=123456789&Site=ioshenmue&Menu=yes"));break;
- }
- exit(0);
- }
下载:
UAC.rar (3 K) 下载次数:61