klicks im hintegrund zählen, visual basic, how to?
ich habe einen tastendruck zähler erstellt, nun will ich, dass er auch funktioniert, wenn ich in einer anwendung (spiel) bin. Momentan ist es so, dass das programm nur dann die klicks der beiden tasten zählt, wenn das fenster aktiv ist... möchte es aber dauerhaft zählen, auch im hintergrund ... jemand ne idee?
3 Antworten
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Schau dir mal Hooks an:
- https://msdn.microsoft.com/en-us/library/windows/desktop/ms632589(v=vs.85).aspx
- https://msdn.microsoft.com/de-de/library/windows/desktop/ms644985(v=vs.85).aspx
- https://msdn.microsoft.com/en-us/library/windows/desktop/ms644959(v=vs.85).aspx
Damit ist sowas möglich.
In wieweit du mit visual basic diese Möglichkeit nutzen kannst, weiß ich auch nicht. Vielleicht musst du umsteigen auf eine andere Sprache. (Für einen kleinen Counter sollte das aber auch möglich sein)
Außerdem solltest du dir dann eine Möglichkeit überlegen, wie du das Programm auch ohne aktivem Fenster wieder (bequem) beenden kannst.
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Erstens kann man in VB *jede* Windows-API verwenden. Zweitens ist eine Typ-Umwandlung der primitiven Typen immer möglich. Drittens ist es mit einem Hook möglich genau das erfragte Vorhaben zu realisieren.
Was meinst du, wie Keylogger funktionieren? Die haben genauso wenig ein aktives Fenster mit Fokus.
![](https://images.gutefrage.net/media/default/user/8_nmmslarge.png?v=1551279448000)
Ich hab mal nen Mauszähler über diese Hooks programmiert. Allerdings in C, deshalb weiß ich von diesen Hooks, kann aber nichts zu VB sagen.
Diese Hooks ermöglichen aber genau das gefragte Verhalten.
Keylogger funktionieren auch oft auf diese Weiße und "arbeiten" still und heimlich im Hintergrund.
![](https://images.gutefrage.net/media/default/user/7_nmmslarge.png?v=1438863662000)
Wie tDoni schon sagte, dafür braucht man "Hooks".
Wenn du dich in eine andere Programmiersprache einarbeiten magst - Programme wie AutoHotkey haben sich auf so etwas spezialisiert.
![](https://images.gutefrage.net/media/user/MarkusGenervt/1522121044131_nmmslarge__0_0_256_256_fb5dc5ef4d72bc83b4476f60739c3ee3.png?v=1522121046000)
Wie sollen denn überhaupt Eingabe-Aktionen erfasst werden, wenn das Fenster nicht aktiv ist? Das macht jetzt so nicht viel Sinn.
![](https://images.gutefrage.net/media/default/user/10_nmmslarge.png?v=1551279448000)
genau das ist die frage... wie geht das, dass es dauerhaft zählt, auch wenn es inaktiv ist..... aktuell läufts über e.KeyValue und dann die case funktion um die 2 tasten abzufragen..
![](https://images.gutefrage.net/media/user/MarkusGenervt/1522121044131_nmmslarge__0_0_256_256_fb5dc5ef4d72bc83b4476f60739c3ee3.png?v=1522121046000)
Sorry, ich war wohl nicht präzise genug.
Es ist völlig sinnlos, denn ein inaktives Fenster kann keine Mausklicks oder Tastatur-Eingaben empfangen. Dazu muss es erst einmal aktiviert werden. Ein inaktives Fenster kann allerdings Daten empfangen, doch das geht nur über Pipes und nicht über die User-Interface-Hardware (Maus/Tastatur/etc.).
Es ist in VB prinzipiell möglich diese Funktionen, CallBacks und Types als API-Calls zu implementieren. Jedoch ist bei speziellen Types eine Typ-Umwandlung nicht immer leicht und in selteneren Fällen unmöglich.
Dennoch ist es bei dieser Aufgabenstellung gar nicht möglich, da hierbei Maus- und Tastatur-Eingaben ausgewertet werden sollen, welche sich aber gar nicht ereignen können, da das Fenster keinen Fokus hat.
Hooks für Key- und Mouse-Ereignisse werden also nur ausgelöst, wenn sie geschehen und das Fenster somit den Fokus hat, bzw. aktiv ist.
Das ist auch in allen anderen Sprachen so.