AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mausklick global simulieren

Ein Thema von the_seed · begonnen am 13. Aug 2004 · letzter Beitrag vom 14. Aug 2004
Antwort Antwort
Seite 2 von 2     12   
Robert Marquardt
(Gast)

n/a Beiträge
 
#11

Re: Mausklick global simulieren

  Alt 13. Aug 2004, 18:29
Ich habe auch mal eine Tray-Applikation geschrieben die mit keybd_event und mouse_event Tasten generiert.
Funktioniert prima. http://www.claw.com.au zeigt das Geraet dazu (damit klar ist das das kein Trojaner war)
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#12

Re: Mausklick global simulieren

  Alt 13. Aug 2004, 19:12
Das Problem ist, dass die Funktion keine normalen Bildschirmkoordinaten erwartet, sondern den Bildschirm in x- und y-Richtung in 65535 Einheiten unterteilt:
Zitat von MSDN:
If MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface, (65535,65535) maps onto the lower-right corner.
Folgendes funktioniert:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 Timer1.Enabled := True;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
Var x, y: Integer;
begin
 Timer1.Enabled := False;
 // gewünschte Position in Bildschirmkoordinaten
 x := 50;
 y := 760;
 // noch umrechnen
 x := 65535 Div Screen.Width*x;
 y := 65535 Div Screen.Height*y;
 // Maus bewegen und klicken, nur klicken geht nicht...
 mouse_event(MOUSEEVENTF_MOVE Or MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_ABSOLUTE,x,y,0,0);
 mouse_event(MOUSEEVENTF_MOVE Or MOUSEEVENTF_LEFTUP Or MOUSEEVENTF_ABSOLUTE,x,y,0,0);
end;
Gruß, teebee
  Mit Zitat antworten Zitat
Benutzerbild von nailor
nailor

Registriert seit: 12. Dez 2002
Ort: Karlsruhe
1.989 Beiträge
 
#13

Re: Mausklick global simulieren

  Alt 13. Aug 2004, 19:15
nee, ich hab auch schon damit gearbeitet und kann mich an sowas nicht erinnern. was absolute hieß, war auch absolut!

edit: scheinst recht zu haben. aber irgendwie kann ich mich an was anderes erinnern... ??
Michael N.
http://nailor.devzero.de/code/sharpmath/testing/ --- Tests, Feedback, Anregungen, ... aller Art sehr willkommen!
::: don't try so hard - it'll happen for a reason :::
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#14

Re: Mausklick global simulieren

  Alt 14. Aug 2004, 05:33
Vom absolute Modus sollte man die Finger lassen. Windows mag solche Geraete nicht sonderlich.
Dein Fehler ist mit der Funktion auch die Position des Cursors setzen zu wollen.
Dafuer ist die Win32-Funktion SetCursorPos weit besser geeignet.

Es ist ein haeufiger Fehler Maus und Cursor gleichzusetzen. Die Maus ist ein Eingabegeraet waehrend
der Cursor ein Konstrukt des Betriebssystems ist. Die Daten der Maus dienen zur Steuerung des Cursors.
mouse_event ist das API-Aequivalent einer Maus. Die Cursorposition aber ist fuer die Maus irrelevant.
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#15

Re: Mausklick global simulieren

  Alt 14. Aug 2004, 10:31
Zitat von Robert Marquardt:
Vom absolute Modus sollte man die Finger lassen. Windows mag solche Geraete nicht sonderlich.
Und wieso? Mein Beispiel funktioniert doch... Lässt man das Flag weg, wird doch die zum letzten Klick relative Position gewählt.
Zitat von Robert Marquardt:
Dein Fehler ist mit der Funktion auch die Position des Cursors setzen zu wollen.
...
Die Cursorposition aber ist fuer die Maus irrelevant.
Anscheinend ja doch nicht..? Wenn ich nur das Klicken simulieren will, ohne zu bewegen, geht das Startmenü jedenfalls nicht auf. Wie ginge es denn, ohne die Position zu verändern?

Gruß, teebee
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#16

Re: Mausklick global simulieren

  Alt 14. Aug 2004, 17:02
Zitat von teebee:
Anscheinend ja doch nicht..? Wenn ich nur das Klicken simulieren will, ohne zu bewegen, geht das Startmenü jedenfalls nicht auf. Wie ginge es denn, ohne die Position zu verändern?
Gruß, teebee
Ich habe nicht gesagt das du die Position des Cursors nicht setzen sollst, sondern das du es nicht ueber die Maus machen sollst. Maus und Cursor sind nicht das selbe. Windows hat den einen oder anderen Fehler wenn es absolute Mauseingaben verarbeitet, besonders wenn auch relative Mauseingaben vorhanden sind.

Setze mit SetCursorPos die Position des Cursors und generiere mit mouse_event-Aufrufen einen Klick.
  Mit Zitat antworten Zitat
teebee

Registriert seit: 17. Jan 2003
Ort: Köln
460 Beiträge
 
Delphi 6 Professional
 
#17

Re: Mausklick global simulieren

  Alt 14. Aug 2004, 17:50
Zitat von Robert Marquardt:
Setze mit SetCursorPos die Position des Cursors und generiere mit mouse_event-Aufrufen einen Klick.
Is recht. Geht eh einfacher
Gruß, teebee
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 00:49 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