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

魔兽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 );
}
}

守着星空守着你
浏览 420回答 2
2回答

斯蒂芬大帝

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查看

杨魅力

如果你是用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); //提升程序的权限
打开App,查看更多内容
随时随地看视频慕课网APP