Прикладная программа может выбирать конкретные сообщения, которые извлекает из очереди (при игнорировании других сообщений) используя функцию GetMessage или PeekMessage, чтобы установить их фильтрацию. Фильтр - это диапазон кодов сообщений (заданный первым и последним идентификатором), дескриптор окна, или оба вместе. Функции GetMessage и PeekMessage используют фильтр сообщений, чтобы выбрать, какие сообщения извлекать из очереди. Фильтрация сообщений полезна в том случае, если прикладная программа должна найти очередь сообщений для сообщений, которые прибыли в очередь позже. Это также полезно применить, если приложение должно обрабатывать сообщения ввода (аппаратные) перед обработкой помещенных в очередь сообщений.
Константы WM_KEYFIRST и WM_KEYLAST могут быть использованы как значения фильтра для извлечения всех сообщений клавиатуры; константы WM_MOUSEFIRST и WM_MOUSELAST могут быть использованы для извлечения всех сообщений мыши.
Любая прикладная программа, которая фильтрует сообщения, должна гарантировать, что сообщение, удовлетворяющее параметрам фильтра, может быть помещено в очередь. Например, если приложение фильтрует сообщения WM_CHAR в окне, которое не принимает ввод информации с клавиатуры, функция GetMessage значения не возвращает. Это прикладную программу эффективно приводит к "зависанию".