Есть ли хук Windows API для «это приложение требует внимания»?

В Windows XP, когда программа хочет внимания пользователя, она мигает оранжевой кнопкой на панели задач. Любой человек с IM-программой, вероятно, знаком с этим поведением. Но когда я играю в игру в полноэкранном режиме, я не вижу этого, и сообщения остаются без ответа.

Сейчас я пишу собственный игровой движок, и я хотел бы быть добрым к своим пользователям. Есть ли какой-нибудь вызов Windows API, для которого я могу написать ловушку, которая будет уведомлять мою программу, когда любая другая программа просто устанавливает свою кнопку на панели задач в «оранжевый режим мигания»? Таким образом, я мог бы уведомить пользователя, когда это произойдет.

Я был бы удивлен, если это не доступно. Я видел скринсейвер Mac OS Classic, который смог сделать это еще в середине 90-х. Вот откуда у меня появилась идея.

РЕДАКТИРОВАТЬ: Это было помечено как дубликат " как я могу программно определить, если приложение мигает в задачах", но я снова открыл его, потому что ответы на этот вопрос лучше, и для поощрения больше людей, чтобы обсудить возможные решения, если таковые существуют.

16.12.2008 00:19:48
лично, если я играю в игру на весь экран, я не хочу, чтобы меня прерывали. Прерывания могут вас убить!
Steven A. Lowe 16.12.2008 00:24:43
Правда, иногда я даже раздражаюсь, когда в паром появляется всплывающая подсказка.
Nathan W 16.12.2008 00:27:26
Я не думаю о перерывах. Больше похоже на ненавязчивую строку текста, очень похоже на получение сообщения командного чата. «Боб (Yahoo! Messenger) хочет вашего внимания». Затем вы решаете, стоит ли разговаривать с Бобом, вместо того, чтобы выйти через 2 часа и обнаружить, что вы пропустили старого друга.
Mason Wheeler 16.12.2008 00:28:32
Это не звучит слишком вредно.
Nathan W 16.12.2008 00:34:28
В чем причина закрытия этого вопроса? Этот вопрос задается более четко, чем его дубликат, и уже имеет лучший ответ, чем тот, который указан на его дубликате. Это закрыто только потому, что пришло позже?
Mike Powell 16.12.2008 02:59:34
5 ОТВЕТОВ

Похоже, этот вопрос был задан ранее на SO: Как я могу программно определить, мигает ли приложение на панели задач

Краткий ответ: не представляется возможным.

0
23.05.2017 10:32:58

Я не думаю, что есть такая вещь. Возможно, вы сможете добиться этого с помощью перехвата API , хотя я не уверен, что Vista позволит вам это сделать. Работает на XP, хотя.

Есть, однако, несколько других идей в этом направлении, которые могут быть «следующей лучшей вещью»:

  • Не берите на себя исключительное право собственности на звуковые устройства, чтобы слышать звуки других программ. Я не уверен, как это сделать, но некоторые игры блокируют другие звуки, некоторые нет;
  • Разрешить пользователю переключаться с вашей игры с помощью ALT-TAB и других комбинаций клавиш;
  • Если другое окно пытается стать активным, позвольте ему и изящно сверните;

Другие общие советы включают в себя:

  • Старайтесь минимизировать / восстановить время. Я ничего не знаю о программировании игр, но для некоторых игр это занимает много времени.
  • Правильно восстановить изображение при минимизации / восстановлении. Некоторые игры имеют проблемы с этим.
  • Авто-пауза при минимизации. Если это сетевая игра и ее невозможно приостановить, возможно, отправьте сообщение другим игрокам, чтобы они знали.
  • Несколько не связано, но мне нравится, когда игры показывают часы где-то (реальные часы, а не игровое время). Таким образом, я могу легко определить, должен ли я уже лечь спать, не свернув программу. :)
3
16.12.2008 00:34:39
Все очень хорошие идеи. Лично программы, которые отключают ALT-TAB, ALT-F4 или другие базовые функции, сводят меня с ума. Если пользователь пытается что-то сделать, а разработчик приложения говорит: «Извини, Дейв ...», как это лучше, чем писать вредоносные программы?
Mason Wheeler 16.12.2008 00:40:19
Vista или 7 не имеют проблем с перехватом API, если процесс не является защищенным процессом. Это означает, что вы не можете подключить защищенные процессы.
AppDeveloper 22.06.2013 23:15:48

Конечно, это возможно. Это даже Win32 FAQ (в течение многих лет ...), см. Adv. api ng news: //comp.os.ms-windows.programmer.win32

0
17.12.2008 17:24:07
Ну, я нашел группу новостей, но я не могу найти вопрос или ответ на него. Ссылку пожалуйста?
Mason Wheeler 18.12.2008 01:09:54

Вот несколько ссылок, которые помогут вам начать работу с Api

www.internals.com/articles/apispy/apispy.htm www.wheaty.net/

В целом, Vista не имеет проблем с перехватом API, за исключением того факта, что она не позволяет перехватывать защищенные процессы.

0
19.05.2009 23:18:44

Это вполне возможно сделать. Я делаю это на Windows 7, так что я уверен, что это возможно и на Vista.

-2
1.10.2009 05:47:34