Announcement

Collapse
No announcement yet.

Merhere Tastaturanschläge gleichzeitig?

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

  • Merhere Tastaturanschläge gleichzeitig?

    Hi, frohes neues Jahr!

    Wie kann ich merhere Tastataturanschläge die gleichzeitig passsieren mitkriegen?

    Servus Steffen.

  • #2
    Hallo

    Das mit den Tastaturanschlägen ist so eine Sache. Da auch Windows 9x und NT die Tastaturbefehle direkt über die BIOS-Interrupts, bzw. direkt aus dem Tastaturpuffer lesen, ist es an sich nicht möglich, zwei gleichzeitig gedrückte Tasten "gerecht" zu behandeln. Das heisst, wenn man z.B. "a" und "o" drückt (und gedrückt lässt), dann erhält man entweder "aooooo" oder "oaaaaaaa". Die Tastatur ist eines der wenigen Geräte, die nicht über einen Treiber laufen, der solche "neue" Fragen lösen könnte. Eine Ausnahme bilden lediglich die Speziellen Tasten wie [Alt], [Ctrl], [Umschalt],... Bei ihnen ist es möglich, festzustellen, wenn sie mit einer anderen Taste gedrückt werden. Allerdings simuliert die Tastatur einfach je nach Kombination einen anderen Rückgabewert. Also wie wenn eine neue Taste gedrückt wird. Man kann auch über das Tastaturflag feststellen, ob [Ctrl], [Alt],.. gedrückt sind (Dafür gibts wahrscheinlich eine API-Funktion) Wenn man aber (und ich vermute, dass Sie das wollen) unabhängig von der Taste feststellen will, ob mehrere gedrückt sind, dann muss man sich mit der Information begnügen (in obigem Beispiel), dass "o" gedrückt wird und "a" einmal gedrückt wurde. Man kann aber nicht feststellen, ob "a" immer noch gedrückt ist.

    Wenn meine Infos falsch sind, dann bitte ich darum, das zu melden... Man weiss ja nie.

    Matthia

    Comment


    • #3
      Meiner Meinung sollte es schon möglich sein, mehrere Tasten gleichzeitig einzulesen. z.B. Spiele nutzen das. Wie es geht kann ich leider auch nicht sagen, aber ich würde mich mal bei DirectInput umsehen. Schön währe es, wenn es auch ohne DirectX ginge.

      And

      Comment


      • #4
        Ja mit DirectInput muss das gehen. DirectInput liefert eine 256 Byte lange Tabelle in der fuer jede gedrueckte Taste das entsprechende Byte gesetzt ist. Die Spieleprogrammierer finden es gar nicht toll 256 Bytes abklappern zu muessen nur um rauszukriegen ob eine neue Taste gedrueckt wurde. Von laenderspezifischer Umsetzung auch weit und breit nichts zu sehen.

        Zu DirectX mit Delphi die DirectDelphi-Artikel der c't lesen. Da hab ich meine Weisheit auch her

        Comment


        • #5
          Hallo,

          für diese Aufgabe wird weder DirectX noch DirectInput benötigt - das ganz normale Win32-API reicht völlig aus: <br>
          1. <b>GetKeyboardState</b> liefert liefert den Status aller 256 virtueller Tasten zurück. <br>
          2. <b>GetKeyState</b> liefert den Status für die als Parameter übergebene Taste zurück. Somit kann eine Anwendung nur die "interessanten" Tasten gezielt abfragen. <br>
          Wenn diese Aufrufe in eine Ereignisbehandlungsmethode (OnKeyPress/OnKeyDown) verpackt werden, kann man dort auch das gleichzeitige Drücken mehrere Tasten erkennen.
          &#10

          Comment


          • #6
            geht das nur innerhalb der eigenen anwendung oder für ganz windows??

            mfg

            marku
            Herzliche Grüße

            Markus Lemcke
            barrierefreies Webdesign

            Comment


            • #7
              Hallo,

              unter Win32 kann immer nur eine Anwendung den <b>Fokus</b> haben und an diese Anwendung werden die Tastaturereignisse übermittelt. Falls eine globale Anwendunge alle Ereignisse (auch der von fremden Anwendungen) mitlesen will, sind wir wieder beim Thema <b>Hooks</b>

              Comment


              • #8
                ist mit einem globalen hook immer eine dll verbunden??? ich habe gestern abend von einem programmier-
                kollegen eine komponente bekommen, wo man shortcuts erstellen kann die auch dann tun, wenn man
                in einer anderen anwendung(nicht delphiprogramm ist). da war nämlich keine dll dabei. ist das trotzdem
                ein globaler hook?????

                mfg

                marku
                Herzliche Grüße

                Markus Lemcke
                barrierefreies Webdesign

                Comment


                • #9
                  Hallo Markus,

                  bei den Hooks muss generell zwischen 16-Bit und 32-Bit unterschieden werden. Alle 16-Bit-Programme und DLLs werden in einen <b>gemeinsamen</b> Adressraum geladen, somit sind alle Module (EXE oder DLL) in jedem Fall global.<br>
                  Unter Win32 ist das nicht mehr der Fall, jede Anwendung (EXE) erhält einen eigenen, 4 GByte grossen Adressbereich und wird somit von Win32 von den anderen Anwendungen abgeschirmt. Alle Hooks aus einer EXE sind somit nur noch lokal - nur eine DLL kann von Win32 in die Adressräume der jeweiligen Prozesse geladen werden. Daher schreibt Win32 für globale Hooks generell das DLL-Format vor. Allerdings gibt es bei Windows9x einige Ausnahmen, so das diese Aussage erst ab Windows NT uneingeschränkt gilt

                  Comment


                  • #10
                    hm, aber wie ist das mit meiner komponente??????? ist das dann eine 16bit-komponente???
                    aber ich habe sie unter delphi 2 installiert!!!!!!!
                    gibt es da vielleicht doch noch einen anderen trick????

                    mfg

                    marku
                    Herzliche Grüße

                    Markus Lemcke
                    barrierefreies Webdesign

                    Comment

                    Working...
                    X