2017-07-29 115 views
-2

我想在我的进程中直接发布邮件到COM拥有的HWND。如何获得COM在单线程模式下使用的HWND?如何确定当前进程中COM使用的内部HWND?

+2

这是什么用例?我不禁想到,这是一个可怕的黑客攻击,可能是[XY问题](http://xyproblem.info/)的结果。 – IInspectable

+1

这是一个可怕的黑客。你是对的。这不是非法的。是吗? – zumalifeguard

+0

这是合法的。玩弄电锯也是合法的。 – IInspectable

回答

0

试试这个:

HWND prevWindow = NULL; 
HWND hwnd; 
for (;;) 
{ 
    hwnd = FindWindowEx(HWND_MESSAGE, prevWindow, L"OleMainThreadWndClass", NULL); 
    if (!hwnd) 
     break; 

    if (GetWindowThreadProcessId(hwnd, NULL) == GetCurrentThreadId()) 
     break; 

    prevWindow = hwnd; 


    WCHAR className[255]; 
    *className = 0; 
    ::GetClassName(hwnd, className, 255); 
} 

让我知道,如果它的工作原理。

+6

你在问自己是否有用?哇:D –

+1

堆栈溢出的答案应该回答被问到的问题。如果您需要询问,建议的解决方案是否正确,您需要将其提交给您的问题。请使用[编辑](https://stackoverflow.com/posts/45385193/edit)链接并更新您的问题。 – IInspectable

+0

好的,可以预见的。我会去做。 – zumalifeguard

相关问题