Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Mausklick global simulieren (https://www.delphipraxis.net/27656-mausklick-global-simulieren.html)

the_seed 13. Aug 2004 16:06


Mausklick global simulieren
 
hi, habe noch nicht sehr viele themen darüber gefunden?
wie kann ich einen mausklick simulieren (->global) ?
muss ich da ein mousehook inst. oder gibts da noch andre wege?

SirThornberry 13. Aug 2004 16:21

Re: Mausklick global simulieren
 
geht ganz einfach mit
Delphi-Quellcode:
  mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
  mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);

Robert Marquardt 13. Aug 2004 16:31

Re: Mausklick global simulieren
 
Das macht aber nur Sinn wenn das Programm nicht selbst im Vordergrund ist, da es sonst den Mausklick selber bekommt.
Entsprechend gibt es noch keybd_event bzw die neuere Funktion SendInput.

Tubos 13. Aug 2004 18:19

Re: Mausklick global simulieren
 
Ich habe mal einen C++-Code geschrieben, wo ich SendInput verwende (rauf und runter von linker und rechter maustaste).
Es ist nicht besonders einfach weil man ein kompliziertes Array füllen muss.
Hier der original-Code mit globalen Arrays zur Performancesteigerung:
Code:
#include <windows.h>
#include <winable.h> // bin mir nicht sicher ob man winable wirklich braucht oder ob das für etwas anderes war...ausprobieren...
INPUT runter,rauf, rechtsrunter, rechtsrauf; // mit runter und rauf ist die linke maustaste gemeint

void ldown(void); // linke maustaste runter
void lup(void); // linke maustaste rauf
void rdown(void); // rechte maustaste runter
void rup(void); // rechte maustaste rauf

...
...
...

// Beim Programmstart die Arrays mit Werten füllen:
   runter.mi.dx=0;
   runter.mi.dy=0;
   runter.mi.mouseData=0;
   runter.mi.dwFlags=MOUSEEVENTF_LEFTDOWN;
   runter.mi.dwExtraInfo=0;
   runter.mi.time=0;
   rauf.mi.dx=0;
   rauf.mi.dy=0;
   rauf.mi.mouseData=0;
   rauf.mi.dwFlags=MOUSEEVENTF_LEFTUP;
   rauf.mi.dwExtraInfo=0;
   rauf.mi.time=0;
   rechtsrunter.mi.dx=0;
   rechtsrunter.mi.dy=0;
   rechtsrunter.mi.mouseData=0;
   rechtsrunter.mi.dwFlags=MOUSEEVENTF_RIGHTDOWN;
   rechtsrunter.mi.dwExtraInfo=0;
   rechtsrunter.mi.time=0;
   rechtsrauf.mi.dx=0;
   rechtsrauf.mi.dy=0;
   rechtsrauf.mi.mouseData=0;
   rechtsrauf.mi.dwFlags=MOUSEEVENTF_RIGHTUP;
   rechtsrauf.mi.dwExtraInfo=0;
   rechtsrauf.mi.time=0;

...
...
...


// Da die Arrays bereits gefüllt sind, brauchen wir nur noch funktionen die SendInput aufrufen:

void ldown(void) // maustaste runter
{
   SendInput(1,&runter,sizeof(runter));
}

void lup(void) // maustaste rauf
{
   SendInput(1,&rauf,sizeof(rauf));
}

void rdown(void) // rechte maustaste runter
{
   SendInput(1,&rechtsrauf,sizeof(rechtsrauf));
}

void rup(void) // rechte maustaste rauf
{
   SendInput(1,&rechtsrunter,sizeof(rechtsrunter));
}
Getestet mit Visual C++ 6.0 Autorenversion.

Habe leider keine Zeit, den Code in Delphi zu übersetzen.
Dürfte nicht besonders schwer sein, vielleicht kann das ja ein anderer machen...oder ich ein wenig später...

Wenn du z.B. einen linken Mausklick simulieren willst, musst du nacheinander ldown und lup aufrufen.

Tubos

the_seed 13. Aug 2004 18:34

Re: Mausklick global simulieren
 
ich will ein programm schreiben dass im hintergrund läuft und in regelmässigne zeitabständen einen mausklick simuliert bei bestimmten koordinaten durchführt fenster nicht bestimmt.
braucge ich dazu nen hook oder ist das ohne möglich... der og. befehl funktioniert nicht bzw nur im eigenen fenster...

SirThornberry 13. Aug 2004 18:41

Re: Mausklick global simulieren
 
du brauchst dazu keinen hook!!!
Delphi-Quellcode:
mouse_event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, x, y, 0, 0);
funktioniert ohne

the_seed 13. Aug 2004 18:49

Re: Mausklick global simulieren
 
Zitat:

Zitat von SirThornberry
du brauchst dazu keinen hook!!!

das wollte ich ja wissen !!!
nur funktioniert die methode nicht wenn ich zb. nen mausklick simulieren will
x=52 y=726 koordinbaten des startbuttons bei ner auflösung von 1024x768 (bei mir)
tut sich gar nix...

SirThornberry 13. Aug 2004 18:53

Re: Mausklick global simulieren
 
führst du die Methode in einem OnClick von einem Button aus? Dann gehts nicht weil das mit den KlickMessages des Buttons vermicht wird. In meinem Trojaner den ich mal geschrieben hab funktioniert die Variante wunderbar

the_seed 13. Aug 2004 19:11

Re: Mausklick global simulieren
 
Zitat:

Zitat von SirThornberry
führst du die Methode in einem OnClick von einem Button aus? Dann gehts nicht weil das mit den KlickMessages des Buttons vermicht wird. In meinem Trojaner den ich mal geschrieben hab funktioniert die Variante wunderbar

nee hab nen timer benutzt... geht trotzdem nicht !

Robert Marquardt 13. Aug 2004 19:26

Re: Mausklick global simulieren
 
Zitat:

Zitat von SirThornberry
In meinem Trojaner den ich mal geschrieben hab funktioniert die Variante wunderbar

Erschiessen den Kerl! ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:20 Uhr.
Seite 1 von 2  1 2      

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