[ IgLo @ 24.03.2005. 12:24 ] @
Pogledajte ovaj kod: Code: ... type tagKBDLLHOOKSTRUCT = record vkCode: DWORD; scanCode: DWORD; flags: DWORD; time: DWORD; dwExtraInfo: DWORD; end; TKbDllHookStruct = tagKBDLLHOOKSTRUCT; PKbDllHookStruct = ^TKbDllHookStruct; ... Const WH_KEYBOARD_LL = 13; var hkeyhook: HHOOK; ... function KeyEvent(code: integer; wParam: word; lParam: longword): longword; stdcall; var szKeyName: array[0..255] of Char; hooked: TKbDllHookStruct; dwMsg: DWORD; i: integer; AltPressed : Boolean; Key : String; begin if ( (code = HC_ACTION) and ( (wParam = WM_SYSKEYDOWN) or (wParam = WM_KEYDOWN) ) ) then begin CopyMemory(@hooked,Pointer(lParam),sizeof(TKbDllHookStruct)); dwMsg := 1; dwMsg := dwMsg + (hooked.scanCode shl 16); dwMsg := dwMsg + (hooked.flags shl 24); AltPressed := dwMsg And (1 shl 29) <> 0; ZeroMemory(@szKeyName,sizeof(szKeyName)); szKeyName[0] := '['; i := GetKeyNameText(dwMsg, szKeyName+1, sizeof(szKeyName))+1; szKeyName[i] := ']'; Key := szKeyName; end; If Not ((Key = '[Tab]') And AltPressed) Then Result := CallNextHookEx(hkeyhook,code,wParam,lParam); end; procedure TForm1.FormShow(Sender: TObject); begin hkeyhook := SetWindowsHookEx(WH_KEYBOARD_LL, @Keyevent, hinstance, 0); end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin UnhookWindowsHookEx(hKeyHook); end; Konkretno ovaj kod sluzi da bi "mrak pojeo" Alt+Tab kombinaciju tastera. Kod radi savrseno, ali sam hteo da napravim od njega KeyboardHook komponentu u kojoj bi za svaki pritisnuti taster iz KeyEvent funkcije pozivao OnKeyHooked event. Tu dolazimo do problema. Ako KeyEvent ubacim unutar klase (sto moram da bih pozvao moj Event) funkcija vise ne radi (predpostavljam da SetWindowsHookEx, ne moze da poziva kao treba funkciju unutar klase, ali ovo je moja predpostavka, nisam bas u najboljim odnosima sa Win API-jem ![]() ![]() |