- 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

 

SendKeys Kategori: Blandat
Inlagt: 2003-03-05
Läst: 608
Inlagt av: Staffan Berg
Beskrivning
Detta exempel demonstrerar hur du på programmatisk väg kan simulerar tangenttryckningar med hjälp av SendKeys. 
Kod
Type
  TShiftKeyInfo = Record
  shift: Byte;
  vkey : Byte;
  End;
  byteset = Set of 0..7;
Const
  shiftkeys: Array [1..3] of TShiftKeyInfo =
    ((shift: Ord(ssCtrl); vkey: VK_CONTROL ),
    (shift: Ord(ssShift); vkey: VK_SHIFT ),
    (shift: Ord(ssAlt); vkey: VK_MENU ));
Var
  flag: DWORD;
  bShift: ByteSet absolute shift;
  i: Integer;
Begin
  For i := 1 To 3 Do Begin
    If shiftkeys[i].shift In bShift Then
      keybd_event( shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), 0, 0);
  End; { For }
  If specialkey Then
   flag := KEYEVENTF_EXTENDEDKEY
  Else
   flag := 0;

  keybd_event( key, MapvirtualKey( key, 0 ), flag, 0 );
  flag := flag or KEYEVENTF_KEYUP;
  keybd_event( key, MapvirtualKey( key, 0 ), flag, 0 );

  For i := 3 DownTo 1 Do Begin
   If shiftkeys[i].shift In bShift Then
    keybd_event( shiftkeys[i].vkey, MapVirtualKey(shiftkeys[i].vkey, 0), KEYEVENTF_KEYUP, 0);
  End; { For }
End; //PostKeyEx32

procedure TForm1.Button1Click(Sender: TObject);
begin
  //Pressing the Left Windows Key
  PostKeyEx32(VK_LWIN, [], FALSE);

  //Pressing the letter D
  PostKeyEx32(ORD('D'), [], FALSE);

  //Pressing Ctrl-Alt-C
  PostKeyEx32(ORD('C'), [ssctrl, ssAlt], FALSE);
end;

//or you can also try this simple example to send any amount of keystrokes at the same time.

procedure TForm1.Button1Click(Sender: TObject);
begin
  //Pressing the A Key and showing it in the Edit1.Text
  Edit1.SetFocus;
  keybd_event(VK_SHIFT, 0, 0, 0);
  keybd_event(ord('A'), 0, 0, 0);
  keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);

  //Presses the Left Window Key and starts the Run
  keybd_event(VK_LWIN, 0, 0, 0);
  keybd_event(ord('R'), 0, 0, 0);
  keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);
end;

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