C ++处理为HWND?

时间:2012-05-03 18:02:44

标签: c++ api postmessage findwindow


我想知道你是否可以将手柄转换为窗口" HWND"。我需要打电话给" PostMessage"函数使用" FindWindow"方法

我目前必须采购

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

使用mainProcess句柄调用GetProcessId()以获取ProcessID。

调用EnumWindows()

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

比较ProcessID,如果它们匹配 - 你找到了你想要的HWND。

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