Mit Maus kommunizieren



  • Hallo an alle,

    ich möchte gerne überprüfen, ob Maus und Tastatur ordnungsgemäß funktionieren (PS/2 und USB/HID).
    Dazu möchte ich die jeweilige Schnittstelle bidirektional prüfen, d.h. ich muss ein Signal an Tastatur/Maus schicken, welche dann darauf antwortet.
    Gibt es denn da eine Möglichkeit, ohne einen eigenen Treiber zu schreiben?

    Im Folgenden wird das Problem ausführlich erklärt (für Interessierte):

    im Zuge einer automatischen Fehlererkennung möchte ich diverse Schinttstellen auf korrekte Funktion überprüfen. Vor allem bei Tastatur und Maus stellt sich das sehr schwierig dar, weil man schlecht mit denen kommunizieren kann.
    Bei Serial-/Parallel-Port und USB-HDD (o.ä.) kann ja gelesen werden oder eine definierte Antwort auf ein Steuersignal erzwungen werden. Somit ist die Schnittstelle bidirektional auf Funktion geprüft.

    Das ganze habe ich per eigenem Treiber bei Tastatur und Maus über PS/2 auch schon geschafft. Maus/Tastatur antworten auf ScanCode-Befehle mit definierten Scancodes. Da das Betriebssystem (WinXP oder höher) keine Möglichkeit bietet, direkt mit dem PS/2-Controller zu kommunizieren, ist eben auch der eigene Treiber vonnöten.

    Jetzt hat sich allerdings herausgestellt, dass das für meine Anwendung unzulässig ist, da man den normalen Gebrauch des PCs in keiner Weise beeinflussen darf (durch Erzwingen der Antwort wird evtl. das Verhalten geändert, vor allem bei der Maus).

    Außerdem müssen auch PCs ohne PS/2-Schnittstelle geprüft werden können, bei denen die Eingabegeräte am USB hängen.
    Und das ist das Problem. Ich kenne keine Möglichkeit, Befehle über Windows an die Geräte zu schicken (vor allem, weil Windows für Maus und Tastatur keine Rechte an Benutzer(programme) vergibt).

    Ein Workaround für die Tastatur ist, per keybd_event() einen Tastendruck zu simulieren. Bringt erst mal nichts, wenn ich allerdings NUM-, CAPS-, Roll-Lock simuliere, macht die Tastatur ihre jeweilige LED an und schickt dem Betriebssystem, dass sie sie auch angemacht hat.
    Diese Rückmeldung kann ich dann mit RawInput abfangen.
    Funktioniert auch.

    Allerdings geht das mit der Maus nicht, da diese nur Statusmeldungen oder Acknowledges schickt, die vom OS aber nicht weiter geleitet werden.

    Gruß,

    bumpl



  • Eine recht hardwarenahe Sache, die du realisieren willst. Sicher ist, dass C# / .NET für solche Aufgaben eine Ecke zu "highlevel" sind und du vielleicht mit einer nativen, hardwarenäheren Sprache besser bedient wärst.



  • Ja, das dachte ich mir auch schon. Allerdings ist das Projekt jetzt leider schon mit C# ziemlich weit.
    Es würde sich ja immer noch die Möglichkeit über DLL's bieten.


Anmelden zum Antworten