Вывод панели задач Windows на передний план при запуске полноэкранного приложения - PullRequest
0 голосов
/ 30 июня 2010

У меня есть приложение, в котором я использую оповещение, чтобы показать подсказки. Тем не менее, он будет работать в среде, где всегда есть отдельное основное приложение, работающее в полноэкранном режиме. Моя проблема заключается в том, чтобы заставить панель задач выйти вперед - я думал, что это произойдет автоматически, когда на панели уведомлений появятся всплывающие подсказки.

Можно ли сделать панель задач видимой поверх приложения, работающего в полноэкранном режиме?

Я попробовал следующее, но дело не в том, чтобы скрыть или скрыть панель задач, а в том, чтобы вывести ее на передний план или сделать запущенное приложение не полноэкранным ...

int TaskBarHwnd = FindWindow("Shell_traywnd", "");
bool result1 = SetWindowPos(TaskBarHwnd, 0, 0, 0, 0, 0, SWP_HIDEWINDOW);   // Hide Taskbar
bool result1 = SetWindowPos(TaskBarHwnd, 0, 0, 0, 0, 0, SWP_SHOWWINDOW); // Show Taskbar

EDIT Должен быть способ сделать это - если я смотрю фильм, и моя батарея разряжена, то панель задач сдвигается вверх, и я получаю уведомление о батарее. Мне нужно выяснить, что делает ОС, чтобы получить такое поведение ...

EDIT Стоит сказать, что исходный код полноэкранного приложения находится под нашим контролем. Это справедливо меняет вопрос, но я все же хотел бы знать способ «прерывания» полноэкранного приложения независимо от того, имеете ли вы контроль или нет.

Ответы [ 4 ]

1 голос
/ 22 июля 2010

Если не проблема, что всплывающее меню всплывет, чем вы могли бы нажать кнопку Windows.

keybd_event(VK_LWIN, 0, 0, 0);
keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);

У меня нормально работает под Windows 7.

0 голосов
/ 02 июля 2010

Одним из способов, которым я сейчас занимаюсь, является отправка управляющего ключа из моего приложения notifyicon.

SendKeys.Send("{ESC}");

Это работает как стандартное поведение для полноэкранного приложения, как правило, для выхода из полноэкранного режима при нажатии клавиши Escape на клавиатуре. Я до сих пор не думаю, что это лучшее решение, потому что могут быть случаи, когда форсирование ESC может иметь побочные эффекты, если пользователь делает что-то еще ... но это вполне может быть "достаточно хорошо"

0 голосов
/ 02 июля 2010

Как насчет другого решения?

Не делать главное приложение полноэкранным: оно будет охватывать весь экран, кроме области, где панель задач всегда расположена по умолчанию. Если панель задач перемещается на другую сторону, ОС уведомляет приложение об обновлении размера окна, но она всегда избегает новой области панели задач. Худший случай, когда панель задач настроена автоматически скрытой. Хотя это будет выглядеть не очень хорошо.

0 голосов
/ 01 июля 2010

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

SendMessage(hAnyWnd, WM_SYSCOMMAND, SC_TASKLIST, 0)

Я посмотрю, смогу ли я найти другое решение.

(Ну, самое очевидное решение, конечно, это BringWindowToTop(hTaskBar), но это, похоже, не работает.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...