Entwickler-Ecke
Windows API - Sendmessage -> fenster wird weiss
Ebil - Sa 29.11.08 01:04
Titel: Sendmessage -> fenster wird weiss
Hi Leute,
Ich habe ein problem, ich will ein mausklick an ein fenster simulieren und mache das einfahc mit:
SendMessage(handle, MOUSEEVENTF_LEFTDOWN, 0, 0);
(PostMessage auch schon probiert).
Leider wird (egal bei welchem fenster ich das mache) Das Fenster einfach weiss! Wenns in einem ordner ist, muss ich den explorer beenden und neu starten...
Woran liegt das? Mehr code als das ist noch garnicht vorhanden...
Ebil
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 30.11.2008 um 19:47
jaenicke - Sa 29.11.08 01:48
Naja, du drückst du Maustaste nur nach unten, und danach wartet das Programm bis du sie wieder loslässt. Das passiert bei dir aber ja nicht, wenn du nur diese Zeile hast.
Ein paar Beispiele siehst du hier (ist zwar C++, aber das ist ja egal):
http://www.c-plusplus.de/forum/viewtopic-var-t-is-165868.html
Ebil - Sa 29.11.08 01:52
Naja habs übersehen, hab doch die 2 zeilen ;P.
Hab schon einiges gelesen, das fenster wird jetzt, warum auch immer nichtmehr weiss (vllt hatte mein PC probs ka), aber es funktioniert trozdem nichts.
Delphi-Quelltext
1: 2: 3:
| GetCursorPos(p); SendMessage(h, WM_LBUTTONDOWN,p.X ,p.Y); SendMessage(h, WM_LBUTTONUP,p.X, p.Y); |
Fenster wird auch gefunden (habs sogar im programmfenster ausprobiert, geht nicht).
Ebil
Ebil - Sa 29.11.08 02:02
Ich hab mir das schon nen paar mal durchgelesen, hab sowas in der richtung aber noch nie gemacht und komm damit nicht wirklich klar.
Delphi-Quelltext
1: 2: 3:
| sendMessage(hand, WM_LButtonDown, 0, MakeLParam(p.X, p.Y)); SendMessage(hand, WM_LButtonUp, 0, MakeLParam(p.X, p.Y)); |
Das geht ja leider auch nicht :/
Hatte auch schon
Delphi-Quelltext
1: 2: 3:
| sendMessage(hand, WM_LButtonDown, MK_LBUTTON, MakeLParam(p.X, p.Y)); SendMessage(hand, WM_LButtonUp, MK_LBUTTON, MakeLParam(p.X, p.Y)); |
Langsam weiss ich nicht mehr~
Ebil
jaenicke - Sa 29.11.08 02:11
Hast du dir denn mal den ersten Link angeschaut? Dort steht auch, dass man SendMessage eher nicht verwenden sollte. Und dort findest du ja auch komplette Beispiele, die praktisch 1:1 in Delphi umsetzbar sind.
Ebil - Sa 29.11.08 02:27
Da krieg ich leider direkt nen fehler beim ausführen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| klick.Itype := INPUT_MOUSE; klick.mi.dx := p.X; klick.mi.dy := p.Y; klick.mi.mouseData := 0; klick.mi.time := 0; klick.mi.dwExtraInfo := 0; klick.mi.dwFlags := MOUSEEVENTF_LEFTDOWN; SendInput(1, klick^, sizeof(klick^)); klick.mi.dwFlags := MOUSEEVENTF_LEFTUP; SendInput(1, klick^, sizeof(klick^)); |
(Hab auch noch nie was mit "^" dingern gemacht, weiss nichma warums dahin muss, habs nur mal iwo gesehn...)
Bei den werten wo 0 steht bin ich mir nicht sicher, in c++ stand dort 0L, keine ahnung was da also genau hinmuss.
Die fehlermeldung:
Erste Gelegenheit für Exception bei $7C812A7B. Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 00468E9E in Modul 'Project1.exe'. Schreiben von Adresse 00000000'. Prozess Project1.exe (5148)
Muss ich die variable (vom typ PInput) irgendwie inizialisieren?
Ebil
//Edit:
Ok muss wohl vom typ TInput sein, und dann können auch die ^ weg.
allerdings funktioniert das mit den koordinaten nicht ganz, die maus springt auf 0|0.
Ebil
jaenicke - Sa 29.11.08 02:31
Ich muss mal nachschauen, aber eigentlich hätte ich den Typ TInput statt des Zeigertyps PInput erwartet. PInput ist nur ein Zeiger auf eine Variable vom Typ TInput.
Und ohne die ^, weil es ja dann kein Zeiger ist.
Ebil - Sa 29.11.08 02:33
Joa wie im edit geschrieben hab ichs gemerkt.
hab nur pInput genommen weil in der funktion "pInputs" stand...
Das mit den maus bewegen geht nun auch, hatte noch MOUSEEVENTF_MOVE bei den dwFlags.
Danke für deine hilfe :), nun geht alles, für den anfang jedenfalls ^^.
Ebil
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!