Для этого вам обязательно нужно использовать вызовы Win API. Если это единственное, что вы пытаетесь сделать, вам лучше использовать прямой C или C ++, поэтому вам не нужно делать кучу платформенных вызовов для C # или VB.
Поскольку andyjohnson определил , что класс окна для всех всплывающих уведомлений - # 32769, и что у них установлен стиль TTS_BALLOON
, вы можете использовать CBT hook (если вы Вы не знакомы с перехватчиками Win32, возможно, вы захотите прочитать о них ), чтобы получить обратный вызов при каждом создании окна и проверить наличие окон этого класса и с этим стилем.
Я не уверен, однако, создано ли новое всплывающее окно для второго и последующих всплывающих окон или же оно просто скрыто и повторно показано. В этом случае вам может понадобиться CallWndProc hook , чтобы получить WM_SHOWWINDOW
сообщения.
Edit:
Я должен упомянуть, что упомянутые мной хуки не могут быть реализованы в .NET. За исключением низкоуровневых хуков клавиатуры и мыши, глобальные системные хуки должны быть реализованы в собственной (неуправляемой) DLL. Windows загрузит эту DLL в другие процессы, и если управляемая DLL будет загружена в процесс, в который не загружена .NET CLR, это приведет к сбою этого процесса. (Даже если CLR загружен, он может находиться по другому адресу, что также вызывает сбой.)
Таким образом, вы должны создавать свои ловушки в собственной (неуправляемой) DLL. Отсюда можно подключиться к управляемому приложению, такому как Майкл Кеннеди сделал в Code Project , но чтобы сделать это правильно и обработать типы хуков, которые я упомянул выше, вам нужно использовать межпроцессное взаимодействие, шаг, который Майкл Кеннеди пропустил. В целом, для целей, которые вы описали, вероятно, было бы проще просто собрать все это в нативном коде.