Autor Beitrag
Ebil
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: Sa 29.11.08 01:04 
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 user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am So 30.11.2008 um 19:47
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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):
www.c-plusplus.de/fo...var-t-is-165868.html
Ebil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: 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.

ausblenden 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
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 29.11.08 01:54 
Das kann auch nicht gehen, schau dir mal die Doku an, du versuchst x- und y-Koordinate als die beiden Parameter zu übergeben, das ist aber falsch.
msdn.microsoft.com/e...ms645607(VS.85).aspx
Ebil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: 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.
ausblenden 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

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: Sa 29.11.08 02:27 
Da krieg ich leider direkt nen fehler beim ausführen:
ausblenden 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


Zuletzt bearbeitet von Ebil am Sa 29.11.08 02:31, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19341
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.


Zuletzt bearbeitet von jaenicke am Sa 29.11.08 02:34, insgesamt 1-mal bearbeitet
Ebil Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 131



BeitragVerfasst: 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