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?


Anmelden zum Antworten