На самом деле не существует простого способа использования только встроенных функций CF. Вам нужно просмотреть все сообщения для вашего приложения, и реализация IMessageFilter, как описано в этой записи блога (включена через SDF, так как CF не поддерживает их), является самым простым способом добраться туда.
Вы всегда можете сделать то же самое, что делает SDF, создав собственный насос сообщений (с помощью P / Invoking GetMessage, TranslateMessage и DispatchMessage) и затем не используя Application.Run, а свой собственный вызов. Это все, что SDF делает в любом случае.