Показать сообщение отдельно
  #5  
Старый 07.02.2014, 01:20
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Механизм "горячих" клавиш нужен для того что бы приложение их установившее в системе получало сообщение (в вашем случае WMHotKey) даже в неактивном состоянии, и получат уведомление что кто-то нажал Alt (VK_MENU) +- PrintScrn (VK_SNAPSHOT) все проги, кому это надо, вернее те, чьи хендлы зареганы как его получатели. Остаётся только в этот момент сделать Clipboard.Clear и буфер будет очищен. Правда ещё один нюанс, если в проге есть другие, напр. "стандартные" хоткеи, тогда надо разрешить базовому обработчику обслужить дальше это сообщение через Inherited, иначе остальные "горячки" перестанут работать


Добавлено немного позже


Вот для примера запрет на PrintScrn и Alt+PrintScrn во время выполнения
Код:
...

 private
     procedure WMHotKey(var Msg : TWMHotKey); message WM_HOTKEY;

...

uses clipbrd;
procedure TForm1.WMHotKey(var Msg : TWMHotKey);
begin
 if (Msg.HotKey = 101) or (Msg.HotKey = 102) then ClipBoard.Clear;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 RegisterHotKey(Form1.Handle, 101, 0, VK_SNAPSHOT);
 RegisterHotKey(Form1.Handle, 102, MOD_ALT, VK_SNAPSHOT);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
 UnRegisterHotKey(Form1.Handle, 101);
 UnRegisterHotKey(Form1.Handle, 102);
end;
Ответить с цитированием