Getkeyboardlanguage : connaître la langue du clavier de l'utilisateur

Description

Ces deux fonctions sont utiles pour savoir dans quelle langue est paramétré le clavier de l'utilisateur final de notre programme.
Ce code peut être adapté pour déterminer si un clavier est "azerty" ou "qwerty", mais attention, un clavier "qwerty" n'est pas forcément un clavier anglophone (mais on déborde du cadre que je me suis fixé).
Voilà, c'est aussi une incitation à voyager, ne trouvez-vous pas ?
Quand on pense que dans le monde, quelque part, quelqu'un dont on ne sait même pas que sa langue existe, bouffe du Microsoft, hein, ça rend songeur...
Ce qui est frustrant, c'est que je ne dispose que d'un clavier français standard, et que je n'ai pu tester chaque possibilité.
Bien sûr, j'aurais pu le faire en changeant le paramétrage de mon clavier pour chaque cas, mais je n'ai pas eu ce courage. Je le ferai pourtant, mais plus tard, et ce sera un prétexte pour envoyer un code à ce sujet (s'il n'existe pas déjà sur Delphifr).
Un TEdit et un TButton suffisent pour tester le code, sinon tout est dans le zip, avec quelques commentaires.

Source / Exemple :


function HexToInt(Hex: String): Integer;
var
  z: Integer;
  x: Integer;
  v: Integer;
  p: Integer;
  b: Variant;
  h: Integer;
  n: Integer;
begin
  Hex := UpperCase(Hex);
  x := Length(Hex);
  v := x;
  p := 0;
  n := 0;
  b := 0;
  while v >= 1 do
  begin
    z := Ord(Hex[v]);
    case z of
      48: h := 0;
      49: h := 1;
      50: h := 2;
      51: h := 3;
      52: h := 4;
      53: h := 5;
      54: h := 6;
      55: h := 7;
      56: h := 8;
      57: h := 9;
      65: h := 10;
      66: h := 11;
      67: h := 12;
      68: h := 13;
      69: h := 14;
      70: h := 15;
    end;
    b := exp(p * ln(16)) * h;
    p := p + 1;               
    v := v - 1;
    n := n + b;
  end;
  Result := n;
end;

function GetKeyBoardLanguage: String;   // Retourne le langage du clavier
var
  P: PChar;
