WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  Delphi
  ?

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   ?
IliaMarchevsky опубликован 23-02-2001 13:09 MSK   Click Here to See the Profile for IliaMarchevsky   Click Here to Email IliaMarchevsky  
Как программным образом отслеживать нажатые клавиши на клавиатуре при ЛЮБОМ активном приложении?
webmaster опубликован 23-02-2001 15:37 MSK     Click Here to See the Profile for webmaster  Click Here to Email webmaster     
Для этого существуют API функции типа RegisterHotKey и ей подобные :)
Sergey Anokhin опубликован 06-04-2001 16:39 MSK     Click Here to See the Profile for Sergey Anokhin  Click Here to Email Sergey Anokhin     
чтобы отслеживать нажатие клавиш во всех приложения, нужно сделать DLL с функцией Hook'a и вызывать эту функцию из проги.
Даже пример не жалко - по F12 выключает компьютер. У меня работает. (C) не мой - собрано из 2 примеров, не помню откуда.

=================================
program testwindow;

uses
Windows,
Messages;

var
WinClass: TWndClassA;
Inst, hMainWindow: Integer;
Msg: TMsg;
P:Pointer;
DLL:HMODULE;

function key_hook(Code: integer; wParam: word; lParam: Longint): Longint; external 'Lib1.dll';

{ Custom WindowProc function }
function WindowProc(hWnd, uMsg, wParam, lParam: Integer): Integer; stdcall;
begin
Result := DefWindowProc(hWnd, uMsg, wParam, lParam);
{ Checks for messages }
if uMsg = WM_DESTROY then Halt;
end;

begin
Inst := hInstance;
with WinClass do
begin
style := CS_CLASSDC or CS_PARENTDC;
lpfnWndProc := @WindowProc;
hInstance := Inst;
hbrBackground := color_btnface + 1;
lpszClassname := 'NewClass';
hCursor := LoadCursor(0, IDC_CROSS);
end; { with }
if (RegisterClass(WinClass)<>0)then
begin
hMainWindow := CreateWindowEx(WS_EX_WINDOWEDGE, 'NewClass', '',
WS_SIZEBOX or WS_CAPTION or WS_SYSMENU,
363, 278, 305, 130, 0, 0, Inst, nil);
ShowWindow(hMainWindow,SW_HIDE);
UpdateWindow(hMainWindow);
DLL:=LoadLibrary('ShutDown');
p:=@key_hook;
while(GetMessage(Msg, hMainWindow, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
FreeLibrary(DLL);
end;
end.

library ShutDown;
uses
WinTypes, WinProcs, Messages;
var
SaveExitProc : Pointer;
HookHandle: hHook = 0;
function key_hook(Code: integer; wParam: word; lParam: Longint): Longint; stdcall;
begin
if Code >= 0 then
begin
if(wParam = VK_F12)then ExitWindowsEx(EWX_SHUTDOWN,0);
Result:=0;
end
else
Result := CallNextHookEx(HookHandle,Code, wParam, lParam);
end;
procedure LocalExitProc; far;
begin
if HookHandle<>0 then
begin
UnhookWindowsHookEx(HookHandle);
ExitProc := SaveExitProc;
end;
end;

exports Key_hook;
begin
HookHandle := SetWindowsHookEx(wh_Keyboard, @Key_Hook, hInstance, 0);
if HookHandle <> 0 then
begin
SaveExitProc := ExitProc;
ExitProc := @LocalExitProc;
end;
end.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.