Hallo Zusammen,
und zwar komm ich einfach bei folgendem Beispiel nicht weiter:
Ich in einem fremden Fenster eine Mausbewegung und einen Mausklick simulieren.
Folgendes: Das ganze muss in einem Fenster, dass im Hintergrund ist, lauffähig sein und soll die eigene Maus nicht bewegen sondern das ganze nur simulieren.
Die Mausbewegung Simulation funktioniert auch soweit, nur kommt der Klick nicht an der richtigen Stelle an 🙁
Ich sehe, dass Bewegung simuliert wurde, da mein Fremdprogramm die Farbe bei einem mousemove wechselt. Aber es zeigt keinen klick an.
Wenn ich nun meinen "richtigen" desktop mauszeiger über das programm fenster bewege (auch wenn es dabei im hintergrund ist) und ein MausKlick simuliert wird, zeigt mein fremdprogramm das an.
Ich hoffe man kann verstehen was ich meine...
Anbei der Beispiel code
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int SendMessage(IntPtr hwnd, uint wMsg,
IntPtr wParam,
IntPtr lParam);
private const uint WM_RBUTTONDOWN = 0x0204;
private const uint WM_RBUTTONUP = 0x0205;
private const uint WM_MOUSEMOVE = 0x0200;
void Simulate()
{
SendMessage(handle, WM_MOUSEMOVE, (IntPtr)0, MakeLParam(x,y));
Thread.Sleep(10);
SendMessage(wowhandle, WM_LBUTTONDOWN, 0, 0);
SendMessage(wowhandle, WM_LBUTTONUP, 0, 0);
}
IntPtr MakeLParam(int LoWord, int HiWord)
{
return (IntPtr) ((HiWord << 16) | (LoWord & 0xffff));
}
Danke euch <3 😉
Vielleicht reicht das schon als Antwort:
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
Danke für die Antwort, aber leider hilft mir das nicht weiter.
Die Funktion aus dem oben genannte Thread bewegt meinen eigentlichen Desktop Mauszeiger.
Ich möchte jedoch nur einen Click an einer anderen Stelle simulieren ohne den Zeiger zu bewegen.
Ich kenn auch ein Programm, dass eben solche Click simulieren kann und in C# net 2.0 geschrieben ist.
Nur leider habe ich zum dem Programm keinen Sourcecode.
Dann hast du mind. 2 Möglichkeiten:
oder nimm folgenden Pseudo-Code.
invoke SetCursorPos,x,y
invoke WindowFromPoint,x,y; // point= x,y koordinaten
mov hWnd,eax
invoke SendMessage, hWnd,WM_LBUTTONDOWN,0,0
invoke SendMessage, hWnd,WM_LBUTTONUP,0,0
Die Signaturen kannst Du aus Pinvoke.net entnehmen.
Ich hoffe das hilft, wenn nicht, kann ich dir auch gerne ein Beispiel schicken.
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.
Die Signaturen kannst Du aus Pinvoke.net entnehmen.
Ich hoffe das hilft, wenn nicht, kann ich dir auch gerne ein Beispiel schicken.
Schickst du es mir liebguck
Mfg Hajoseb
**"Zufall ist das Pseudonym Gottes, wenn er nicht selbst unterschreiben will.” **
Anatole France
Nun das Problem ist wie gesagt, dass der Click auch im Hintergrund ausführbar sein sollte.
Bedeutet ich bin grade im Internet am surfen und möchte in ein Fenster klicken, dass sich hinter meinem Browserfenster befindet.
Ich weis, dass es möglich ist, da ich bereits ein Programm mit dieses Fähigkeit gesehen habe.
Mit der Methode die du mir vorgeschlagen hast, geht der Klick aber ins Browserfenster 🙁
Ja WindowFromPoint ermittelt das Fenster an der aktuellen Mausposition.
Dann müsstest Du also nur die entsprechende SendMessage an das richtige Fenster senden.
EDIT: Beschreib doch noch mal genauer was der Zweck des Programms ist. Warum du das genau so haben willst, ich glaube ich sehe in diesem Fall sonst die Gefahr, dass noch mehr Vorschläge geschickt wedern, die einfach nicht das machen was du gerne erreichen möchtest.
Nach dem nochmaligen Durchlesen verstehe ich es so:
Der Benutzer (oder die Simulation?! was denn nun) klickt ein Fenster an. Das aber eigentlich im Vordergrund liegt. Jetzt wird der Klick abgefangen und geht NICHT(!) (oder zusätzlich?!)i ns eigentlich geklickte Fenster sondern in das (oder mehrere Fenster?!) direkt dahinter, die sich überlagern?!
Wie meinst Du das jetzt genau?
Wenn das geklärt ist, können wir Dir sicher helfen, deine Funktion so hinzubekommen, wie Du sie gerne haben möchtest.
Seit der Erkenntnis, dass der Mensch eine Nachricht ist, erweist sich seine körperliche Existenzform als überflüssig.