AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Tastendruck -> Mausklicks

Ein Thema von Saturos · begonnen am 15. Dez 2007 · letzter Beitrag vom 16. Dez 2007
Antwort Antwort
Seite 1 von 4  1 23     Letzte » 
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
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Tastendruck -> Mausklicks

  Alt 15. Dez 2007, 12:21
Zitat von Saturos:
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 .
Was genau meinst du mit "wahrgenommen" wird? Hast du KeyPreview von deiner Form an (im Objektinspektor einstellbar)?
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Saturos

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

Re: Tastendruck -> Mausklicks

  Alt 15. Dez 2007, 15:41
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.
Konrad
Ich würde die Welt ändern, aber Gott rückt den Quellcode nicht raus.
  Mit Zitat antworten Zitat
Benutzerbild von patti
patti

Registriert seit: 20. Okt 2004
Ort: Mittelfranken
665 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Tastendruck -> Mausklicks

  Alt 15. Dez 2007, 15:48
Du könntest alternativ auch einen globalen Hier im Forum suchenHotkey definieren, bei dem du deinen Tastendruck simulierst. Der gilt dann systemweit und sollte immer funktionieren!
Patrick Kreutzer
[Informatik-Student im 4. Semester]
http://www.patti-k.de/
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Tastendruck -> Mausklicks

  Alt 15. Dez 2007, 15:51
Hi,

wenn Dein Programm die Eingaben abfangen soll, dann bleiben Dir nur [dp]Hotkey[dp]s und Hier im Forum suchenHooks übrig.

Im OnKeyPress / OnKeyDown / OnKeyUp kommen die Buchstaben nur an, wenn Dein Programm den Fokus besitzt.
  Mit Zitat antworten Zitat
Saturos

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

Re: Tastendruck -> Mausklicks

  Alt 15. Dez 2007, 16:01
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 Hier mal das Prog hochgeladen.
Konrad
Ich würde die Welt ändern, aber Gott rückt den Quellcode nicht raus.
  Mit Zitat antworten Zitat
Saturos

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

Re: Tastendruck -> Mausklicks

  Alt 15. Dez 2007, 16:16
Danke Dass es auf ö reagiert, hab ich zwar nicht hinbekommen, aber mit "o" geht es.
Konrad
Ich würde die Welt ändern, aber Gott rückt den Quellcode nicht raus.
  Mit Zitat antworten Zitat
Saturos

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

Re: Tastendruck -> Mausklicks

  Alt 15. Dez 2007, 18:48
Zitat von patti:
Du könntest alternativ auch einen globalen Hier im Forum suchenHotkey definieren, bei dem du deinen Tastendruck simulierst. Der gilt dann systemweit und sollte immer funktionieren!
Ich habe nun dazu entschlossen es mit den Hotkeys zu versuchen und gemerkt, dass ich die Keydownprocedur gar nich brauche
Hot-Keys systemweit setzen und verwenden <- Dort wurde im Beispiel Strg+F1 als Hotkey verwendet, aber für meine Zwecke ist ö nunmal ganz gut. Meine Frage ist nun, was ich in der Zeile:
...RegisterHotKey(Self.Handle, HotKeyID, MOD_SHIFT, VK_F1); ... 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.
Konrad
Ich würde die Welt ändern, aber Gott rückt den Quellcode nicht raus.
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#9

Re: Tastendruck -> Mausklicks

  Alt 15. Dez 2007, 18:49
Hi,

bin mir nicht ganz sicher, aber es dürfte das hier sein:

RegisterHotKey(Self.Handle, HotKeyID, MOD_SHIFT, Ord('ö')); 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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Tastendruck -> Mausklicks

  Alt 15. Dez 2007, 18:49
Versuch es mal mit Ord('Ö')

[edit] Manuel *grmpf* [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:43 Uhr.
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