gpt4 book ai didi

c++ - WinApi OpenProcess 错误 87

转载 作者:行者123 更新时间:2023-11-28 07:36:19 29 4
gpt4 key购买 nike

我正在尝试使用 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 当你完成它时。

关于c++ - WinApi OpenProcess 错误 87,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16714372/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com