WinApi OpenProcess error 87

WinApi OpenProcess error 87

本文关键字:error OpenProcess WinApi      更新时间:2023-10-16

我试图使用visual Studio 2012, c++控制台应用程序打开进程,得到87错误:

#include <stdio.h>
#include <tchar.h>
#include <Windows.h>
#define EXTERN_DLL_EXPORT extern "C" __declspec(dllexport)
EXTERN_DLL_EXPORT int setLastObject(LPCWSTR wname) {
    LPCWSTR str = _TEXT("Name of window");
    HWND wnd = FindWindow(NULL,wname);
    LPDWORD cpid = 0;
    DWORD pid = GetWindowThreadProcessId(wnd,cpid);
    HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS,false,pid);
    int err = GetLastError();
    return err;
}

注:我得到了正确的pid

函数GetWindowThreadProcessId返回创建窗口的线程的id。

您需要使用对应的进程id,它在第二个参数中返回。像这样的

EXTERN_DLL_EXPORT int setLastObject(LPCWSTR wname) {
    LPCWSTR str = _TEXT("Name of window");
    HWND wnd = FindWindow(NULL,wname);
    DWORD dwProcessId = 0;
    DWORD dwThreadId = GetWindowThreadProcessId(wnd, &dwProcessId);
    HANDLE proc = OpenProcess(PROCESS_ALL_ACCESS,false,dwProcessId);
    int err = GetLastError();
    return err;
}

此外,您应该真正检查FindWindow是否成功,如果您确实获得了有效的HANDLE,您必须在完成CloseHandle时记住它。

相关文章: