Seite 1 von 2
(Erledigt)Key und Mouse Erkennung.
Verfasst: 28.12.2017 14:55
von tft
Hallo,
Mein ChiChan Projekt wächst und gedeit. Aber je mehr ich Code, desdo mehr dinge wollen nicht wie ich wohl will.
Um alle Actionen abzubrechen muss ich auf Mouse und Tastatur änderungen reagieren. Egal welches Fenster gerade
aktiv den Fokus hat, das betrifft vor allem Fenster die nicht von PB geöffnet wurden.
Frühere Windows Versionen haben immer alle Nachrichten auf den Stack gelegt. So musste man immer
Prüfen welche Nachricht für wehn gedacht ist. Jetzt bekomme ich über das Event System nur nachrichten die entweder Mit PostMassage
gesendet wurden oder wirklich im Fenster entstanden sind. Was ansich ja auch sinnvoll ist. Aber ich muss das Laufenden Programm immernoch
Steuern können, auch wenn es den Fokus verliert.
Jemand eine Idee ??? Ich nämlich nicht. Ausser ein Externes Hardware Signal

Alt F4
Gruss TFT
Re: Key und Mouse Erkennung.
Verfasst: 28.12.2017 14:59
von RSBasic
Möchtest du systemweit die Maus- und Tastatureingaben abfragen?
Wenn ja:
Tastatur:
http://www.rsbasic.de/aktualisierung/wi ... ardHook.pb
Maus:
http://www.rsbasic.de/aktualisierung/wi ... se-Hook.pb
Die Zeile "ProcedureReturn 1" kannst du aus den Beispielcodes entfernen.
Re: Key und Mouse Erkennung.
Verfasst: 28.12.2017 19:12
von tft
Hallo,
Verstehe ich das richtig, wenn ich sage. Der Hook setzt sich zwischen Tastaturtreiber und Anwendung?
Dann muss ich nur den Hook auswerten um zu wissen welche Tasten gedrückt wurden?
Das Mause Beispielt gefriert den Rechner ganz fürchterlich ein
Gruss TFT
Re: Key und Mouse Erkennung.
Verfasst: 28.12.2017 19:19
von Bisonte
tft hat geschrieben:Das Mause Beispielt gefriert den Rechner ganz fürchterlich ein

Dann hast du da irgendwas verkehrt gemacht. Mit Code kann man eher helfen....
Re: Key und Mouse Erkennung.
Verfasst: 28.12.2017 19:24
von RSBasic
@tft
Ja
tft hat geschrieben:Das Mause Beispielt gefriert den Rechner ganz fürchterlich ein

Das tut mir leid. Die Zeile "ProcedureReturn 1" bzw. den kompletten Case-Bereich hast du aber entfernt oder?
Ansonsten hatte ich das Problem noch nie.
Vielleicht liegt es am Antivirenprogramm, welches die kompilierte Anwendung genauer prüft, weil ein Keyboard-/Mouse-Hook kann auch als Keylogger verwendet werden. Deshalb kann es möglicherweise sein, dass einige Antivirenprogramme sehr empfindlich darauf reagieren.
Re: Key und Mouse Erkennung.
Verfasst: 28.12.2017 19:37
von tft
Hallo,
also so funktionert das nicht wie ich es Brauche. Die Idee scheint der Richtige weg zu sein .... nur die Steine sind noch etwas hoch.
Sagen wir mal ich habe das Beispiel gestartet. Dann sollte doch wenn der Editor von PB den Fokus hat. Das Programm beändet werden
wenn ich dort die ECS Taste drücke? oder ?
Gruss TFT
Re: Key und Mouse Erkennung.
Verfasst: 28.12.2017 19:50
von RSBasic
Geht es um das Mouse-Beispiel? Da sollst du die Escape-Taste drücken, wenn das Beispielfenster den Fokus hat. Da sollst du nicht woanders klicken, sondern nur beispielhaft auf den Button innerhalb des Beispielfensters.
Wenn du auf den PB-Editor klickst, dann kann das Beispielfenster nicht mehr auf Esc prüfen, weil das Beispielfenster im Hintergrund ist.
Die Zusatzabfrage der Escape-Taste hat aber nichts mit dem Beispielcode zu tun. Ist nur dazu da, damit man das Fenster mit der Escape-Taste schließen kann (natürlich solange das Fenster den Fokus hat), weil man ja nicht mit der linken Maustaste auf den X-Button in der Titelleiste klicken kann.
Anderes/Besseres/Einfaches Beispiel:
Code: Alles auswählen
EnableExplicit
Define hhkLLMouse
Procedure MouseKeyHook(nCode, wParam, lParam)
Select wParam
Case #WM_LBUTTONDOWN
Debug "Linke Maustaste wird gedrückt."
Case #WM_LBUTTONUP
Debug "Linke Maustaste wurde losgelassen."
EndSelect
ProcedureReturn CallNextHookEx_(0, nCode, wParam, lParam)
EndProcedure
If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
hhkLLMouse = SetWindowsHookEx_(#WH_MOUSE_LL, @MouseKeyHook(), GetModuleHandle_(0), 0)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
UnhookWindowsHookEx_(hhkLLMouse)
Re: Key und Mouse Erkennung.
Verfasst: 28.12.2017 20:35
von ccode_new
Hallo tft!
Denke ich hierbei richtig:
->Du suchst eine Lösung, wenn dein Programm (irgendein Fenster davon) den Focus verliert ?
->Also quasi ein Prozess (Unter-Thread oder eigenständiges Programm (Abfrage-Server)) der bei Focusverlust alle/bestimmte Tastaurereignisse abfängt und an dein Programm weiterleitet ?
Oder bin ich auf dem Holzweg?
Re: Key und Mouse Erkennung.
Verfasst: 28.12.2017 22:17
von tft
Hallo,
nein der Holzweg ist schon ganz richtig. Ich möchte von meinem Programm aus wissen. Egal ob es den Fokus hat oder nicht. Welche Tasten gedrückt werden und was die Mouse gerade macht, wobei mir die Tatsache reicht. die genauen Tastenangaben brauche ich nicht. Ich brauche das als Abbruchbedingung für Akionen die mein Laufendes Programm im Hintergrund erledigen soll.
Als Beispiel.
Am Rechner wird gerade nichts gemacht ......... das Hintergrundprogramm startet einen Rechen Intensiven Thread/Prozess, ohne jegliche Fenster.
Jetzt benutzt der Anwender Word um einen Brief zu schreiben. Mein Hintergrund Programm muss jetzt auf Grund der Tasten oder Mouse Eingabe seine
Arbeit unterbrechen und warten bis eine gewisse Zeit wider nichts Passiert, und dann an seiner Arbeit weitermachen.
Auf Verlieren des Fokus kann ich nicht abfragen da es kein Fenster gibt. Und es funktioniert sowiso nicht immer da das Hintergrund Programm den Fokus auch nicht gehabt haben muss um zu starten selbst wenn ich ein Dummy Fenster erstelle. Denn der Fokus musss ja beim Aktiven Fenster bleiben.
Es ist keine gewöhnliche Aufgabe ...... ich will auch nicht das mir jemand einen Code schreibt. Bei der Stufe muss ich das Verstehen können um damit weiter zu arbeiten.
Gruss TFT
Re: Key und Mouse Erkennung.
Verfasst: 28.12.2017 22:21
von tft
Da fällt mir ein ... früher konnte man einfach ein OpenWindowedScreen im Hintergrund öffnen und damit arbeiten.