![]() |
Установка глобального HotKey
Привет всем. Нужно: установить сочетания клавиш глобальное. Делаю так:
Код:
[DllImport("user32.dll")] Но ничего не происходит когда я нажимаю комбинацию клавишь. Ставлю точку останова на строке if (m.Msg == WM_HOTKEY) но программа туда даже не заходит. Что я сделал не так? |
Глобальная клавиша для чего нужна, для того, чтобы на форме в любом месте нажать, например, F3 и открылось какое то меню или действие? Если да, то все гораздо проще:
1. Выставляем у формы свойство KeyPreview=true; 2. Вставляем обработчик на KeyDown: Код:
private void Form1_KeyDown(object sender, KeyEventArgs e) |
Нет без привязки к форме. Все нужно чтобы вызывать свернутое окно.
|
ну хотя бы на base.WndProc(ref m); он доходит? Или просто не заходит в функцию?
|
Да доходит не срабатывает именно условие как будто клавишу и не нажимали вовсе.
Код:
if (m.Msg == WM_HOTKEY) |
giv5dot26 приведённый код неполон. Но должен работать.
Первоначально хотел предложить вызов RegisterHotKey перенести из конструктора формы (подозрение на не валидный this.Handle) куда-нибудь в OnLoad (событие наступает сразу после первого отображения формы). Но нет, работать будет и там (this.Handle валидный в обоих случаях). |
В общем приведенный Вами код работает, но вот стоит форму свернуть в трей как реакция на нажатие прекращается и вот это уже не проходит
Код:
if (msg.Msg == WM_HOTKEY) |
giv5dot26, в предыдущем посте пропустил слово - приведённый выше код неполон. Иными словами, в первом посте приводится вполне рабочий код (на его основе полный вариант под споллером в 6 посте), однако не уточнен способ сворачивания в трей.
Что касается трея, то как-то не доводилось его программировать, но есть предположение создать две формы, первая (невидимая) пускай принимает сообщения, вторая получает их от первой, будучи свёрнута в трей. Здесь WndProc doesn't receive hotkey message when minimized человек пришёл к выводу, что виной всему this.ShowInTaskbar = false; после которого описатель приложения становится не валидным. |
Да так и есть. Если не использовать
Код:
this.ShowInTaskbar = false |
Время: 18:07. |
Время: 18:07.
© OSzone.net 2001-