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

Я пытаюсь разработать приложение, которое может вывести другое приложение на передний план, поэтому я анализирую поведение Windows Explorer (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, я ничего не нахожу. Эта нить, кажется, вообще не существует. Так как мне перевести этот идентификатор потока в идентификатор процесса?

1 ответ

Решение

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

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

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

Другие вопросы по тегам