C++作为HWND处理?

C++作为HWND处理?,c++,api,postmessage,findwindow,C++,Api,Postmessage,Findwindow,我想知道是否可以将句柄转换为窗口HWND。我需要使用FindWindow方法调用PostMessage函数 我目前必须寻找新的来源 HANDLE mainProcess; BOOL APIENTRY ATTACH_PROCESS(int ProcessID) { mainProcess = OpenProcess(PROCESS_ALL_ACCESS, true, ProcessID); return TRUE; } BOOL APIENTRY SEND_INPUT(/*NO

我想知道是否可以将句柄转换为窗口HWND。我需要使用FindWindow方法调用PostMessage函数

我目前必须寻找新的来源

HANDLE mainProcess;
BOOL APIENTRY ATTACH_PROCESS(int ProcessID)
{

    mainProcess = OpenProcess(PROCESS_ALL_ACCESS, true, ProcessID);

    return TRUE;
}
BOOL APIENTRY SEND_INPUT(/*NOT USED FOR THIS SAMPLE*/ const char* String, bool Keydown)
{

    int ToDo = WM_KEYUP;
    if (Keydown)
        ToDo = WM_KEYDOWN;
    return PostMessage((HWND)mainProcess, ToDo, VK_TAB, NULL); 
}

不可以。一个进程可以创建多个窗口。由于不存在1对1映射,这样的函数没有意义


另一方面,当然可以使用一个函数返回一个进程创建的窗口列表。

否。一个进程可以创建多个窗口。由于不存在1对1映射,这样的函数没有意义


另一方面,当然可以使用一个函数返回由进程创建的窗口列表。

使用mainProcess句柄调用GetProcessId以获取ProcessID

调用枚举窗口

对于每个窗口,调用GetWindowThreadProcessId以获取与该窗口关联的进程的ProcessId

比较ProcessID,如果它们匹配-您已经找到了所需的HWND


这是一项有点昂贵的任务,因此最好先找到您想要的hwnd并存储它。

使用mainProcess句柄调用GetProcessId以获取ProcessID

调用枚举窗口

对于每个窗口,调用GetWindowThreadProcessId以获取与该窗口关联的进程的ProcessId

比较ProcessID,如果它们匹配-您已经找到了所需的HWND


这是一项成本有点高的任务,因此最好先找到所需的hwnd并将其存储。

否。对于进程句柄和窗口句柄,有两种不同的数据类型HANDLE和hwnd,这是有原因的。更不用说一个进程可以有多个窗口,所以肯定没有一对一的对应关系。你到底想做什么?我想做一个简单易用的API来制作魔兽世界机器人。我试图查找的窗口HWND是主窗口的HWND。我不知道我是否能找到:但是;这不是什么大问题,我只是在学习C++ing。对于进程句柄和窗口句柄,有两种不同的数据类型HANDLE和HWND,这是有原因的。更不用说一个进程可以有多个窗口,所以肯定没有一对一的对应关系。你到底想做什么?我想做一个简单易用的API来制作魔兽世界机器人。我试图查找的窗口HWND是主窗口的HWND。我不知道我是否能找到:但是;这不是什么大问题,我只是在学习C++ing。警告:正如前面提到的,一个进程可以有多个窗口,因此您可能需要额外检查窗口类名、标题等,以确定它是否是您想要的。多亏了你们两位,我想到了克服此问题的方法:。警告:如前所述-一个进程可以有多个窗口,因此您可能需要额外检查窗口类名、标题等,以确定它是否是您想要的。多亏了你们两位,我想到了克服此问题的方法:)。