Forum
Grundkurs
»Introduktion
»Snabbguide
»Komponenter
»Händelser
»Strängar
»Räkna med Delphi »Egna
typer
»Selektion
»Iteration
»Menyer
»Funktioner
»Arraystrukturer
Tips & Tricks
»Nya tips
»Blandat
»Databaser
»Filer
»Forms
»Grafik
»Internet
»Komponenter
»Matematik
»Multimedia
»Objekt/ActiveX
»Skrivare
»Strängar
»System
»Mest lästa tips
Artiklar
»Delphi och ADO
»Bygga en DLL
»Skapa en enkel rapport
»Hantera registret
»Enheter, units
»Klassen TCanvas
»Använd LookUp Controls
Nya
tips
Lägg
till tips
Delphilänkar
Gästbok
|
|
|
|
Tangentbordstryckningar
|
Kategori: System
Inlagt: 2003-08-09
Läst: 1449
Inlagt av: Staffan Berg
|
Beskrivning |
Detta exempel fångar upp de tangentbordstryckningar användaren gör.
|
Kod |
... type TMessageList = class(TList); var Form1: TForm1; MessageList: TMessageList = nil; MessageBuffer: TEventMsg; HookHandle: hHook = 0; MessageCount: Word = 0; Go: Boolean = False; implementation {$R *.DFM} procedure Stop; begin if Go then UnHookWindowsHookEx(HookHandle); MessageList.Free; Go:=False; end; function FBack(Code: Integer; wParam, lParam: LongInt): LongInt; stdcall; begin case Code of HC_SKIP: begin Inc(MessageCount); if MessageCount>=MessageList.Count then Stop else MessageBuffer:=TEventMsg(MessageList.Items[MessageCount]^); Result:=0; end; HC_GETNEXT: begin PEventMsg(lParam)^:=MessageBuffer; Result:=0; end else Result:=CallNextHookEx(HookHandle, Code, wParam, lParam); end; end; procedure SetHook; begin MessageBuffer:=TEventMsg(MessageList.Items[0]^); MessageCount:=0; HookHandle:=SetWindowsHookEx(WH_JOURNALPLAYBACK, FBack, hInstance, 0); Go:=True; end; procedure MakeMessage(Key: byte; Mes: Cardinal); var MyEvent: PEventMsg; begin New(MyEvent); with MyEvent^ do begin message:=Mes; ParamL:=Key; ParamH:=MapVirtualKey(Key, 0); Time:=GetTickCount; hWnd:=Form1.Handle; end; MessageList.Add(MyEvent); end; procedure Imitation(KeyCode: Word); begin MakeMessage(Lo(KeyCode), WM_KEYDOWN); MakeMessage(Lo(KeyCode), WM_KEYUP); end; procedure SetMessages(S: string ); var i: Integer; KeyCode: Word; begin i:=1; repeat KeyCode:=vkKeyScan(S[i]); Imitation(KeyCode); // simulate key presses Inc(i); until i>Length(S); end; function SendStr(S: string ): Integer; begin try MessageList:=TMessageList.Create; SetMessages(S); // set messages SetHook; // set hook except end; Result:=0; end; procedure TForm1.Button1Click(Sender: TObject); begin Edit2.SetFocus; SendStr(Edit1.Text); end;
|
|
|