Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Zeichen -> Tasten (https://www.delphipraxis.net/71476-zeichen-tasten.html)

PeterPanino 15. Jun 2006 20:52


Zeichen -> Tasten
 
Wie kann man zur Laufzeit herausfinden, auf welcher Taste der Computertastatur ein bestimmtes Zeichen liegt und welche Modifier-Tasten (Umschalt, Strg, Alt, AltGr) man drücken muss, um dieses Zeichen zu erhalten?

Vielen Dank für eure Hilfe!

mkinzler 15. Jun 2006 21:01

Re: Zeichen -> Tasten
 
Grundsätzlich mit der Zeichentabelle, aber anhand der Formulierung deiner frage, wirst du die nicht meinen.

DGL-luke 15. Jun 2006 21:03

Re: Zeichen -> Tasten
 
also ich würde "alle tasten drücken " (sendkeys etc.) und dann die erzeugten zeichen speichern. durch die umkehrung der indizierung kannst du dann vom Zeichen auf die zu drückende tastenkombination schließen.

turboPASCAL 15. Jun 2006 21:04

Re: Zeichen -> Tasten
 
Zitat:

Zitat von PeterPanino
Wie kann man zur Laufzeit herausfinden, auf welcher Taste der Computertastatur ein bestimmtes Zeichen liegt ...

Überhaupt nicht, dies ist vom akt. "Tastaturtreiber" (Zeichensatz der Tastatur) abhängig.
Falls du nur wissen möchtest was für eine Taste grdrückt wurde ist das kein Problem.

Zitat:

Zitat von PeterPanino
... und welche Modifier-Tasten (Umschalt, Strg, Alt, AltGr) man drücken muss, um dieses Zeichen zu erhalten?

Du bist jetzt Sicher auf die Sonderzeichen wie @,€,²,³ usw. aus. Auch dies ist vom akt. Zeichensatz
der für die Tastatureingestellt ist abhängig.

Was möchtest du denn machen ?

SirThornberry 15. Jun 2006 21:35

Re: Zeichen -> Tasten
 
Das geht mit der Funktion VkKeyScan - siehe:
http://www.delphipraxis.net/internal...=562719#562719

PeterPanino 15. Jun 2006 22:01

Re: Zeichen -> Tasten
 
Ich habe die Lösung gefunden!!!!!

Delphi-Quellcode:
//edtChar: TEdit
//lblVK, lblShift: TLabel
//btn1: TButton

procedure TForm1.btn1Click(Sender: TObject);
var
  lHkl: HKL;
  lVirtKey: SHORT;
begin
  if edtChar.Text = '' then EXIT;
  lHkl := GetKeyboardLayout(0);
  lVirtKey := VkKeyScanEx(edtChar.Text[1], lHkl);
  lblVK.Caption := 'Virtualkey: ' + IntToStr(Lo(lVirtKey));
  lblShift.Caption := 'Shift: ' + IntToStr(Hi(lVirtKey));
end;
Könnt ihr nachprüfen, ob das bei euch auch funktioniert?

SirThornberry 15. Jun 2006 22:35

Re: Zeichen -> Tasten
 
warum nimmst du VkKeyScanEx anstelle von VkKeyScan?
Wenn du GetKeyboardLayout mit "0" aufrufst kannst du den Teil dir auch spaaren indem du nur VkKeyScan nutzt (wie bereits von mir gepostet).

PeterPanino 16. Jun 2006 00:07

Re: Zeichen -> Tasten
 
Zitat:

Zitat von SirThornberry
warum nimmst du VkKeyScanEx anstelle von VkKeyScan?
Wenn du GetKeyboardLayout mit "0" aufrufst kannst du den Teil dir auch spaaren indem du nur VkKeyScan nutzt (wie bereits von mir gepostet).

VkKeyScanEx hat ja deshalb einen zweiten Parameter, um die Lokalitäts-Variable berücksichtigen zu können, die von GetKeyboardLayout zurückgegeben wird, während sich der Parameter von GetKeyboardLayout auf den jeweiligen Thread bezieht (0 meint den aktuellen Thread).


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:39 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