如何获得COM单线程单元(STA)的窗口句柄?

时间:2009-02-12 01:28:34

标签: winapi com

CoInitialize(NULL)通过创建隐藏窗口来创建STA。如何获得此窗口的HWND句柄?

在我尝试的一个例子中,函数EnumThreadWindows不起作用:

...

CoInitialize(NULL);

EnumThreadWindows(GetCurrentThreadId(), EnumThreadWndProc, 0);

...

BOOL CALLBACK EnumThreadWndProc(HWND hwnd, LPARAM lParam)
{
   m_hwnd = hwnd;

   return FALSE;
}

什么都没有进入EnumThreadWndProc。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

此隐藏窗口为仅消息窗口,不可见,没有z顺序,无法枚举,也不接收广播消息。该窗口只是发送消息。

要查找仅消息窗口,请在FindWindowEx函数的hwndParent参数中指定HWND_MESSAGE。此外,如果hwndParent和hwndChildAfter参数均为NULL,FindWindowEx将搜索仅限消息的窗口以及顶级窗口。

来源: MSDN

答案 1 :(得分:2)

顺便说一下,我在这里非常小心 - 你 真的 不应该向你不拥有的Windows发送窗口消息。您的代码很可能在未来的Windows版本中中断。