|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - [решено] Установка глобального HotKey |
|
.NET - [решено] Установка глобального HotKey
|
Старожил Сообщения: 258 |
Профиль | Отправить PM | Цитировать Привет всем. Нужно: установить сочетания клавиш глобальное. Делаю так:
[DllImport("user32.dll")] public static extern bool RegisterHotKey(IntPtr hWND, int id, uint fsModifiers, uint vk); [DllImport("user32.dll")] public static extern bool UnregisterHotKey(IntPtr hWND, int iD); private const int MOD_ALT = 0x1; private const int MOD_CONTROL = 0x2; private const int MOD_SHIFT = 0x4; private const int MOD_WIN = 0x8; private const int WM_HOTKEY = 0x312; public Form() { RegisterHotKey(this.Handle, 42, MOD_WIN, (int)Keys.Escape); } protected override void WndProc(ref Message m) { base.WndProc(ref m); if (m.Msg == WM_HOTKEY) { switch (m.WParam.ToInt32()) { case 42: if (this.Visible == false) { this.Show(); this.Tray.Visible = false; this.ShowInTaskbar = true; } break; } } } Но ничего не происходит когда я нажимаю комбинацию клавишь. Ставлю точку останова на строке if (m.Msg == WM_HOTKEY) но программа туда даже не заходит. Что я сделал не так? |
|
Отправлено: 06:35, 03-02-2011 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать Глобальная клавиша для чего нужна, для того, чтобы на форме в любом месте нажать, например, F3 и открылось какое то меню или действие? Если да, то все гораздо проще:
1. Выставляем у формы свойство KeyPreview=true; 2. Вставляем обработчик на KeyDown: |
------- Отправлено: 08:24, 03-02-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 258
|
Профиль | Отправить PM | Цитировать Нет без привязки к форме. Все нужно чтобы вызывать свернутое окно.
|
Отправлено: 08:39, 03-02-2011 | #3 |
Ветеран Сообщения: 5624
|
Профиль | Отправить PM | Цитировать ну хотя бы на base.WndProc(ref m); он доходит? Или просто не заходит в функцию?
|
------- Отправлено: 08:48, 03-02-2011 | #4 |
Старожил Сообщения: 258
|
Профиль | Отправить PM | Цитировать |
|
Отправлено: 08:57, 03-02-2011 | #5 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать giv5dot26 приведённый код неполон. Но должен работать.
Первоначально хотел предложить вызов RegisterHotKey перенести из конструктора формы (подозрение на не валидный this.Handle) куда-нибудь в OnLoad (событие наступает сразу после первого отображения формы). Но нет, работать будет и там (this.Handle валидный в обоих случаях). |
Отправлено: 02:22, 04-02-2011 | #6 |
Старожил Сообщения: 258
|
Профиль | Отправить PM | Цитировать В общем приведенный Вами код работает, но вот стоит форму свернуть в трей как реакция на нажатие прекращается и вот это уже не проходит
Почему как считаете? |
Отправлено: 05:28, 04-02-2011 | #7 |
Ветеран Сообщения: 3320
|
Профиль | Отправить PM | Цитировать giv5dot26, в предыдущем посте пропустил слово - приведённый выше код неполон. Иными словами, в первом посте приводится вполне рабочий код (на его основе полный вариант под споллером в 6 посте), однако не уточнен способ сворачивания в трей.
Что касается трея, то как-то не доводилось его программировать, но есть предположение создать две формы, первая (невидимая) пускай принимает сообщения, вторая получает их от первой, будучи свёрнута в трей. Здесь WndProc doesn't receive hotkey message when minimized человек пришёл к выводу, что виной всему this.ShowInTaskbar = false; после которого описатель приложения становится не валидным. |
Отправлено: 15:48, 05-02-2011 | #8 |
Старожил Сообщения: 258
|
Профиль | Отправить PM | Цитировать |
Отправлено: 07:33, 11-02-2011 | #9 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Проблема с открытием глобального каталога | IgorFromLipetsk | Microsoft Windows NT/2000/2003 | 3 | 08-11-2010 11:30 | |
помогите найти hotkey | mosya | Поиск драйверов, прошивок и руководств | 4 | 06-07-2010 00:40 | |
Microsoft не боится глобального экономического кризиса | OSZone News | Новости и события Microsoft | 4 | 26-11-2008 14:54 | |
Утилиты - [addon] Alt+Q HotKey Tool | Wills | Наборы обновлений для Windows XP/2003/Windows 7 | 8 | 25-05-2008 23:57 | |
Моя маленькая проблема с видео Глобального характера)) | Flashdance | Видеокарты | 13 | 19-08-2006 20:23 |
|