Quelle von Tastendruck ermitteln



  • Jochen Kalmbach schrieb:

    Du kannst es nicht ermitteln...

    Vermute mal das die Betonung hier auf "Du" liegt 😉

    Ob es reicht RAW-codes auszuwerten ist fraglich.

    Eher wäre es evtl. möglich sich Zugriff auf die entsprechende
    USB-Schnittstelle zu verschaffen. Das wird aber vermutlich nicht
    so einfach gehen.

    Weitere Infos wäre evtl. notwendig.

    Welche Fernbedienung? Welches Betriebssystem ? Wurde ein Treiber installiert ?



  • Betriebsystem: Windows 7 x64
    Fernbedienung: So ein billig Teil aus China: PiPi PC Remote Control (kann ich übrigens empfehlen, hat gerade mal 5 Euro gekostet - ein Infrarot USB Empfänger kostet normal schon mehr)

    Ich hab keinerlei Treiber installiert. Einfach den Infrarot Empfänger an USB angeschlossen und es wurde direkt als USB-Eingabegerät erkannt.
    Bei Win7 bei Geräte heißt das Ding WitheHome und bei Gerätefunktionen steht HID-konforme Maus / HID Tastatur / HID-konformes Eingabegerät und USB-Eingabegerät.

    Vielleicht gibts ja eine HID ZugriffsAPI.



  • Caster schrieb:

    Vielleicht gibts ja eine HID ZugriffsAPI.

    Gerade die HID-Konformität ist aber genau dein Problem. Das Gerät wird als Tastatur erkannt und die Applikation unterscheidet nicht zwischen verschiedenen Tastaturen ...

    Damit deine Applikation das Teil von einer Tastatur unterscheiden kann muss
    man "weiter vorne" die Kommandos abgreifen.



  • Ich hab versucht hiermit HID API was zu machen. Die Library und das Testprogramm konnte ich wunderbar kompilieren.

    Ich kann mir damit alle HID Geräte anzeigen lassen (Maus und Fernbedienung) und meine Fernbedienung auch öffnen. Nur schaff ich es nicht mit "hid_read" irgendwas auszulesen.



  • Da musst du wohl in die Treiberkette mit einem Filter rein. Ist aber nicht ganz trivial und "man" sollte schon genau wisen, was "man" tut, wenn "man" auf dieser Ebene ins System eingreift.
    Lad dir das DDK aus der MSDN runter. Da sind auch Beispiele bei.

    Ulli



  • Ich habs jetzt mit Raw Input hinbekommen.

    Ich bekomme per WM_INPUT ein RAWINPUT struct und mit diesem kann ich data.keyboard.VKey mit header.hDevice unterscheiden.

    Funktioniert bislang komischerweise nur mit GUI Fenstern, bei Konsolenfenstern kommen meine Nachrichten nicht an.

    Ich hab einfach eine ganz billige Nachrichtenschleife eingebaut

    while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
    {
        if (bRet == -1)
        {
            //throw Exception(__FILE__, __LINE__, GetLastError());
        }
        else
        {
            std::tcout << _T("Unhandled message: 0x") << std::uppercase << std::hex << msg.message << std::endl;
        }
    }
    

    Wenn ich mir testweise einen Hotkey registrier, kommen die WM_HOTKEY Nachrichten aber an. Nur sonst nichts.

    Ich glaub das hat irgendwas mit Thread/Fenster Nachrichtenschlange zu tun.

    Die WM_HOTKEY Nachrichten werden an den Thread geschickt:

    A handle to the window that will receive WM_HOTKEY messages generated by the hot key. If this parameter is NULL, WM_HOTKEY messages are posted to the message queue of the calling thread and must be processed in the message loop.

    Die WM_INPUT Nachrichten evtl. ans Fenster? Jedenfalls kommen die nicht an.
    Wäre toll, wenn mir da jemand helfen könnte.



  • Hi,

    glaub da du ein das Rawinput Struct benötigst und global Events ermitteln möchtest, kommst du um einen Hook nicht rum!

    Ma schaun, wenn du es nicht schaffst, hab hier noch was rumzuliegen, mit nen paar kleinen modifikationen, könnt ich das so machen das globale Events abgefangen werden und dir die Messages dann an ein "irgentein" HWND geschickt werden.

    mfg.



  • Ich versteh deine Antwort nicht komplett.

    In einer normalen Windows GUI Anwendung also mit WinMain und ganz normaler Fenstererzeugung und Nachrichtenschleife funktioniert ja alles perfekt.

    Wenn ich das gleiche als Konsolenanwendung mach, kommen die WM_INPUT Nachrichten nicht an. Keyboard Hooks funktionieren zwar in der Konsole, aber die beinhalten ja nicht die Raw Input Informationen.

    Wäre aber trotzdem nett, wenn du "das was du noch rumliegen hast" posten könntest, vl. find ich ja was, was ich brauch.

    MfG, Caster



  • Du musst ein verstecktes Fenster anlegen...



  • Jochen Kalmbach schrieb:

    Du musst ein verstecktes Fenster anlegen...

    Ja hab ich mir fast gedacht. Ich frag mich nur wieso manche Nachrichten (wie zb. eben WM_HOTKEY) ankommen, WM_INPUT (und viele andere aber nicht).
    Könnte evtl. damit zusammen hängen, dass WM_HOTKEY Nachrichten nicht von der DefWindowProc verarbeitet werden.


Anmelden zum Antworten