Announcement

Collapse
No announcement yet.

Virtuelle Tastatur

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Virtuelle Tastatur

    Hi,
    ich möchte ein Programm schreiben, dass Benutzereingaben der Tastatur und der Maus simuliert.
    Ich habe es bereits mit Sendkeys probiert, oder mit der keybd_event und der mouse_event in "user32" aber die Simulation geschieht nicht auf unterster Ebene.
    DirectX-Anwendungen ignorieren alles bis auf die Maustasten.

    Ich habe mir überlegt, dass man die Werte direkt in den Tastatur-Puffer schreiben könnte.
    Wenn das überhaupt geht, dann weiß ich aber nicht wie.

    Das Andere, das ich mir überlegt habe, wäre einen neuen Treiber zu schreiben, der ein USB-Gerät vortäuscht. Auch da weiß ich aber nicht, wie ich das angangen soll.
    Es gibt ja von Microsoft das WDK aber ich bin mir nicht sicher, ob das für meine Zwecke das Richtige ist.

    Wäre nett, wenn ihr ein paar Tipps für mich hättet.
    MfG Wernie

    Edit: Ich wüsste gerne mal wie Teamviewer das macht

  • #2
    Hallo,

    Ich wüsste gerne mal wie Teamviewer das macht
    Nicht mit .net oder einer anderen Plattform die auf einer virtuellen Maschine basiert.

    Für deine Aufgabe ist C/C++ weitaus besser geeignet. Mit .net geht es auch nur über den Weg P/Invoke und d.h. Win-API. Mit .net wird das ein steiniger Weg.

    Mehr kann ich dazu nicht schreiben


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Tja, ich kann kein C(++)
      Ich muss das mit .net machen.
      Mit APIs habe ich keine Probleme

      MfG Wernie

      Comment


      • #4
        Hallo Wernie,

        dann kann ich dich nur noch den Tipp zu http://www.pinvoke.net/ geben.


        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Du könntest noch versuchen das per SendMessage zu erledigen. Also je Key ein WM_KEYDOWN und danach ein WM_KEYUP zu senden. Bei Tastenkombinationen müsste man die dann noch richtig schachteln. 2.te Möglichkeit wäre SendInput.

          Bist du dir sicher das die DirectX Anwendungen mit der du das probiert hast sich nicht gegen entsprechende ~Manipulationsversuche~ schützt? Ich hätte vermutet das keybd_event auch in einer DirectX Anwendung funktioniert.

          Comment


          • #6
            Hi Ralf,
            SendInput klappt bei DirectX nicht.
            Das Spiel ist AC2, ob es geschützt ist weis ich aber nicht.
            Ich werde es gleich mal mit SendMessage und nem anderen Spiel probieren

            Mfg Wernie

            EDIT: Mir sind da ein paar Fehler unterlaufen.
            1. Ich habe etwas wichtiges in Quellcode auskommentiert
            2. Muss man ein bisschen Zeit zwischen runter und hoch lassen, bevor das Spiel die Eingabe registriert.

            Seltsam: Das Spiel erkennt die Eingabe nicht als gewünschte Taste. Ich habe A gesendet aber es empfängt etwas, dass es nicht darstellt. In Windows wird das A aber richtig empfangen.

            Aber darauf kann man ja aufbauen
            Edit: ...dachte ich, denn es kann die verschiedenen Tasten die ich sende nicht unterscheiden.
            w und a werden als gleiche Eingabe interpretiert
            Zuletzt editiert von Wernie; 31.08.2010, 19:35.

            Comment


            • #7
              Ich habs jetzt mal mit Siedler probiert und da klappt alles.
              Ich könnte mir vorstellen, dass Siedler auf Windows-Meldungen wartet und Assassin's Creed 2 die Geräte selbst prüft, vor allem weil man dort das Eingabegerät und die Tastenbelegung frei wählen kann und in Siedler nicht.

              Mit SendMessage bin ich bisher noch nicht klar gekommen. Ich finde die Werte zu den Konstnten nicht.
              Aber ich frage mich ob das überhaupt Sinn ergibt SendMessage zu benutzen wenn das Programm die Eingaben z.B. über DirectInput emüfängt.


              Wäre es hier nicht doch Sinnvoller einen Treiber für eine virtuelle Tastatur zu programmieren?

              MfG Wernie

              Comment


              • #8
                Vielleicht hilft dir das hier weiter Kernel Hotkey Library(fertiger Treiber + .Net Interface, nicht ausprobiert).

                Comment


                • #9
                  Hi Ralf,
                  danke für deine Antwort. Das sieht vielversprechend aus.

                  Allerdings funktioniert es bei mir nicht.
                  Im Quellcode des x-y-z Beispiels kommt das zum Hinzufügen der Eingabegeräte vor:
                  Code:
                          For i As Integer = 0 To 9
                              keyboards(i) = New Keyboard(i)
                              keyboards(i).Filter = Keyboard.Filters.MAKE Or Keyboard.Filters.BREAK 'filtering only key-down and key-up
                          Next
                  In der rot markierten zeile kommt es zu Folgender Fehlermeldung:
                  "Das System kann die angegebene Datei nicht finden. (Ausnahme von HRESULT: 0x80070002)"
                  Es ist eine FileNotFoundException und liegt wohl an der dll


                  Ich glaub bei der Installation des Treibers ist was schiefgegangen.
                  Das Kommandofenser schließt sich sofort wieder.
                  Da steht ganz, ganz kurz drin: C:\Pfad\KernelHotkey.exe [/install : /uninstall]
                  MfG Wernie
                  Zuletzt editiert von Wernie; 07.09.2010, 22:22.

                  Comment


                  • #10
                    Hast du ein 64bit System? Ich vermute mal das ist ein 32bit Treiber.

                    Comment


                    • #11
                      Ja, das ist wohl der Grund

                      Edit: Unter XP32 das gleiche
                      Zuletzt editiert von Wernie; 22.10.2010, 16:53.

                      Comment

                      Working...
                      X