Я хочу отправлять сообщения непосредственно на HWND, принадлежащий COM в моем процессе. Как получить HWND, который COM использует в однопоточном режиме?
Как определить внутренний HWND, используемый COM в моем текущем процессе?
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
Вы спрашиваете себя, работает ли это? Вау :D
- person Antti Haapala; 29.07.2017
Ответы на Stack Overflow должны отвечать на заданный вопрос. Если вам нужно спросить, является ли предложенное решение правильным или нет, вы должны указать это в своем вопросе. Воспользуйтесь ссылкой редактировать и обновите свой вопрос.
- person IInspectable; 29.07.2017
Ладно, Инспектабельный. Я это сделаю.
- person zumalifeguard; 30.07.2017
Ждать. Я не спрашиваю, правильно ли предложенное решение или нет в вопросе. Вопрос просто в том, как это сделать.
- person zumalifeguard; 30.07.2017