JSTQ Опубликовано 24 марта, 2010 Жалоба Поделиться Опубликовано 24 марта, 2010 Гуру кодинга, снова нужна ваша помощь.Вообщем нужен универсальный метод, позволяющий "вешать" определенные процедуры на хоткеи. Желательно даже в то время, когда программа минимизирована/свернута в трей. Событие OnKeyPress почемуто не отлавливает нажатие, кроме того, элемент, на котором висит этот обработчик, должен быть сфокусирован, что также проблематично, например в событие OnKeyPress на StringGrid-е программа вообще не заходит.+ Каким образом написать оптимальный обработчик события, отлавливающий хоткей? Делать это по таймеру с делеем 1 мсек наверное очень затратно *01 Ссылка на комментарий
CooDi Опубликовано 24 марта, 2010 Жалоба Поделиться Опубликовано 24 марта, 2010 В чем программу пишем? Ну а вообще надо читать windows API Ссылка на комментарий
JSTQ Опубликовано 24 марта, 2010 Автор Жалоба Поделиться Опубликовано 24 марта, 2010 В чем программу пишем?rad studio 2010Ну а вообще надо читать windows APIinvoke RegisterHotKey,hDlgMain,0C000h,NULL,VK_F5;*************************.ELSEIF uMsg == WM_HOTKEY;*************************.if wParam == 0C000hinvoke SendMessage,hCBO1,CB_RESETCONTENT,NULL,NULLjmp reset.endifНагуглил это чудо, что с ним делать?) Ссылка на комментарий
CooDi Опубликовано 24 марта, 2010 Жалоба Поделиться Опубликовано 24 марта, 2010 Для примера, перехватим комбинацию ALT + CONTROL + ENTER.Сначала регистрируем горячую клавишу:bool RHKret = RegisterHotKey(Form1->Handle, // Handle окна, которому отправлять сообщения WM_HOTKEY 0x00F, // УСЛОВНЫЙ идентификатор горячего ключа MOD_ALT + MOD_CONTROL, // модификаторы VK_RETURN // код клавиши );if (RHKret) // если всё о′кей { ShowMessage("Hot Key Registred"); }Затем размещаем на Form1 TApplicationEvents и в OnMessage пишем:if (Msg.message == WM_HOTKEY) // сообщение наше { if (Msg.wParam == 0x00F) // идентификатор наш { ShowMessage("www.sources.ru"); // громко кричим "уря" } }Когда горячая клавиша больше не нужна, отключаем ее:UnregisterHotKey(Form1->Handle, // Handle окна 0x00F // наш идентификатор горячего ключа );http://www.excode.ru/art7095p5.htmlПопробуй. Ссылка на комментарий
JSTQ Опубликовано 24 марта, 2010 Автор Жалоба Поделиться Опубликовано 24 марта, 2010 Спасибо)Только вот присутствует ощутимая задержка между нажатием хоткея и выполнением нужного кода. А так все идеально. Сайт в избранное)зы 0x00F я так понял подобие ID хоткея. А какие еще допустимы? На 0x00G ругается Ссылка на комментарий
CooDi Опубликовано 24 марта, 2010 Жалоба Поделиться Опубликовано 24 марта, 2010 эм... Ну потмучто в 16-ричной системе пишем..Добавлено спустя 46 секунд: MOD_ALT + MOD_CONTROL, // модификаторы VK_RETURN // код клавишивот клавиши сами Ссылка на комментарий
Maru Опубликовано 24 марта, 2010 Жалоба Поделиться Опубликовано 24 марта, 2010 вообще-то рекомендуется использовать функции WinAPI GlobalAddAtom, GlobalDeleteAtom, GlobalFindAtom для получения hotkeyId (msdn):http://msdn.microsoft.com/en-us/library/ms646309(VS.85).aspx Ссылка на комментарий
прохожий Опубликовано 25 марта, 2010 Жалоба Поделиться Опубликовано 25 марта, 2010 Желательно даже в то время, когда программа минимизирована/свернута в трей.тут без гобал хука фокус не пройдет. Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти