locked
WM 6.1 - Tatstaur Key-Code auslesen RRS feed

  • Frage

  • hallo

     

    ich habe folgendes anliegen an euch.

    zur zeit bin ich an einer c#.net cf 2.0 app für wm 6.1.

    u.a. soll es der app möglich sein, für den fall der numerischen eingabe, "automatisch" die zweitbelegeung der qwertz tastatur zu aktivieren.

    (auf der zweitbelegung befindet sich u.a. der num-block)

     

    um dies zu ermöglichen benötige ich als erstes den virtual-key code der taste, um mit diesem danach ein tasten-klick zu simulieren.

    virtual-key code => http://msdn.microsoft.com/en-us/library/ms927178.aspx

     

    um den key-code zu ermitteln habe ich meiner Form ein KeyDown und KeyUp-Event hinzugefügt

    System.Windows.Forms.KeyEventArgs

    leider tritt das Events nicht ein wenn ich die taste für die zweitbelegung drücke.

    die tasten A-Z, 0-9 und die sonderzeichen funktionieren wunderbar -> die events werden aktiviert.

     

    hat jemand eine idee wie ich das keyboard anders überwachen kann und mir den keycode zurück geben lassen kann ?

     

    besten dank schon mal

     

    gruss

     

     

    Dienstag, 29. Juni 2010 07:19

Antworten

  • Danke

     

    bei meiner Recherche nach einen Symbol/Motorola SDK bin ich auf einen EMDK for .NET v2.3 (Enterprise Mobility Developer Kit) gestossen.

    http://support.symbol.com/support/search.do?cmd=displayKC&docType=kc&externalId=12623&sliceId=&dialogID=183568729&stateId=1%200%20183566605

    (EMDK? da muss man erst mal drauf kommen :-/ )

     

    Das EMDK installieren, Symbol.Keyboard Assembly ins Projekt adden, Symbol.Keyboard.KeyPadObj erstellen und die Methode SetKeyState(0x8010, 0, true) aufrufen. die Zweitbelegeung des Keyboards wird aktiviert (orange Taste leuchtet :-) ). Deaktiviert wird die Zweitbelegung durch SetKeyState(0x01, 0, true).

     

    Kurze Übersicht:

     

    // Lock keypad temporarily into numeric state

    SetKeyState (0x10, 0, true);

    // Lock keypad permanently into numeric state

    SetKeyState (0x8010, 0, true);

    // Unlock numeric state and set keypad to alpha state

    SetKeyState (0x01, 0, true);

     

     

    nochmals danke und gruss

    Mittwoch, 30. Juni 2010 09:43

Alle Antworten

  • Dafür brauchst Du einen Keyboard Hook.

    Schau Dir mal folgenden BlogPost an: http://blog.opennetcf.com/ayakhnin/PermaLink,guid,84b95802-76d7-499c-b266-e2251ab15706.aspx


    http://patrickgetzmann.spaces.live.com/blog
    Dienstag, 29. Juni 2010 08:01
  • hoi patrick

     

    danke für die schnelle antwort.

    ich habe den keyboard hook implementiert.

    leider verhält es sich genauso wie zuvor.

     

    er wirft keinen event wenn ich die taste für die aktvierung der zweitbelegung der qwertz drücke.

    alle anderen qwertz-tasten reagieren einwandfrei.

     

    hier ein bild von dem gerät.
    http://images.macnn.com/esta/content/0903/motoMC55WAN.jpg

    unten rechts ist die orange taste um die es geht.

    wobei die blaue links unten sowie die grosse gelbe taste auch kein event werfen.

     

    hast du noch eine idee ?

    vielen dank schon mal

     

    gruss 

     

     

    Dienstag, 29. Juni 2010 10:19
  • Hallo,
    den Keyboard Hook hätte ich dir auch vorgeschlagen aber versuche mal diesen Weg:

    http://blog.opennetcf.com/ctacke/2009/05/19/DetectingApplicationIdle.aspx

    http://social.msdn.microsoft.com/Forums/en-US/vssmartdevicesvbcs/thread/ae3e8dbd-fc7b-4eab-bda3-9ab4754face7

    Damit sollten alle WindowMessages (Clicks/Tastureingaben) abgefangen werden.
    So wie das Gerät aussieht könnte ich mir aber auch gut vorstellen das es viell. nicht möglich ist.

    Gruß Stephan

    Dienstag, 29. Juni 2010 14:02
  • Ich schätze mal das die Taste dann entweder von ein einem höher priorisiertem Hook oder vermutlich eher direkt dem Treiber nicht weitergeleitet wird.

    Ich würde mich mal an den Hersteller wenden.


    http://patrickgetzmann.spaces.live.com/blog
    Dienstag, 29. Juni 2010 15:45
  • ich danke euch beiden

     

    ich habe mal das opencfnet projekt ausgeführt um zu schauen was passiert.

    der ref wert der PreFilterMessage - Methode gibt immer eine WININICHANGE message zurück.

    das gilt für die blaue und orange taste, alle anderen tasten geben andere messages zurück.

     

    es sieht wirklich so aus als werden diese tasten anders verwaltet.

     

    die anfrage bei motorola habe ich schon gestellt.

    ich bin gespannt was dabei raus kommt.

     

    gruss

    Dienstag, 29. Juni 2010 16:10
  • Hatte das Verhalten so noch nicht, und kam immer mit den Hooks zurecht.

    Schau Dir mal die Remarks auf http://msdn.microsoft.com/en-us/library/aa931802.aspx an.

    Evtl. hilf Dir das weiter und du kannst das SIP API verwenden.


    http://patrickgetzmann.spaces.live.com/blog
    Dienstag, 29. Juni 2010 17:34
  • Danke

     

    bei meiner Recherche nach einen Symbol/Motorola SDK bin ich auf einen EMDK for .NET v2.3 (Enterprise Mobility Developer Kit) gestossen.

    http://support.symbol.com/support/search.do?cmd=displayKC&docType=kc&externalId=12623&sliceId=&dialogID=183568729&stateId=1%200%20183566605

    (EMDK? da muss man erst mal drauf kommen :-/ )

     

    Das EMDK installieren, Symbol.Keyboard Assembly ins Projekt adden, Symbol.Keyboard.KeyPadObj erstellen und die Methode SetKeyState(0x8010, 0, true) aufrufen. die Zweitbelegeung des Keyboards wird aktiviert (orange Taste leuchtet :-) ). Deaktiviert wird die Zweitbelegung durch SetKeyState(0x01, 0, true).

     

    Kurze Übersicht:

     

    // Lock keypad temporarily into numeric state

    SetKeyState (0x10, 0, true);

    // Lock keypad permanently into numeric state

    SetKeyState (0x8010, 0, true);

    // Unlock numeric state and set keypad to alpha state

    SetKeyState (0x01, 0, true);

     

     

    nochmals danke und gruss

    Mittwoch, 30. Juni 2010 09:43