Вопрос
Есть простое диалоговое приложение. Существует ли возможность определить глобальную среди всех окон горячую клавишу, которая вызывала бы такую же функцию, как один из пунктов меню, но не используя хуки?
Ответ
Вот пример по вашему запросу. Горячие клавиши регистрируются RegisterHotKey и обязательны для уничтожения (UnregisterHotKey). Для обработки использовать WndProc.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } procedure WndProc(var Message: TMessage); public { Public declarations } end; var Form1: TForm1; hk_Count: Byte; implementation {$R *.dfm} procedure TForm1.WndProc(var Message: TMessage); begin if Message.Msg = WM_HOTKEY then begin MessageBox(0, 'Нажата HotKey','Информация', MB_OK + MB_ICONINFORMATION + MB_TOPMOST + MB_APPLMODAL); end; // Эту строчку не удалять!!! inherited WndProc(Message); end; procedure TForm1.FormCreate(Sender: TObject); begin Self.WindowProc := WndProc; {Ctrl+Numpad0} if not RegisterHotKey(Form1.Handle, hk_Count, MOD_CONTROL, VK_NUMPAD0) then ShowMessage('Error setting hotkey'); Inc(hk_Count); end; procedure TForm1.FormDestroy(Sender: TObject); begin UnregisterHotKey(Form1.Handle, hk_Count); end; end.
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация