Как мое приложение может найти отправителя сообщения Windows? - PullRequest
14 голосов
/ 26 мая 2009

У меня есть приложение, которое использует процедуру подключения клавиатуры в библиотеке. WParam в ловушке для одного сообщения - 255, который мы считаем "(зарезервированный / OEMClear)". Я хотел бы выяснить источник этого сообщения, так как оно вызывает сбой моего приложения в библиотеке, и, учитывая, что это не должно происходить, было бы хорошо определить его. Сообщение поступает неоднократно только на одном имеющемся у нас компьютере - другие компьютеры его вообще не видят.

Итак, есть ли способ отследить источник сообщения, отправленного в окно, пожалуйста, или все это в системе?

Ответы [ 4 ]

6 голосов
/ 26 мая 2009

Нет встроенного способа узнать, кто отправил оконное сообщение, даже win32k не отслеживает это; Вы можете найти это с помощью отладчика ядра и условной точки останова.

Однако я бы сказал, что вам не нужна эта информация; вам нужно, чтобы ваше приложение правильно обрабатывало любое сообщение, отправленное на него.

1 голос
/ 26 мая 2009

(я изначально предлагал использовать Spy ++ или winspector, но они не подключаются к отправке сообщений. Это даже не имеет смысла! Окно получает сообщения, но они не отправляют нить делает это. Я оставлю свое предложение об использовании отладчика.)

Иногда может помочь отладка. Попробуйте загрузить файлы windows PDB и установить точку останова, которая срабатывает только при появлении одного из этих сообщений. Глядя на стек вызовов в этой точке, часто можно пролить свет на то, почему что-то происходит. Отправленные сообщения и сообщения, отправленные другими процессами, помешают этому подходу.

0 голосов
/ 27 мая 2009

Нет встроенного способа узнать, кто отправил оконное сообщение

Конечно, есть. Но это продвинутое программирование на Win32 (перехватив CSRSS)

0 голосов
/ 26 мая 2009

Я не уверен, что это так, как вы хотите, но посмотрите на Process Monitor от sysinternals.

http: // technet.microsoft.com/en-us/sysinternals/bb896645.aspx

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

...