- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 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; 

 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -