AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetKeyboardState für US-Tastatur

Ein Thema von Furtbichler · begonnen am 4. Jul 2013 · letzter Beitrag vom 30. Okt 2014
Antwort Antwort
Furtbichler
(Gast)

n/a Beiträge
 
#1

GetKeyboardState für US-Tastatur

  Alt 4. Jul 2013, 08:50
Hi,

Ich habe einen 2D-Scanner an einer VCL-Anwendung als USB-Gerät. Der Scanner schickt die Virtual Key Codes, die von Windows dann übersetzt werden (nun ja, von der VCL, aber über die API).

Nun habe ich das Problem, das die PC z.B. ein kyrillisches Layout haben, aber der Scanner meint, dort wäre eine US-Tastatur. Nun könnte man ja entweder den Scanner oder den PC umkonfigurieren, aber das machen die nicht.

Ich verwende zum korrekten Empfangen diese Routine im OnKeyDown:

Delphi-Quellcode:
function GetCharFromVirtualKey(Key: Word): string;
 var
    keyboardState: TKeyboardState;
    asciiResult: Integer;
 begin
    GetKeyboardState(keyboardState) ;

    SetLength(Result, 2) ;
    asciiResult := ToAscii(key, MapVirtualKey(key, 0), keyboardState, @Result[1], 0) ;
    case asciiResult of
      0: Result := '';
      1: SetLength(Result, 1) ;
      2:;
      else
        Result := '';
    end;
 end;
Das klappt auch, sofern die Tastatur richtig eingestellt ist. wenn nicht, dann eben nicht. Nun meine Frage: Wie kann ich diese Funktion umschreiben, damit nicht das auf dem PC eingestellte Layout verwendet wird (ich vermute, das das so ist), sonder fix das englische Layout (US-EN)?

Danke für Stupser in die richtige Richtung.

Danke für Tips.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: GetKeyboardState für US-Tastatur

  Alt 4. Jul 2013, 08:54
MSDN-Library durchsuchenMapVirtualKeyEx
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#3

AW: GetKeyboardState für US-Tastatur

  Alt 4. Jul 2013, 22:13
Und als 3.Parameter von MapVirtualKeyEx? Die Locale der US-Tastatu-Dingenskirchen?
Na, mal probieren.

Danke.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: GetKeyboardState für US-Tastatur

  Alt 5. Jul 2013, 11:34
Zitat:
Nun könnte man ja entweder den Scanner oder den PC umkonfigurieren, aber das machen die nicht.
Schade, bei den besseren Scannern schickst Du Ihnen ein PDF mit den entsprechenden Config-Codes, die lesen sie von oben nach unten ein und das wars. Es sei denn, der Scanner wird nicht nur für Deine Anwendung benutzt...
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: GetKeyboardState für US-Tastatur

  Alt 5. Jul 2013, 20:59
Eben, so macht man das normalerweise auch. Aber die eben nicht. Der Scanner ist US und die PCs sind tschechisch. Also versuche ich, das über eine vorgekaukelte US-Tastatur zu lösen.

Was die Sache noch lustiger macht: Ich habe noch nicht einmal den Scanner zum testen. Also muss ich mir ein Tool schreiben, was hoffentlich einen USB-Scanner simuliert: Ich schicke die Daten per Sendkeys zu meiner Anwendung.
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#6

AW: GetKeyboardState für US-Tastatur

  Alt 5. Jul 2013, 21:05
Ich hab einen HID Scanner von DataLogic da. Und auch tschechische Kunden. Wenn Du willst kann ich das gerne bei mir testen mit einer Minianwendung.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
FragenderHerbert

Registriert seit: 4. Dez 2013
47 Beiträge
 
#7

AW: GetKeyboardState für US-Tastatur

  Alt 30. Okt 2014, 17:24
Hallo, ich lese gerade hier mit und suche den Typ TKeyState. Wo ist der eigentlich definiert?

Hab gerade die Unit(s) Types und Windows konsultiert. Dort ist der Typ nicht. Wo dann?

Ich suche eine Tastaturabfrage für Deutsche oder US Tastatur, bei der ich den Ascii Code des Buchstaben und auch den Scancode der Funktionstasten (Cursor l,r,h,t, F1-F12, ... ) erhalte.

Oder geht das auscchließlich in der WndProc mit WM_KEY?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.049 Beiträge
 
Delphi 12 Athens
 
#8

AW: GetKeyboardState für US-Tastatur

  Alt 30. Okt 2014, 18:59
Was für ein TKeyState suchst du denn, bzw. von wo hast du denn diesen Bezeichner, welchen es im Delphi nicht gibt?

Erstmal gibt es den ScanCode und den KeyCode.
Der ScanCode ist der Code, welchen die Tastatur sendet. (siehe VirtualKeyCode ala VK_ESCAPE oder VK_F1)
Nur VK_0 bis KK_9 und VK_A bis VK_Z gibt es nicht als Konstanten, aber die kann man via Ord('A') selber per Cast generieren.
Sie bekommt man über GetKeyboardState, GetKeyState, GetAsyncKeyState, WM_KEY, OnKeyDown oder OnKeyUp.

Und die KeyCodes werden nach der Übersetzung und Zusammensetzung anhand des aktuellen Tastaturstatusses erstellt.
Das kommt z.B. OnKeyPress rein, oder muß über MapVirtualKey berechnet werden.

PS: VK_SHIFT mit Ord('A') ist ein A und ohne VK_SHIFT ist es ein a. (ScanCode -> KeyCode)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz