Прикладная программа обычно помещает сообщение в очередь , чтобы уведомить конкретное окно об исполнении задачи. Функция PostMessage создает структуру MSG для сообщения и копирует сообщение в очередь сообщений. Цикл обработки сообщений приложения, в конечном счете, извлекает сообщение и распределяет его соответствующей оконной процедуре.
Прикладная программа может поместить в очередь сообщение не для заданного окна. Если приложение, при вызове PostMessage, дает дескриптор окна равный NULL, сообщение помещается в очередь, связанную с текущим потоком. Поскольку дескриптор окна не определен, прикладная программа должна обработать это сообщение в цикле обработки сообщений. Это является одним из способов, чтобы создать сообщение, которое применяется ко взятой в целом прикладной программе, вместо конкретного окна.
Время от времени, у вас может возникать потребность поместить сообщение в очереди всех окон верхнего уровня в системе. Приложение может поместить сообщение в очереди всех окон верхнего уровня путем вызова функции PostMessage, если в параметре hwnd определить флажок HWND_TOPMOST.
Стандартная ошибка программирования состоит в том, что предполагается, что функция PostMessage всегда помещает в очередь сообщение. Это не истина в случае, когда очередь сообщений заполнена. Приложение должно проверить возвращаемое значение функцией PostMessage, чтобы установить, помещалось ли сообщение в очередь и, если этого не было, повторно поместить его в очередь.