begin
  Result := 'Indéterminé';
  if GetKeyboardLayoutName(P) then                    
  Case HexToInt(P) of
    $00000436: Result := 'Afrikaans';
    $0000041c: Result := 'Albanian';
    $00000401: Result := 'Arabic Saudi Arabia';
    $00000801: Result := 'Arabic Iraq';
    $00000c01: Result := 'Arabic Egypt';
    $00001001: Result := 'Arabic Libya';
    $00001401: Result := 'Arabic Algeria';
    $00001801: Result := 'Arabic Morocco';
    $00001c01: Result := 'Arabic Tunisia';
    $00002001: Result := 'Arabic Oman';
    $00002401: Result := 'Arabic Yemen';
    $00002801: Result := 'Arabic Syria';
    $00002c01: Result := 'Arabic Jordan';
    $00003001: Result := 'Arabic Lebanon';
    $00003401: Result := 'Arabic Kuwait';
    $00003801: Result := 'Arabic UAE';
    $00003c01: Result := 'Arabic Bahrain';
    $00004001: Result := 'Arabic Qatar';
    $0000042b: Result := 'Armenian';
    $0000042c: Result := 'Azeri Latin';
    $0000082c: Result := 'Azeri Cyrillic';
    $0000042d: Result := 'Basque';
    $00000423: Result := 'Belarusian';
    $00000402: Result := 'Bulgarian';
    $00000403: Result := 'Catalan';
    $00000404: Result := 'Chinese Taiwan';
    $00000804: Result := 'Chinese PRC';
    $00000c04: Result := 'Chinese Hong Kong';
    $00001004: Result := 'Chinese Singapore';
    $00001404: Result := 'Chinese Macau';
    $0000041a: Result := 'Croatian';
    $00000405: Result := 'Czech';
    $00000406: Result := 'Danish';
    $00000465: Result := 'Divehi';
    $00000413: Result := 'Dutch Standard';
    $00000813: Result := 'Dutch Belgian';
    $00000409: Result := 'English United States';
    $00000809: Result := 'English United Kingdom';
    $00000c09: Result := 'English Australian';
    $00001009: Result := 'English Canadian';
    $00001409: Result := 'English New Zealand';
    $00001809: Result := 'English Ireland';
    $00001c09: Result := 'English South Africa';
    $00002009: Result := 'English Jamaica';
    $00002409: Result := 'English Caribbean';
    $00002809: Result := 'English Belize';
    $00002c09: Result := 'English Trinidad';
    $00003009: Result := 'English Zimbabwe';
    $00003409: Result := 'English Philippines';
    $00000425: Result := 'Estonian';
    $00000438: Result := 'Faeroese';
    $00000429: Result := 'Farsi';
    $0000040b: Result := 'Finnish';
    $0000040c: Result := 'French Standard';
    $0000080c: Result := 'French Belgian';
    $00000c0c: Result := 'French Canadian';
    $0000100c: Result := 'French Swiss';
    $0000140c: Result := 'French Luxembourg';
    $0000180c: Result := 'French Monaco';
    $00000437: Result := 'Georgian';
    $00000456: Result := 'Galician';
    $00000407: Result := 'German Standard';
    $00000807: Result := 'German Swiss';
    $00000c07: Result := 'German Austrian';
    $00001007: Result := 'German Luxembourg';
    $00001407: Result := 'German Liechtenstein';
    $00000408: Result := 'Greek';
    $00000447: Result := 'Gujarati';
    $0000040d: Result := 'Hebrew';
    $00000439: Result := 'Hindi';
    $0000040e: Result := 'Hungarian';
    $0000040f: Result := 'Icelandic';
    $00000421: Result := 'Indonesian';
    $00000410: Result := 'Italian Standard';
    $00000810: Result := 'Italian Swiss';
    $00000411: Result := 'Japanese';
    $0000044b: Result := 'Kannada';
    $0000043f: Result := 'Kazakh';
    $00000457: Result := 'Konkani';
    $00000412: Result := 'Korean';
    $00000440: Result := 'Kyrgyz';
    $00000426: Result := 'Latvian';
    $00000427: Result := 'Lithuanian';
    $0000042f: Result := 'Macedonian';
    $0000043e: Result := 'Malay Malaysia';
    $0000083e: Result := 'Malay Brunei Darussalam';
    $0000044e: Result := 'Marathi';
    $00000450: Result := 'Mongolian';
    $00000414: Result := 'Norwegian Bokmal';
    $00000814: Result := 'Norwegian Nynorsk';
    $00000415: Result := 'Polish';
    $00000416: Result := 'Portuguese Brazilian';
    $00000816: Result := 'Portuguese Standard';
    $00000446: Result := 'Punjabi';
    $00000418: Result := 'Romanian';
    $00000419: Result := 'Russian';
    $0000044f: Result := 'Sanskrit';
    $0000081a: Result := 'Serbian Latin';
    $00000c1a: Result := 'Serbian Cyrillic';
    $0000041b: Result := 'Slovak';
    $00000424: Result := 'Slovenian';
    $0000040a: Result := 'Spanish Traditional Sort';
    $0000080a: Result := 'Spanish Mexican';
    $00000c0a: Result := 'Spanish Modern Sort';
    $0000100a: Result := 'Spanish Guatemala';
    $0000140a: Result := 'Spanish Costa_Rica';
    $0000180a: Result := 'Spanish Panama';
    $00001c0a: Result := 'Spanish Dominican Republic';
    $0000200a: Result := 'Spanish Venezuela';
    $0000240a: Result := 'Spanish Colombia';
    $0000280a: Result := 'Spanish Peru';
    $00002c0a: Result := 'Spanish Argentina';
    $0000300a: Result := 'Spanish Ecuador';
    $0000340a: Result := 'Spanish Chile';
    $0000380a: Result := 'Spanish Uruguay';
    $00003c0a: Result := 'Spanish Paraguay';
    $0000400a: Result := 'Spanish Bolivia';
    $0000440a: Result := 'Spanish El Salvador';
    $0000480a: Result := 'Spanish Honduras';
    $00004c0a: Result := 'Spanish Nicaragua';
    $0000500a: Result := 'Spanish Puerto Rico';
    $00000441: Result := 'Swahili';
    $0000041d: Result := 'Swedish';
    $0000081d: Result := 'Swedish Finland';
    $0000045a: Result := 'Syriac';
    $00000449: Result := 'Tamil';
    $00000444: Result := 'Tatar';
    $0000044a: Result := 'Telugu';
    $0000041e: Result := 'Thai';
    $0000041f: Result := 'Turkish';
    $00000422: Result := 'Ukrainian';
    $00000420: Result := 'Urdu';
    $00000443: Result := 'Uzbek Latin';
    $00000843: Result := 'Uzbek Cyrillic';
    $0000042a: Result := 'Vietnamese';
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text := GetKeyBoardLanguage;
end;

Conclusion :


Compilable dès Delphi 4.
Ceux qui ont un clavier autre que Français standard pourraient-ils nous confirmer que le code fonctionne correctement ?
Soit ici, soit en me passant un message sur le site.

Codes Sources

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.