User-Input
-
Ich suche 2 Funktionen für:
1.) Vor wie wievielen Sekunden wurde das letzte mal die Maus bewegt?
2.) Vor wie wievielen Sekunden wurde das letzte mal eine Keyboard-Taste gedrückt?
Oder allgemein ausgedrückt: Vor wievielen Sekunden geschah der letzte Input!Wie finde ich das heraus?
-
Das Einfachste wäre Maus und Tastatur zu hooken (Suchfunktion im Forum benutzen) und dann einfach die Zeit zu messen (entweder per GetTickCount -> Millisekunden oder über den HighPerformanceCounter -> sehr genau), seit der die letzte Nachricht ankam.
M.T.
-
Manuel schrieb:
Das Einfachste wäre Maus und Tastatur zu hooken (Suchfunktion im Forum benutzen) und dann einfach die Zeit zu messen (entweder per GetTickCount -> Millisekunden oder über den HighPerformanceCounter -> sehr genau), seit der die letzte Nachricht ankam.
M.T.
Danke!!!
wegen Hook-Procedure: SetWindowsHookEx() ist die Standard-Lösung für sowas?
HighPerformanceCounter, wo gibt es eine solche Funktion?
-
Die Funktionen für den Timer heißen:
QueryPerformanceFrequency und QueryPerformanceCounter
-
GetLastInputInfo ist die Standardlösung dafür. Allerdings erst ab Windows 2000.
-
Ich habe nun eine Key-Hook-Dll.
Der Hook-Code muss in einer Dll stehen, richtig?Das Hauptprogramm ist so deklariert:
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)Bei der Hook-Dll muss ich ein Window-Handle mitgeben, um den Hook zu installieren. Jedoch habe ich kein Window-Handle.
Ich brauche also ein Window-Handle. Wie komm ich an ein Windows-Handle ran?
(Das Program soll keine Fenster anzeigen)
-
Frage bezüglich Window-Handle hat sich inzwischen erledigt.
Ich erstelle einfach ein Dummy-Window und übergebe das Handle, und es funktioniert.Aber noch was:
Der Hook-Code MUSS der zwingend in einer DLL stehen ??? Geht das nicht auch direkt im MainProgram?
-
::MessageBox(NULL,_T("TEXT"),_T("TEXT"),MB_OK);Error -> error C2664: 'MessageBoxA' : cannot convert parameter 2 from 'unsigned short [5]' to 'const char *'
Ich habe Unicode in den Project-Settings!
Wieso geht das nicht??
-
Offenbar nicht richtig, denn MessageBoxA ist die Ansi-Version, du bräuchtest MessageBoxW, wenn du Unicode haben willst. Also definiere mal zusätzlich zu UNICODE auch noch _UNICODE - afaik sollte es dann funktionieren

-
flenders schrieb:
Offenbar nicht richtig, denn MessageBoxA ist die Ansi-Version, du bräuchtest MessageBoxW, wenn du Unicode haben willst. Also definiere mal zusätzlich zu UNICODE auch noch _UNICODE - afaik sollte es dann funktionieren

Danke, hat funktioniert.
Project-Settings: "WIN32,_DEBUG,_WINDOWS,UNICODE,_UNICODE"
LOL, wieso zweimal Unicode definieren??? Das weiss wohl wieder nur Ms.
-
rewe schrieb:
Frage bezüglich Window-Handle hat sich inzwischen erledigt.
Ich erstelle einfach ein Dummy-Window und übergebe das Handle, und es funktioniert.Aber noch was:
Der Hook-Code MUSS der zwingend in einer DLL stehen ??? Geht das nicht auch direkt im MainProgram?Ich hab mal versucht, den Code in ne statische DLL einzubinden...
der Windows-Explorer ist abgestürtzt und Visual C++ hat den Debugger für die
explorer.exe aufgerufen
(jaja, ich war noch einsteiger und hatte mir irgendwas zurecht gefuckelt)
funktioniert's bei dir?