Entwickler-Ecke
Basistechnologien - Simulieren von Mauseingaben
Overspeed - Mi 09.03.11 21:00
Titel: Simulieren von Mauseingaben
Hallo ich bin NeuCoder und komme einfach nicht weiter...
wie im Code beschrieben möchte ich in meiner Windows Form Anwendung
nach dem Kompilieren durch
die Taste F9 auf der Tastatur drücken und loslassen um damit Links Klicken der Maus aktivieren...
Desweiteren Suche ich eine Methode um das Maus klicken wieder zu stoppen....
C#-Quelltext
1: 2: 3: 4: 5:
| void form_KeyDown(object sender, KeyEventArgs e) { if (e.KeyData == Keys.F9) this.( ... ); } |
Sorry bin relativ neu...
Moderiert von
Christian S.: C#-Tags hinzugefügt
Yogu - Mi 09.03.11 21:53
Hallo und :welcome:,
Overspeed!
Was soll denn genau passieren, wenn der Benutzer F9 drückt bzw. was passiert bei einem Linksklick? Ein Klick auf ein leeres Fenster bewirkt an sich ja nichts, also wirst du das wohl auch nicht wollen. Möchtest du, dass ein Button angeklickt wird? Oder soll der Klick in einem anderen Fenster durchgeführt werden?
Grüße,
Yogu
Overspeed - Mi 09.03.11 22:46
Yogu hat folgendes geschrieben : |
Hallo und :welcome:, Overspeed!
Was soll denn genau passieren, wenn der Benutzer F9 drückt bzw. was passiert bei einem Linksklick? Ein Klick auf ein leeres Fenster bewirkt an sich ja nichts, also wirst du das wohl auch nicht wollen. Möchtest du, dass ein Button angeklickt wird? Oder soll der Klick in einem anderen Fenster durchgeführt werden?
Grüße,
Yogu |
Ja also es soll ein Links Klick in einem anderen Fenster ausgeführt werden,
die Form dient nur zur Ausgabe sozusagen.
Danke für die Willkommensgrüße :=)
Yogu - Do 10.03.11 00:19
Gehört das Fenster, auf das geklickt werden soll, zu deiner Anwendung oder zu einer anderen? Wenn letzteres der Fall ist, woher weißt du, wo genau hingeklickt werden soll? Stehen die relativen Koordinaten, also der Abstand vom Rand des Fensters zum Klickpunkt, als fixe Zahlen fest? Oder soll auf eine spezielle Schaltfläche geklickt werden? Dann schau dir mal das Programm
WinSpy [
http://www.catch22.net/software/winspy] an. Wenn du dort auf
More klickst, kannst du dich durch Doppelklicks durch die Hierarchie der Steuerelemente durcharbeiten. Kommst du so bis zur Schaltfläche, kann sie auf diese Weise auch mit C# ausfindig gemacht werden.
Es ist nicht ganz einfach, aber meistens doch machbar. Allerdings gibt es viele verschiedene Möglichkeiten - deshalb stelle ich so viele Fragen. ;)
Overspeed - Do 10.03.11 00:39
Yogu hat folgendes geschrieben : |
Gehört das Fenster, auf das geklickt werden soll, zu deiner Anwendung oder zu einer anderen? Wenn letzteres der Fall ist, woher weißt du, wo genau hingeklickt werden soll? Stehen die relativen Koordinaten, also der Abstand vom Rand des Fensters zum Klickpunkt, als fixe Zahlen fest? Oder soll auf eine spezielle Schaltfläche geklickt werden? Dann schau dir mal das Programm WinSpy [http://www.catch22.net/software/winspy] an. Wenn du dort auf More klickst, kannst du dich durch Doppelklicks durch die Hierarchie der Steuerelemente durcharbeiten. Kommst du so bis zur Schaltfläche, kann sie auf diese Weise auch mit C# ausfindig gemacht werden.
Es ist nicht ganz einfach, aber meistens doch machbar. Allerdings gibt es viele verschiedene Möglichkeiten - deshalb stelle ich so viele Fragen. ;) |
Das Fenster gehört zu einer anderen Anwendung und ist 1024x786.
Von der Sache her ist es egal wo er klickt er soll ganz einfach klicken den
Cursor bewege ich manuell in das Fenster.
Overspeed - Do 10.03.11 18:27
Simulieren von Mauseingaben
Die beste Möglichkeit, Mauseingaben zu simulieren, ist ein Aufruf der OnEreignisname-Methode, die das gewünschte Mausereignis auslöst. Diese Möglichkeit besteht normalerweise nur bei benutzerdefinierten Steuerelementen und Formularen, da die Methoden, die Ereignisse auslösen, geschützt sind und außerhalb des Steuerelements oder Formulars nicht aufgerufen werden können. Die folgenden Schritte veranschaulichen beispielsweise, wie das Klicken mit der rechten Maustaste in Code simuliert wird.
So klicken Sie programmgesteuert mit der rechten Maustaste
1. Erstellen Sie ein MouseEventArgs, dessen Button-Eigenschaft auf den MouseButtons.Right-Wert festgelegt ist.
2. Rufen Sie die OnMouseClick-Methode mit diesem MouseEventArgs als Argument auf.
Weitere Informationen zu benutzerdefinierten Steuerelementen finden Sie unter Entwickeln von Windows Forms-Steuerelementen zur Entwurfszeit.
Mauseingaben können auch auf andere Weise simuliert werden. Beispielsweise können Sie programmgesteuert eine Steuerelementeigenschaft festlegen, die einen Zustand darstellt, der normalerweise per Mauseingabe festgelegt wird (z. B. die Checked-Eigenschaft des CheckBox-Steuerelements). Sie können aber auch direkt den Delegaten aufrufen, der mit dem Ereignis verknüpft ist, das Sie simulieren möchten.
Quelle:
http://msdn.microsoft.com/de-de/library/ms171548%28v=VS.90%29.aspx
-----------------------------------------------------------------------------------------------------------------
Das sollte es eigentlich sein nur steige ich da nicht durch><
Th69 - Do 10.03.11 18:35
Hallo overspeed,
der von dir zitierte Text gilt nur für Ereignisse innerhalb der eigenen Anwendung.
Zuersteinmal mußt du uns sagen, um was für ein externes Programm es sich handelt. Bei Spielen, welche auf DirectX basieren, kann man nicht direkt die Mauseingaben simulieren, da diese direkt mit der Hardware (bzw. dem Treiber) kommunizieren (DirectInput).
Nur bei einem normalen Windows-Programm kannst du mittels der WinAPI-Funktionen SendMessage bzw. PostMessage Botschaften (z.B. Maus oder Tastaturereignisse) verschicken.
Aber ehrlich gesprochen: für einen Programmieranfänger ist das viel zu hoch. Außerdem ist dieses direkt mit C# (bzw. dem .NET-Framework) nicht machbar, sondern du müßtest auf P/Invoke zurückgreifen.
Solange dir diese Begriffe nichts sagen, dann nimm lieber ersteinmal Abstand davon und suche dir ein einfacheres Projekt zum Programmieren aus (was auch wirklich nur mit C# bzw. den .NET-Methoden umsetzbar ist).
Yogu - Do 10.03.11 18:48
Schau dir mal folgenden Code an:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| Point mousePosition = Control.MousePosition;
IntPtr handle = WinAPI.WindowFromPoint(mousePosition);
WinAPI.RECT rect; WinAPI.GetWindowRect(handle, out rect);
short relativeX = (short)(mousePosition.X - rect.Left); short relativeY = (short)(mousePosition.Y - rect.Top);
IntPtr lParam = (IntPtr)((relativeX & 0xFFFF) | ((relativeY & 0xFFFF) << 16));
WinAPI.SendMessage(handle, WinAPI.WM_LBUTTONDOWN, IntPtr.Zero, lParam); WinAPI.SendMessage(handle, WinAPI.WM_LBUTTONUP, IntPtr.Zero, lParam); |
Ich hoffe, die Kommentare helfen dir, den Quelltext zu verstehen. Sonst frag einfach nochmal nach. Es ist vielleicht auch ganz gut, wenn du testweise Teile, wie z.B.
lParam weglässt (und durch
0) ersetzt). Ich kann nicht garantieren, dass der Klick in jedem Fall ankommt, da verschiedene Programme unterschiedlich Mausereignisse abfangen.
Für die Zugriffe auf die WinAPI benötigst du noch folgende Klasse. Einfach eine neue Klasse hinzufügen und diesen Code dort einbauen:
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: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| internal static class WinAPI { [System.Runtime.InteropServices.DllImport("user32")] public static extern IntPtr WindowFromPoint(Point point);
[System.Runtime.InteropServices.DllImport("user32")] public static extern IntPtr SendMessage(IntPtr handle, uint message, IntPtr wParam, IntPtr lParam); [System.Runtime.InteropServices.DllImport("user32")] [return: System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)] public static extern void GetWindowRect(IntPtr handle, out RECT rect);
public const uint WM_LBUTTONDOWN = 0x0201;
public const uint WM_LBUTTONUP = 0x0202;
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)] public struct RECT { public int Left; public int Top; public int Right; public int Bottom; } } |
Th69 hat folgendes geschrieben : |
Nur bei einem normalen Windows-Programm kannst du mittels der WinAPI-Funktionen SendMessage bzw. PostMessage Botschaften (z.B. Maus oder Tastaturereignisse) verschicken. |
Das sollte für die meisten Programme außer Spielen gelten. Wie gesagt, mit einigen Einschränkungen.
Th69 hat folgendes geschrieben : |
Aber ehrlich gesprochen: für einen Programmieranfänger ist das viel zu hoch. |
Manchmal kommt man eben nicht darum herum. Und wozu gibt es Foren? ;)
Th69 hat folgendes geschrieben : |
Außerdem ist dieses direkt mit C# (bzw. dem .NET-Framework) nicht machbar, sondern du müßtest auf P/Invoke zurückgreifen. |
Stimmt nicht, das ist problemlos machbar. Allerdings natürlich nur unter Verwendung von Windows-eigenen Bibliotheken, wie z.B. die user32. Die Plattformunabhängigkeit ist dadurch nicht mehr gegeben.
Edit: Quelltext geändert
Yogu - Do 10.03.11 19:02
Sorry, den Begriff kannte ich noch nicht.
Th69 - Do 10.03.11 19:10
Hi Yogu,
woher hast du denn sonst den Code wenn nicht von
http://pinvoke.net ? :lol:
Yogu - Do 10.03.11 19:37
Ganz nette Quelle, ich hab auch noch ein paar Fehler damit beheben können. Ich hab mich bei der MSDN bedient.
Overspeed - Do 10.03.11 20:40
Es handelt sich um ein Spiel das soweit ich weiß mit JavaScript programmiert wurde.
Die Linksklick Funktion soll es mir erleichtern nicht ständig klicken zu müssen....
Dank dir für deine Hilfe Yogu nur weiß ich nicht wo ich dieses code-fragment einfügen soll...
Ich vermisse auch wo steh das wenn die Taste F9 (Beispiel) gedrückt wurde das Linksklicken der Maus anktiviert wird....
Vielleicht doch bissle viel für den Anfang aber so nach den Motto:"Geht nicht, gibts nicht"^^
Yogu - Fr 11.03.11 01:04
Overspeed hat folgendes geschrieben : |
Es handelt sich um ein Spiel das soweit ich weiß mit JavaScript programmiert wurde. |
Es läuft also im Browser? Dann gibt es viel bessere Methoden, sich einzumischen. Stichwort:
USERSCRIPTS
Overspeed hat folgendes geschrieben : |
Dank dir für deine Hilfe Yogu nur weiß ich nicht wo ich dieses code-fragment einfügen soll...
Ich vermisse auch wo steh das wenn die Taste F9 (Beispiel) gedrückt wurde das Linksklicken der Maus anktiviert wird....
Vielleicht doch bissle viel für den Anfang aber so nach den Motto:"Geht nicht, gibts nicht"^^ |
Ja, du solltest dich erst einmal in C# einarbeiten. Ich würde dir dafür das
Galileo Openbook Visual C# 2010 [
http://openbook.galileocomputing.de/visual_csharp_2010] empfehlen.
Wenn das Programm im Hintergrund läuft und das Spiel stattdessen aktiviert ist, wird es nochmal schwieriger.
Overspeed - Fr 11.03.11 04:23
<.< ich komme nur mit guten Nachrichten oder?^^
Das Spiel wird aus einem Webbrowser gestartet wobei das Spiel auf dem PC liegt
der Anbieter hat den Rest was so dazu gehört auf seinen Servern auf welches dann
der Webstarter zugreift.
Also solches Programm wie ich bauen möchte gibt es aber die Leute die sowas gebaut haben oder
die Knowlegde haben halten sich bedeckt..
Das Programm welches ich bauen möchte nennen wir es mal "Linksklicker-Programm"
soll im hintergrund laufen, wobei die form also exe. ruhig als symbol minimiert laufen kann.
jaenicke - Fr 11.03.11 06:43
Ich frage mich allerdings, ob das Programm mit den Regeln des Anbieters konform ist...
Denn wenn nicht, ist deine Frage nicht mit den Forenregeln konform...
Overspeed - Fr 11.03.11 13:34
na das ist ja quatsch was hat das forum mit dem spielanbieter zutun?
jaenicke - Fr 11.03.11 14:26
Scherzprogramme, Hacks, Bots und andere den Nutzungsbedingungen eines Anbieters entgegenlaufenden Programme werden hier natürlich nicht unterstützt, siehe Forenregeln.
*nach Moderatoren für ein offizielles Statement Ausschau hält* :mrgreen:
Overspeed - Fr 11.03.11 14:28
Yogu hat folgendes geschrieben : |
Overspeed hat folgendes geschrieben : | Es handelt sich um ein Spiel das soweit ich weiß mit JavaScript programmiert wurde. |
Es läuft also im Browser? Dann gibt es viel bessere Methoden, sich einzumischen. Stichwort: USERSCRIPTS
Overspeed hat folgendes geschrieben : | Dank dir für deine Hilfe Yogu nur weiß ich nicht wo ich dieses code-fragment einfügen soll...
Ich vermisse auch wo steh das wenn die Taste F9 (Beispiel) gedrückt wurde das Linksklicken der Maus anktiviert wird....
Vielleicht doch bissle viel für den Anfang aber so nach den Motto:"Geht nicht, gibts nicht"^^ |
Ja, du solltest dich erst einmal in C# einarbeiten. Ich würde dir dafür das Galileo Openbook Visual C# 2010 [http://openbook.galileocomputing.de/visual_csharp_2010] empfehlen.
Wenn das Programm im Hintergrund läuft und das Spiel stattdessen aktiviert ist, wird es nochmal schwieriger. |
Das Spiel läuft als normales Programm also auf einer Windows Plattform gestartet wird es aber via Browser.
Dank dir für den Link :p die Quelle kannte ich schon.
Ich mach das programmieren erst seit eine Weile und hab bestimmt schon alles durchgelesen,
ich schätz mal es ist einfach zuviel und ich brauch Zeit um das mal sacken zulassen damit
man dann sinn und zweck versteht :P
Kha - Fr 11.03.11 17:07
Nein, wir haben durchaus verstanden, dass du ein Hilfsprogramm für ein Browserspiel schreiben willst. Zeige uns also bitte die AGB, die ein solches nicht verbieten.
Overspeed - Fr 11.03.11 19:01
Kha hat folgendes geschrieben : |
Nein, wir haben durchaus verstanden, dass du ein Hilfsprogramm für ein Browserspiel schreiben willst. Zeige uns also bitte die AGB, die ein solches nicht verbieten. |
Ja, "ihr" habt bzw. du hast es falsch verstanden.
Es ist kein Browserspiel wird nur durch einen Webstarter gestartet...
Die Plattform ist also Windows-Konform und nicht Browser-Konform.
Kha - Fr 11.03.11 19:14
Dann ersetzte meinetwegen "Hilfsprogramm für ein Browserspiel" durch "Hilfsprogramm für ein Onlinespiel", ändert das etwas :nixweiss: ?
Overspeed - Fr 11.03.11 21:11
Kha hat folgendes geschrieben : |
Dann ersetzte meinetwegen "Hilfsprogramm für ein Browserspiel" durch "Hilfsprogramm für ein Onlinespiel", ändert das etwas :nixweiss: ? |
Ein Unterschied ist also da :P
Also im ernst mir liegt fern da irgendwelche hacks oder so zubauen.
Hilfsprogramm für Onlinespiel wäre dann der Ausdruck ja.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!