Являются ли сообщения окна «надежными»? - PullRequest
5 голосов
/ 24 мая 2011

Это довольно общий вопрос, касающийся программирования Windows:

Являются ли сообщения Windows "надежными"?

Для пример (это всего лишь примеры ):

  • Можете ли вы быть уверенным , что WM_MOUSEMOVE произойдет до того, как курсор появится на вашем экране?

  • Можете ли вы быть уверенными , что вы получите сообщение WM_DEVICECHANGE, если устройство вставлено?

  • Можете ли вы быть уверенными , чтоВы получите сообщение WM_KILLFOCUS, если ваше окно потеряет фокус?

Или, другими словами: Можете ли вы быть уверенным , что получите соответствующее сообщениев соответствующее время, или вам всегда нужно защищаться, если каким-то образом вы можете пропустить сообщение без явно задокументированной причины?


Пример:

  • гарантировано (AFAIK), что драйвер фильтра файловой системы не "пропустит" файловую операцию или не изменитсяification.

  • В отличие от этого, не гарантирует, что ReadDirectoryChangesW не пропустит уведомление.На самом деле, он может пропустить немало, если его буфер переполнится.

Примечание:

Я не говорю о ситуации с противником(например, кто-то угоняет вашу оконную процедуру или устанавливает крюк / фильтр);это в значительной степени аннулирует любую гарантию.Я спрашиваю только о непонятных ситуациях, которые действительно могут произойти, даже если никто намеренно не имел в виду ничего плохого, например, случайное переполнение буфера, если кто-то использует SendInput и т. Д. , предполагая, что у вас есть контроль над собственным кодом .

1 Ответ

3 голосов
/ 24 мая 2011

Нет, вы не можете быть уверены, что данное сообщение будет доставлено в определенном порядке.Вот несколько причин, по которым

  • Сообщения не могут отправляться программно, и это может использоваться для имитации «невозможных» сценариев, таких как WM_KEYUP, за которым следует WM_KEYDOWN.
  • Другая подпрограмма может подклассифицировать ваше окно и выборочно перехватывать сообщения, а не отправлять их на ваш WNDPROC

Лучше всего защищаться от любых сценариев, где важен порядок

...