![]() |
Tastendruck -> Mausklicks
Hallo Delphipraktiker :hi: , 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:
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 :wall: .
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 das Forum wirklich lange durchsucht, aber keine Lösung gefunden. :oops: |
Re: Tastendruck -> Mausklicks
Zitat:
|
Re: Tastendruck -> Mausklicks
Ja, wobei es auch manchmal ohne dessen Aktivierung ging. Wahrgenommen bedeutet hier, dass selbst dann, wenn ich das Prog aktiv habe und zum Beispiel ein anderes Bild auf Tastendruck einfügen lasse (testweise, anstelle der Klicks), Delphi nicht auf das Drücken der Taste reagiert.
|
Re: Tastendruck -> Mausklicks
Du könntest alternativ auch einen globalen
![]() |
Re: Tastendruck -> Mausklicks
Hi,
wenn Dein Programm die Eingaben abfangen soll, dann bleiben Dir nur [dp]Hotkey[dp]s und ![]() Im OnKeyPress / OnKeyDown / OnKeyUp kommen die Buchstaben nur an, wenn Dein Programm den Fokus besitzt. |
Re: Tastendruck -> Mausklicks
Gut, das hilft mir dann später weiter, aber momentan ist es noch so, dass nichteinmal dann, wenn mein Prog den "Fokus" hat die Buchstaben durchkommen.
Falls das hilft, habe ich ![]() |
Re: Tastendruck -> Mausklicks
Danke :thumb: Dass es auf ö reagiert, hab ich zwar nicht hinbekommen, aber mit "o" geht es.
|
Re: Tastendruck -> Mausklicks
Zitat:
![]()
Delphi-Quellcode:
für VK_F1 einsetzen muss, um das ö als hotkey zu bekommen. In der Delphi-Hilfe stand unter Tastencodes etwas von Key_Odiaeresis für ö, aber das geht nicht. :gruebel:
...RegisterHotKey(Self.Handle, HotKeyID, MOD_SHIFT, VK_F1); ...
|
Re: Tastendruck -> Mausklicks
Hi,
bin mir nicht ganz sicher, aber es dürfte das hier sein:
Delphi-Quellcode:
Hab den Aufruf jetzt nicht ganz im Kopf, falls es nicht klappt, müsstest mal in der Delphi-Hilfe bzw. im MSDN schauen, wenn es ein direkter API-Aufruf ist.
RegisterHotKey(Self.Handle, HotKeyID, MOD_SHIFT, Ord('ö'));
|
Re: Tastendruck -> Mausklicks
Versuch es mal mit Ord('Ö')
[edit] Manuel *grmpf* :? [/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz