为了账号安全,请及时绑定邮箱和手机立即绑定

你好,OpenProcess()函数返回值为什么返回NULL 急需解决

你好,OpenProcess()函数返回值为什么返回NULL 急需解决

C# C
守着星空守着你 2021-08-04 19:07:08
魔兽3 运行后,运行该段代码,hwnd 值不为 NULL,为什么 handle 值为 NULL?c++ 代码如下:HWND hwnd = FindWindow( NULL, L"Warcraft III");DWORD wtp_id = 0;if( hwnd != NULL ){HANDLE handle = OpenProcess( PROCESS_ALL_ACCESS, false, GetWindowThreadProcessId( hwnd, &wtp_id ) );if( handle != NULL ){//可在这里添加读写内存的代码CloseHandle( handle );}}
查看完整描述

2 回答

?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

If the function succeeds, the return value is an open handle to the specified process.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
就是说如果函数执行成功的话返回的就是一个打开进程的句柄,如果失败了就是NULL,具体错误的原因你可以调用GetLastError查看

查看完整回答
反对 回复 2021-08-09
?
杨魅力

TA贡献1811条经验 获得超6个赞

如果你是用VS2008的话,可能是程序执行权限问题,可以试试这样:

//提升程序的权限
BOOL EnablePrivilege(LPCSTR lpName, BOOL fEnable)
{
HANDLE hObject;
LUID Luid;
TOKEN_PRIVILEGES NewStatus;

if (!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hObject))
return FALSE;

if (LookupPrivilegeValue(NULL, lpName, &Luid))
{
NewStatus.Privileges[0].Luid = Luid;
NewStatus.PrivilegeCount = 1;
NewStatus.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;

AdjustTokenPrivileges(hObject, FALSE, &NewStatus, 0, 0, 0);

CloseHandle(hObject);
return TRUE;
}

return FALSE;
}

OnInitDialog()中调用:
EnablePrivilege(SE_DEBUG_NAME,TRUE); //提升程序的权限



查看完整回答
反对 回复 2021-08-09
  • 2 回答
  • 0 关注
  • 419 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信