Autor |
Beitrag |
Overspeed
Hält's aus hier
Beiträge: 11
Windows 7 Ultimate 64bit, Windows XP Professional
C# Visual Studio 2010 Ultimate
|
Verfasst: Mi 09.03.11 21:00
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
Zuletzt bearbeitet von Overspeed am Do 10.03.11 18:31, insgesamt 1-mal bearbeitet
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Mi 09.03.11 21:53
Hallo und  , 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 
Hält's aus hier
Beiträge: 11
Windows 7 Ultimate 64bit, Windows XP Professional
C# Visual Studio 2010 Ultimate
|
Verfasst: Mi 09.03.11 22:46
Yogu hat folgendes geschrieben : | Hallo und , 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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 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 
Hält's aus hier
Beiträge: 11
Windows 7 Ultimate 64bit, Windows XP Professional
C# Visual Studio 2010 Ultimate
|
Verfasst: 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 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 
Hält's aus hier
Beiträge: 11
Windows 7 Ultimate 64bit, Windows XP Professional
C# Visual Studio 2010 Ultimate
|
Verfasst: 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: msdn.microsoft.com/d...48%28v=VS.90%29.aspx
-----------------------------------------------------------------------------------------------------------------
Das sollte es eigentlich sein nur steige ich da nicht durch><
|
|
Th69
      

Beiträge: 4795
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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:
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
Zuletzt bearbeitet von Yogu am Do 10.03.11 19:36, insgesamt 2-mal bearbeitet
|
|
Th69
      

Beiträge: 4795
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 10.03.11 18:58
Hallo Yogu,
genau deine Lösung habe ich ja gemeint. Und das Einbinden mittels [DllImport] nennt man eben P/Invoke: Platform Invoke Tutorial
Trotzdem wird Overspeed diesen Code nicht verstehen 
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 10.03.11 19:02
|
|
Th69
      

Beiträge: 4795
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 10.03.11 19:10
Hi Yogu,
woher hast du denn sonst den Code wenn nicht von pinvoke.net ? 
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: Do 10.03.11 19:37
|
|
Overspeed 
Hält's aus hier
Beiträge: 11
Windows 7 Ultimate 64bit, Windows XP Professional
C# Visual Studio 2010 Ultimate
|
Verfasst: 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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 empfehlen.
Wenn das Programm im Hintergrund läuft und das Spiel stattdessen aktiviert ist, wird es nochmal schwieriger.
|
|
Overspeed 
Hält's aus hier
Beiträge: 11
Windows 7 Ultimate 64bit, Windows XP Professional
C# Visual Studio 2010 Ultimate
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
Hält's aus hier
Beiträge: 11
Windows 7 Ultimate 64bit, Windows XP Professional
C# Visual Studio 2010 Ultimate
|
Verfasst: Fr 11.03.11 13:34
na das ist ja quatsch was hat das forum mit dem spielanbieter zutun?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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* 
|
|
Overspeed 
Hält's aus hier
Beiträge: 11
Windows 7 Ultimate 64bit, Windows XP Professional
C# Visual Studio 2010 Ultimate
|
Verfasst: Fr 11.03.11 14:28
|
|
Overspeed 
Hält's aus hier
Beiträge: 11
Windows 7 Ultimate 64bit, Windows XP Professional
C# Visual Studio 2010 Ultimate
|
Verfasst: Fr 11.03.11 14:30
|
|