Spy++: WM_ACTIVATEAPP выдает несуществующий идентификатор потока, почему?

Я пытаюсь разработать приложение, которое может вывести другое приложение на передний план, поэтому я анализирую поведение проводника Windows (Alt-Tab) с помощью Spy++, для меня интересно, какое приложение или какие три действительно активированы, поэтому я отслеживаю сообщение WM_ACTIVATEAPP .

WM_ACTIVATEAPP, когда wparam=false, согласно документации MSDN, lparam представляет идентификатор потока активируемого потока.

Вот пример из моего журнала Spy++: ‹00037> 00030DD6 S WM_ACTIVATEAPP fActive:False dwThreadID:000008F0

Моя проблема: данный dwThreadID 8F0 должен быть активируемым приложением. Но: когда я переключаюсь на представление потоков в Spy++ и ищу поток 8F0, я ничего не нахожу. Кажется, что этой ветки вообще не существует. Итак, как мне преобразовать этот идентификатор потока в идентификатор процесса?


person Erik    schedule 14.11.2013    source источник
comment
Возможно, поток завершается вскоре после активации окна.   -  person Paul    schedule 14.11.2013
comment
› Итак, как преобразовать этот идентификатор потока в идентификатор процесса? GetProcessIdOfThread.   -  person Paul    schedule 14.11.2013
comment
Так, хм, что тут анализировать? Просто вызовите SetForegroundWindow и покончите с этим. Если вы возражаете, что SetForegroundWindow дает сбой при определенных условиях, не задерживайте дыхание: те же самые условия не позволяют отправке WM_ACTIVATEAPP фактически активировать это приложение.   -  person IInspectable    schedule 14.11.2013


Ответы (1)


Этому есть множество причин, но самая распространенная из них заключается в том, что Spy++ не дает вам представление о состоянии машины в режиме реального времени. Он делает снимок при запуске, этот снимок может быстро устареть. Обновление окна, такого как Spy + Threads, — это то, что вам нужно сделать вручную. Используйте Window + Refresh или нажмите F5.

Хотя это звучит как довольно неприятный недостаток, на самом деле это сделано намеренно. Перебор всех потоков и (особенно) всех окон, существующих на машине, — довольно затратная операция. Инструмент отладки, который оказывает слишком большое влияние на то, что наблюдается, не заслуживает доверия.

Просто заведите привычку нажимать F5, когда вы не видите, что, по вашему мнению, должно быть там.

person Hans Passant    schedule 14.11.2013