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

Нашёл попроще способ
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
   procedure FormCreate(Sender: TObject);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}

var
kbHook: HHOOK;
function kbProc(nCode: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
begin
Result := CallNextHookEx(kbHook, nCode, WParam, LParam);

if WParam = WM_KEYDOWN {WM_KEYUP}  then // можно определить лишь нажата\ отжата :-)
// Вот здесь всё и происходит, проверил, работает и в "свёрнутом" виде

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
kbHook := SetWindowsHookEx(13, @kbProc, HInstance, 0);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnhookWindowsHookEx(kbHook);
end;
end.
Только состояние клавиши подставить

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

З.Ы. А вот что с "горячей" клавишей "а" получилось
Код:
unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Classes, Controls, Forms, StdCtrls, ExtCtrls;
type
  TForm1 = class(TForm)
    tmr1: TTimer;
    mmo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure tmr1Timer(Sender: TObject);
  private
procedure WMHotKey(var Msg: TWMHotKey); message WM_HOTKEY;

    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

  implementation

{$R *.dfm}

procedure TForm1.tmr1Timer(Sender: TObject);
begin
keybd_event(VK_SPACE,0,KEYEVENTF_EXTENDEDKEY,0);
keybd_event(VK_SPACE,0,KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP,0);
end;

procedure TForm1.WMHotKey(var Msg: TWMHotKey);

begin
if tmr1.Enabled then
begin
tmr1.Enabled:= false;
mmo1.Lines.Add('off');
end else
begin
tmr1.Enabled:= true;
mmo1.Lines.Add('on');
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Form1.Handle, 65, 0, 65);
tmr1.Enabled:=false;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(Form1.Handle, 65);
end;

end.
Ответить с цитированием