Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Tastensimilation an Programm senden (https://www.delphipraxis.net/31679-tastensimilation-programm-senden.html)

maximus Caesar 12. Okt 2004 16:50

Re: Tastensimilation an Programm senden
 
Zitat:

Zitat von Robert Marquardt
Die richtige Funktion dazu ist keybd_event bzw. SendInput.
Bei keybd_event muessen die ersten beiden Parameter ausgefuellt sein, sonst akzeptiert DirectInput die Tasten nicht.
Man sendet natuerlich Ctrl-Down, p-Down, p-Up, e-Down, e-Up, s-Down, s-Up, o-Down, o-Up, s-Down, s-Up, Ctrl-Up

Bei mir wird Ctrl nicht erkannt!(vone Ctrl-Down)
kann mir jemand ein Code Beispiel geben?

toms 13. Okt 2004 07:19

Re: Tastensimilation an Programm senden
 
Hast du SendInput auch probiert?

Robert Marquardt 13. Okt 2004 08:02

Re: Tastensimilation an Programm senden
 
SendInput ist ein Aufsatz auf keybd_event. Es sollte sich also gleich verhalten.
Poste doch mal die bisherigen Sourcen.

maximus Caesar 13. Okt 2004 12:35

Re: Tastensimilation an Programm senden
 
Hier der aktuelle Source-Code:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, SRUtils;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
  ID1:Integer;
  PROCEDURE WMHOTKEY(VAR MSG: TWMHOTKEY); MESSAGE WM_HOTKEY;
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

PROCEDURE TFORM1.FORMCREATE(SENDER: TOBJECT);
BEGIN
 ID1 := GLOBALADDATOM('HOTKEY1');
 REGISTERHOTKEY(HANDLE, ID1, 0, ORD('B'));
END;

PROCEDURE TFORM1.WMHOTKEY(VAR MSG: TWMHOTKEY);
BEGIN
 IF MSG.HOTKEY = ID1 THEN
 begin
 Keybd_Event(VK_CONTROL,0,0,0);
 sendkeys('pesos');

 Keybd_Event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
 end;
END;

PROCEDURE TFORM1.FORMDESTROY(SENDER: TOBJECT);
BEGIN
 UNREGISTERHOTKEY(HANDLE, ID1);
 GLOBALDELETEATOM(ID1);
END;


end.
Strg wird jetzt zwar simuliert, aber nicht, das die Taste während der Eingabe von "pesos" weiterhin gedrückt wird!

Robert Marquardt 13. Okt 2004 14:13

Re: Tastensimilation an Programm senden
 
Muss man denn alles zweimal schreiben?
Die beiden ersten Parameter von keybd_event muessen ausgefuellt werden.
Zusaetzlich wuerde ich alle Keycodes mit keybd_event verschicken.

maximus Caesar 13. Okt 2004 18:17

Re: Tastensimilation an Programm senden
 
Kannst du mir dann bitte ein Beispiel mit Code geben?
Währe sehr hilfreich!

Robert Marquardt 13. Okt 2004 18:40

Re: Tastensimilation an Programm senden
 
Da muss ich noch ein bischen rumexperimentieren. "MapVirtualKey(VK_CONTROL, 0) shl 16" ist glaube ich die korrekte Berechnung fuer den zweiten Parameter.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:19 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz