Alternative zu Sleep () ? - [Problem gelöst.]
-
mikey schrieb:
Hey es funktioniert !! Danke dir vieeelmals !! An dem Problem feile ich schon wochenlang, gut das es euch gibt

Bleibt nur noch die Frage übrig, was nun mit der while Schleife los ist. (Abbruchbedingung). Siehe den Edit meiner ersten Frage.
Probier mal folgendes:
while (1) { SleepEx(200, 1); if(GetAsyncKeyState(VK_CONTROL)) { if(GetAsyncKeyState(VK_F1)) break; } }Sollte gehen
-
Danke dir. Jetzt funktioniert's perfekt, ich kann endlich weitermachen ...
Natürlich könnte ich optimalerweise anstatt einem GetAsyncKeyState nen Hook nehmen, ist wesentlich vernünftiger, aber das kann ich ja in der nächsten Programmversion machen.
Bis zum nächsten mal,
MfG Mikey. :xmas1:
-
mikey schrieb:
Danke dir. Jetzt funktioniert's perfekt, ich kann endlich weitermachen ...
Natürlich könnte ich optimalerweise anstatt einem GetAsyncKeyState nen Hook nehmen, ist wesentlich vernünftiger, aber das kann ich ja in der nächsten Programmversion machen.
Bis zum nächsten mal,
MfG Mikey. :xmas1:
Oh Mann, lass bloss die Finger von Hooks
Die "vernünftige" Variante wäre für diesen einfachen Fall dir einen Timer zu setzen der nach 5 Minutel abgeht, am besten einfach mit SetTimer().Dann bekommst du z.B. nach jeweils 5 Minuten (was du halt angibst) ne WM_TIMER, und im Handler für WM_TIMER gehst du einfach her und machst was auch immer du machen willst.
Da das Programm dann nicht in einer Warteschleife hängt bekommst du Tastendrücke auch ganz normal als WM_KEYDOWN rein bzw. kannst sogar mit Buttons und weiss-Gott-was-noch arbeiten.
-
Ahh, dank sei Gott, diese Funktion habe ich eigentlich gemeint

Also muss ich in einer allseits beliebten while - Schleife die Windows - Nachrichten abfragen ... Kein Problem, das mach ich schon. Dir und allen anderen vielen Dank. Das mit SetTimer ist glaub ich auch besser.
Achja: Mit Keyboardhook hab ich auch schon mal rumgespielt, besonders diese komplizierte DLL machte mich verrückt. Ich habs dann doch sein lassen. Für so einen Windows - bzw. API nOObie ist das anfangs etwas verwirrend.
Man sieht sich,
mikey. :xmas1:
-
Achja: Mit Keyboardhook hab ich auch schon mal rumgespielt, besonders diese komplizierte DLL machte mich verrückt. Ich habs dann doch sein lassen. Für so einen Windows - bzw. API nOObie ist das anfangs etwas verwirrend.
Darum gehts garnicht so, sondern vielmehr darum dass es einfach gänzlich das falsche Mittel ist um das Problem zu lösen. Hooks sind für ganz andere Dinge gemacht.
Das wäre wie nen Reifen mit einer Rohrzange wechseln: gehen tuts schon, aber schön ist es nicht

-
Darum gehts garnicht so, sondern vielmehr darum dass es einfach gänzlich das falsche Mittel ist um das Problem zu lösen. Hooks sind für ganz andere Dinge gemacht.
Weist du denn, um was es mir genau geht ?
Nee, bestimmt nicht, denn ich habe mein Problem etwas vereinfacht dargestellt. In Wirklichkeit läuft die Anwendung im Hintergrund, und muss sämtliche Tastatureingaben global (systemweit) abfangen können.Dabei ist es wesentlich schlauer, wenn mein Programm nicht selber ständig alle Eingaben überprüft, sondern sich dagegen eine Nachricht vom System schicken lässt, wenn letzteres eintritt. Dafür ist doch KeyboardHook geeignet, oder sehe ich das falsch ?
-
Aber bedenke das ein Hook die Performance des PC's ganz schön (negativ) beeinflusst.
-
?!? Huch, warum das? Ich hab gedacht, das wär andersrum, also dass GetAsynKeyState die CPU mehr belastet ?! Naja, dann ist es doch nicht ganz falsch, wenn ich den Hook weglassen

-
mikey schrieb:
?!? Huch, warum das? Ich hab gedacht, das wär andersrum, also dass GetAsynKeyState die CPU mehr belastet ?! Naja, dann ist es doch nicht ganz falsch, wenn ich den Hook weglassen

Hook = Jede Taste egal welche und in welchem Zusammenhang kommt an deinem Programm "vorbei"
GetAsyncKeyState = Dein Programm fragt nur "eben" ab ob eine Taste gerade gedrückt ist...Hook > Viel CPU usage
GetAsyncKeyState > Minimale CPU usageAber wenn du jede Taste haben willst ist ein Hook "sicherer" da dir eben auch in "lags" also wenn dein computer mal bei Spielen oder so in die Knie geht ein Tastendruck entgeht

-
mikey schrieb:
Darum gehts garnicht so, sondern vielmehr darum dass es einfach gänzlich das falsche Mittel ist um das Problem zu lösen. Hooks sind für ganz andere Dinge gemacht.
Weist du denn, um was es mir genau geht ?
Nee, bestimmt nicht, denn ich habe mein Problem etwas vereinfacht dargestellt. In Wirklichkeit läuft die Anwendung im Hintergrund, und muss sämtliche Tastatureingaben global (systemweit) abfangen können.Dabei ist es wesentlich schlauer, wenn mein Programm nicht selber ständig alle Eingaben überprüft, sondern sich dagegen eine Nachricht vom System schicken lässt, wenn letzteres eintritt. Dafür ist doch KeyboardHook geeignet, oder sehe ich das falsch ?
Du hast ein sehr spezifisches Problem geschildert, und dafür sind Hooks eben die gänzlich falsche Lösung. Kann ich ja nixe dafür wenn du nicht sagst was du wirklich machst, nen?
@Listing: was mehr CPU Zeit frisst kommt bloss drauf an a) wie oft man ne Taste drückt und b) wie schnell man mit GetAsyncKeyState pollt. Sollte logisch sein, oder?
Und in allen "realistischen" Situationen wird wohl der Hook gewinnen...
-
Du hast ein sehr spezifisches Problem geschildert, und dafür sind Hooks eben die gänzlich falsche Lösung. Kann ich ja nixe dafür wenn du nicht sagst was du wirklich machst, nen?
@Listing: was mehr CPU Zeit frisst kommt bloss drauf an a) wie oft man ne Taste drückt und b) wie schnell man mit GetAsyncKeyState pollt. Sollte logisch sein, oder?
Und in allen "realistischen" Situationen wird wohl der Hook gewinnen...Okay, du hast Recht, haste wirklich nicht wissen können, sry ...

Was den Hook betrifft, das selbe habe ich mir auch gedacht ... Es kommt drauf an, wie man es anwendet. Ich war bisher auch der Meinung, dass Keyboardhook 1. Leistungsfähiger, 2. Bei richtiger Anwendung schonender ist.
Aber so lernt man wenigstens daraus !

MfG, mikey.