AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Eingaben eines andern Programms emulieren?
Thema durchsuchen
Ansicht
Themen-Optionen

Eingaben eines andern Programms emulieren?

Ein Thema von Kedariodakon · begonnen am 11. Okt 2005 · letzter Beitrag vom 11. Okt 2005
Antwort Antwort
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#1

Eingaben eines andern Programms emulieren?

  Alt 11. Okt 2005, 16:09
Ich möchte einen Maustastendruck (rechts/links) an ein Spiel/Programm senden, möglichst ohne das sich die Mausposition ändert, ist dies möglich? (WindowsMessages)(auch bei DirectX?)
Im nächsten Schritt sollen auch Tastatureingaben gesendet werden.

Im nächsten Schritt sollen Tastatureingaben abgfangen werden.

Hat jemand schonmal sowas ähnliches gemacht und einen Ansatzpunkt für mich?


Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von Rastaman
Rastaman

Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
 
Turbo C++
 
#2

Re: Eingaben eines andern Programms emulieren?

  Alt 11. Okt 2005, 16:41
Vielleicht mit dieser Funktion aus der MSN.
Code:
VOID mouse_event(          DWORD dwFlags,
    DWORD dx,
    DWORD dy,
    DWORD dwData,
    ULONG_PTR dwExtraInfo
);
Würds so versuchen:
Code:
var
  x, y: Integer;
begin
  x := Mouse.CursorPos.X;
  y := Mouse.CursorPos.Y;
 
  Mouse_Event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
  Mouse_Event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
end;
Chuck Norris has counted to infinity ... twice!
  Mit Zitat antworten Zitat
raffo

Registriert seit: 15. Aug 2005
79 Beiträge
 
#3

Re: Eingaben eines andern Programms emulieren?

  Alt 11. Okt 2005, 16:43
Ich hab sowas noch nicht gemacht (aber immer dran gedacht...)

Ich glaube, Du musst zunächst ein HANDLE auf die Anwendung kriegen: http://www.dsdt.info/tipps/?id=633

Die Maus läßt sich abfragen über:

Delphi-Quellcode:
Label1.Caption := IntToStr(Mouse.CursorPos.X);
Label2.Caption := IntToStr(Mouse.CursorPos.Y);
Position setzen über:

Mouse.CursorPos := Point(200, 100); Einen Mausklick simuliert (jedenfalls in der eigenen Anwendung) etwa so:

Button1.Perform(WM_LBUTTONDOWN,0,0); Daher nehme ich an, das man mit dem HANDLE auch eine Sendmessage Botschaft schicken kann.

P.S. ich glaub kaum, das jenes auch über DirectX läuft (dafür ist doch DirectX geschaffen worden, das es schnell geht und der ganze Windows Ballast beiseite gelegt wird) - Aber alles nur Theorie...
Ralf Ringshausen
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Eingaben eines andern Programms emulieren?

  Alt 11. Okt 2005, 17:27
Ok ich erklärs nochmal besser ^^
Wenn dann handelt es sich um eine DirectX Anwendung...
Soweit ich weiß, verarbeiten DirectX Anwendungen Eingaben nicht über Windowsmessages... Liege ich da korrekt?

1. Nun is die Frage wie "sende" ich dem nun Eingaben (Tastatur/Maus) ???
Das ich die Maus bewegen kann, die Position abfragen und drücken kann ist mir schon bekannt, aber ev. werden die ja für DirectX - Anwendungen ignoriert, bzw. sind zu langsam, daher suche ich nach mehreren Möglichkeiten!

Auch wenn will ich die Maus nicht von X nach Y bewegen, den Knopfdrücken und dann nach X zurückbewegen, denn das würde ja in z.b. Spielen für unschöne Effekte sorgen!

2. Wo Hooke ich solche Eingaben? Gerade wieder im Bezug auf DirectX! Reicht es da, wenn ich die Windowsmessages nehm oder muß ich da wieder ganz anders ansetzen? Und das wichtigste, wie verstecke ich solche Aktionen vor dem Programm?

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Eingaben eines andern Programms emulieren?

  Alt 11. Okt 2005, 17:59
@Kedario...: Die Lösung wurde doch schon gepostet (ohne Handle und hat damals auch bei GTA-ViceCity funktioniert)
Zitat:
Delphi-Quellcode:
Mouse_Event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
Mouse_Event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
@raffo: [OT]
folgendes ist ineffizient.
Zitat:
Delphi-Quellcode:
Label1.Caption := IntToStr(Mouse.CursorPos.X);
Label2.Caption := IntToStr(Mouse.CursorPos.Y);
Denn bei Mouse.CursorPos wird intern GetCursorPos aufgerufen und dann davon das X zurück gegeben.
Du rufst also in dem Fall 2 mal die ApiFunktion GetCursorPos auf (wenn auch indirekt).
Besser ist es dann so
Delphi-Quellcode:
var LPoint: TPoint;
begin
  GetCursorPos(LPoint);
  Label1.Caption := IntToStr(LPoint.X);
  Label2.Caption := IntToStr(LPoint.Y);
end;
oder so (um beim Mouseobject und der Objectorientierung zu bleiben
Delphi-Quellcode:
var LPoint: TPoint;
begin
  LPoint := Mouse.CursorPos;
  Label1.Caption := IntToStr(LPoint.X);
  Label2.Caption := IntToStr(LPoint.Y);
end;
[/OT]
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Eingaben eines andern Programms emulieren?

  Alt 11. Okt 2005, 18:03
Ich glaub dir, dass das geht, die Frage ist nur, wie performant die sache ist ^^
Wie gesagt, suche nach vielen Möglichkeiten, wäre ja mal interessant wie das nun wirklich in Spielen gehändelt wird ^^

Auch gehts nicht nur um die Maus, sondern auch um die Tastatur ^^
Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Eingaben eines andern Programms emulieren?

  Alt 11. Okt 2005, 18:05
für Tastatureingaben kannst du "keybd_event" verwenden. Auch dafür braucht man kein Handle
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:12 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