Einzelnen Beitrag anzeigen

Saturos

Registriert seit: 15. Dez 2007
Ort: Altenburg
13 Beiträge
 
Delphi 7 Personal
 
#1

Tastendruck -> Mausklicks

  Alt 15. Dez 2007, 12:01
Hallo Delphipraktiker , ich habe folgendes vor:
Ich möchte ein Programm schreiben, welches bei Gedrückthalten einer Taste an der aktuellen Cursorposition im aktiven Fenster Mausklicks ausführt. Das soll später in einem Spiel Anwendung finden.

Hier der bisherige Code:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, ExtCtrls, StdCtrls, MMSystem, WinTypes, WinProcs;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    Beenden1: TMenuItem;
    Beenden2: TMenuItem;
    Hilfe1: TMenuItem;
    Controls1: TMenuItem;
    Panel1: TPanel;
    Button1: TButton;
    Image1: TImage;
    Timer1: TTimer;
    procedure Beenden2Click(Sender: TObject);
    procedure Controls1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  anaus:boolean;
  x,y,m:integer;
  curs:tpoint;


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 timer1.Enabled:=false;
 anaus:=false;
 image1.Picture.LoadFromFile('pics/rot.bmp');
end;

procedure TForm1.Beenden2Click(Sender: TObject);
begin
 Application.Terminate;
end;

procedure TForm1.Controls1Click(Sender: TObject);
var Msg:string;
begin
 Msg:='Durch Drücken des Enable/Disable-Buttons, wird das Programm aktiviert.'+#10#13+'Ist es aktiv, so werden durch Gedrückthalten'+#10#13+'der Taste "Ö" pro Sekunde 100 Mausklicks an der'+#10#13+'gegenwärtigen Zeigerposition ausgeführt. Ob das Programm'+#10#13+'aktiv ist, erkennt man an der gegenwärtigen Farbe der'+#10#13+'Signallampe neben dem Enable/Disable-Button- Rot=Inaktiv, Grün=Aktiv.';
 showmessage(msg);
end;

procedure TForm1.Button1Click(Sender: TObject); //Über diesen Button wird gesteuert, ob bei Tastendruck geklickt wird oder nicht
begin
 if anaus=false then begin
  anaus:=true;
  image1.Canvas.Refresh;
  image1.Picture.LoadFromFile('pics/grün.bmp')
 end
 else if anaus=true then begin
  anaus:=false;
  image1.Canvas.Refresh;
  image1.Picture.LoadFromFile('pics/rot.bmp')
 end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var i:integer;
begin
 for i:=1 to 10 do begin
  mouse_event(MOUSEEVENTF_LEFTDOWN, mouse.CursorPos.x, mouse.CursorPos.y, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, mouse.CursorPos.x, mouse.CursorPos.y, 0, 0)
 end;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
 if (Key = Ord('ö')) then begin
  m:=GetActiveWindow;
  GetCursorPos(curs);
  x:=Curs.x;
  y:=Curs.y;
   if anaus=true then
    timer1.Enabled:=true;
  end;
end;

end.
Ich habe schon mit Fensterhandles experimentiert, aber es scheitert, wie so oft schon daran, dass der Tastendruck (im Beispiel ö; auch andere getestet) von Delphi "wahrgenommen" wird .
Ich habe das Forum wirklich lange durchsucht, aber keine Lösung gefunden.
Konrad
Ich würde die Welt ändern, aber Gott rückt den Quellcode nicht raus.
  Mit Zitat antworten Zitat