Как определить внутренний HWND, используемый COM в моем текущем процессе?

Я хочу отправлять сообщения непосредственно на HWND, принадлежащий COM в моем процессе. Как получить HWND, который COM использует в однопоточном режиме?


person zumalifeguard    schedule 29.07.2017    source источник
comment
Каков был бы вариант использования для этого? Я не могу не думать, что это ужасный взлом, вероятно, результат проблемы XY.   -  person IInspectable    schedule 29.07.2017
comment
Это ужасный взлом. Ты прав. Это не незаконно. Это?   -  person zumalifeguard    schedule 30.07.2017
comment
Это законно. Также разрешено жонглировать бензопилами.   -  person IInspectable    schedule 30.07.2017
comment
Я почти уверен, что согласен с вами на 100%. Но что мне с этим делать? Я хочу зафиксировать эту информацию в stackoverflow, чтобы я или другие могли вернуться к ней в другое время в будущем.   -  person zumalifeguard    schedule 30.07.2017
comment
Опять же, каков будет вариант использования для этого? Почему бы вам не спросить о реальной проблеме, которую вы пытаетесь решить, а не о предложенном вами решении?   -  person IInspectable    schedule 30.07.2017
comment
@zumalifeguard Я пытался сделать что-то подобное (и успешно) много лет назад, но я нашел лучшие решения для каждой проблемы, которую я когда-либо рассматривал. Если вы хотите обсудить, здесь или в частном порядке, ваш вариант использования, я буду рад предложить вам несколько альтернатив для рассмотрения.   -  person Michael Gunter    schedule 31.07.2017


Ответы (1)


Попробуй это:

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

Дайте мне знать, если это работает.

person zumalifeguard    schedule 29.07.2017
comment
Вы спрашиваете себя, работает ли это? Вау :D - person Antti Haapala; 29.07.2017
comment
Ответы на Stack Overflow должны отвечать на заданный вопрос. Если вам нужно спросить, является ли предложенное решение правильным или нет, вы должны указать это в своем вопросе. Воспользуйтесь ссылкой редактировать и обновите свой вопрос. - person IInspectable; 29.07.2017
comment
Ладно, Инспектабельный. Я это сделаю. - person zumalifeguard; 30.07.2017
comment
Ждать. Я не спрашиваю, правильно ли предложенное решение или нет в вопросе. Вопрос просто в том, как это сделать. - person zumalifeguard; 30.07.2017