Einzelnen Beitrag anzeigen

kerkerst

Registriert seit: 21. Feb 2007
Ort: Stodo
4 Beiträge
 
#1

Emulierter Mausklick bugt

  Alt 3. Sep 2010, 10:32
Hey,
Ich versuche einen Mausklick zu emulieren, dafür gibts ja Mouse_Events. Die funktionieren auch Prima in einer einzelnen Anwendung (meine Testanwendung um sie zu testen), die sonst nix tut. Dazu lasse ich mir n Screenshot generieren, in ein Image laden, und wenn ich nu iwo aufs Image klicke, springt der Mauszeiger auch dorthin und klickt.
Das habe ich dann auch in ein weiteres Programm eingebaut, einen Remote Desktop Viewer. Dort tut sich allerdings leider nix. Wenn ich das Springen und Klicken des Mauszeigers steppe (F7) funktioniert es. Aber sobald ich es normal durchlaufen lasse tut sich nix. Nur wenn ich das Programm auf dem zu betrachtenden PC als Admin starte funktioniert es ganz normal.
Delphi-Quellcode:
        
SetCursorPos(x,y);
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
und
Delphi-Quellcode:
  Inp.Itype := INPUT_MOUSE;
  Inp.mi.dwFlags := MOUSEEVENTF_LEFTDOWN or MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE;
  Inp.mi.dx := round(xPos * (65535 / Screen.Width));
  Inp.mi.dy := round(yPos * (65535 / Screen.Height));
  Inp.mi.time := 0;
  Inp.mi.dwExtraInfo := 0;
  SendInput(1, Inp, SizeOf(Inp));

  Inp.Itype := INPUT_MOUSE;
  Inp.mi.dwFlags := MOUSEEVENTF_LEFTUP or MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_MOVE;
  Inp.mi.dx := round(xPos * (65535 / Screen.Width));
  Inp.mi.dy := round(yPos * (65535 / Screen.Height));
  Inp.mi.time := 0;
  Inp.mi.dwExtraInfo := 0;
  SendInput(1, Inp, SizeOf(Inp));
habe ich bisher dafür probiert. Auch ProcessMessage für 20-500ms zwischen SetCursorPos und den Mouse_events haben nicht geholfen.
Vielleicht kann mir ja jemand helfen oder hat eine andere Alternative die ich dafür benutzen kann.
Ich benutze D7 / Win7. Auf Vista gibs jedoch das selbe Verhalten.

mfG
Stephan
  Mit Zitat antworten Zitat