Entwickler-Ecke

Windows API - Mausclicks Posten


Comp-Freak - Sa 21.04.07 04:14
Titel: Mausclicks Posten
Wie poste ich ein mouse click auf einer handle oder einem fenster?
Ich will nicht das das fenster offen und ganz vorne ist sondern irgendwo.
Kann man auch anderes posten?
Danke :)


Moderiert von user profile iconNarses: Topic aus Sonstiges (Delphi) verschoben am Di 07.07.2009 um 00:23


elundril - Sa 21.04.07 10:13

hääää?!?

lg el


GTA-Place - Sa 21.04.07 10:58

@elundril: Wenn du die Frage nicht verstehst, musst du auch nicht posten.

@CompFreak: Sende die Mausklicks per PostMessage an das entsprechende Handle.

PostMessage Mouse Down [http://www.google.com/codesearch?hl=en&lr=&q=lang:%22pascal%22+postmessage+mouse+down]


elundril - Sa 21.04.07 11:12

warum darfs ich nicht posten?? vielleicht will ich ja was lernen und das kann man nun mal schwer wenn man nicht einmal die frage versteht!!! :evil:

lg el


Comp-Freak - Sa 21.04.07 11:37

@ Elundril
ich mochte ein mausclick virtuell erzeugen ohne das ich die (reale)maus bewege.
ich mochet aber nicht setcursorpos(x,y) benuezten weil es im hintergruind laufe sollte.

@ GTA-Place
danke. hab noch ein bischen gegoogelt unter postmeassage() und hab noch sehr viel anderes schoenes zeug gefunden :)

Fals ihr euch wundert gehts so:

Delphi-Quelltext
1:
2:
PostMessage(HWND  , WM_LBUTTONDOWN, 0, MakeLParam(Pos.X, Pos.Y)); 
Procedure  (Handle, Welcher Button, 0, Position                 ;

Nochmahl danke :)

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


elundril - Sa 21.04.07 11:39

ahhh! jetzt versteh ich! danke!

lg el


Rupert - Sa 07.02.09 20:19

Hi miteinander!

Also ich krieg´s nicht auf die Reihe.
Ich trasportiere die Maus mit

Delphi-Quelltext
1:
setcursorpos(365,674);                    

auf eine Stelle am Monitor, wo das Fenster Form1 geöffnet ist und will, dass nun ein Mausclick stattfindet.

Delphi-Quelltext
1:
2:
3:
    WindowHandle := FindWindow(nil, PChar('Form1'));
    if WindowHandle <> 0 then
      PostMessage(WindowHandle , WM_LBUTTONDOWN, 00);

Test mit einer anderen Funktion.
Ich habe schon getestet, ob die Funktion PostMessage ausgeführt wird

Delphi-Quelltext
1:
PostMessage(WindowHandle , WM_SYSCOMMAND,SC_MINIMIZE,0))                    

Beim Test wurde das Fenster minimiert.
Merkwürdig ist dabei, dass dieser Vorgang nicht wiederholbar ist, wenn die Funktion einmal ausgeführt wurde. (Form1 wieder maximieren und den Vorgang wiederholen) - nix passiert mehr.

??????

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


jaenicke - Sa 07.02.09 20:20

Du vergisst die Maus wieder loszulassen (WM_LBUTTONUP). ;-)


Delete - Sa 07.02.09 20:23

Es könnte evtl. funktionieren, wenn man die Maustaste auch virtuell wieder loslässt. Wobei ich nicht ganz verstehe, wieso hier die Kombination von SetCursorPos und PostMessage verwendet wird. Wenn man schon den Mauscursor verschiebt, kann man auch gleich mouse_event benutzen.


Rupert - Mo 09.02.09 14:41

Danke @DeddyH & jaenicke!

Das loslassen der Maus brachte nichts, aber die Frage, wozu überhaupt Postmessage zu verwenden war überzeugend. Ich verwende nun:

Delphi-Quelltext
1:
2:
3:
    SetCursorPos (-1000,300);
    mouse_event(MouseEventF_leftDown,0,0,0,0);
    mouse_event(MouseEventF_leftup,0,0,0,0);

SetCursorPos muss ich davor stellen, weil das mouse_event keine negativen Koordinaten annimmt.


FragSalat - Sa 04.07.09 22:08

kannst du ma pls die methode MakeLParm() posten pls


jaenicke - Sa 04.07.09 22:12

user profile iconFragSalat hat folgendes geschrieben Zum zitierten Posting springen:
kannst du ma pls die methode MakeLParm() posten pls
Wie meinst du das? Wenn du die richtig schreibst (MakeLParam), dann ist die in Delphi enthalten (in der Unit Windows).

In deren Quelltext kannst du dort ja schauen, wenn es dich interessiert.


FragSalat - Sa 04.07.09 23:27

aso hatte gehofft das es dazu ne methode gibt die ich mir in c# umschreiben kann


jaenicke - Sa 04.07.09 23:55

Hmm, ich kann es jetzt schlecht testen, aber wie wäre es so?

C#-Quelltext
1:
2:
3:
4:
private long MakeLParamMacro(ushort lo, ushort hi)
{
    return lo | hi << 16
}


FragSalat - Mo 06.07.09 23:28

aber da muss ich doch keinen point angeben oder weil bei dem oben wird ja Pos.X/Y verlangt (Point Pos) also nen point
denn ich habs jetzt so


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
static uint WM_LBUTTONDOWN = 0x201;
        static uint WM_LBUTTONUP = 0x202;
        static uint MK_LBUTTON = 0x1;
        static uint WM_MOUSEMOVE = 0x200;


        [DllImport("user32.dll", SetLastError = true)]
        static extern bool PostMessage( IntPtr hWnd, uint msg, uint wParam,
            int lParam );

        public static void SendClick(IntPtr HWND, int x, int y)
        {

            PostMessage(HWND, WM_MOUSEMOVE, 0, MakeLParam(x, y));
            PostMessage(HWND, WM_LBUTTONDOWN, MK_LBUTTON, MakeLParam(x, y));
            PostMessage(HWND, WM_LBUTTONUP, MK_LBUTTON, MakeLParam(x, y));
        }

        private static int MakeLParam(int LoWord, int HiWord)
        {
             return (int) ((HiWord << 16) | (LoWord & 0xffff));
        } 


            hWnd = WinApi.FindWindow(listBox1.SelectedItem.ToString());
            WinApi.SendClick(hWnd, 1219157);


aber das funzt nit weiß wer wieso??


jaenicke - Mo 06.07.09 23:31

Dazu solltest du lieber eine entsprechende Frage im C#-Teil des Forums aufmachen. ;-)


Popov - Di 07.07.09 00:15

user profile iconComp-Freak hat folgendes geschrieben Zum zitierten Posting springen:
Wie poste ich ein mouse click auf einer handle oder einem fenster?
Ich will nicht das das fenster offen und ganz vorne ist sondern irgendwo.
Kann man auch anderes posten?
Danke :)


Suchst du sowas?

Siehe Anhang:


FragSalat - Di 07.07.09 22:22

was macht dieses prog????
und es hilft 0%


Popov - Mi 08.07.09 00:38

user profile iconFragSalat hat folgendes geschrieben Zum zitierten Posting springen:
was macht dieses prog????
und es hilft 0%


Also du solltest dich schon entscheiden was du willst. Entweder willst du fragen was das Programm macht, oder du weißt es und bist der Meinung, daß es 0% hilft. Was jetzt? Leute die nicht wissen was sie wollen, nerven nur. Also, denk noch mal in Ruhe nach was du mir sagen willst.