2017-07-29 8 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

スタックオーバーフローに関する回答は、質問されている質問に答えるべきです。提案されたソリューションが正しいかどうかを問う必要がある場合は、それをあなたの質問に入れる必要があります。 [edit](https://stackoverflow.com/posts/45385193/edit)リンクを使用して質問を更新してください。 – IInspectable

+0

よろしくお願いします。私はそれをします。 – zumalifeguard

関連する問題