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

0/5 (5 avis)

Vue 19 806 fois - Téléchargée 701 fois

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

A voir également

Ajouter un commentaire Commentaires
salah79
Messages postés
2
Date d'inscription
jeudi 26 mars 2009
Statut
Membre
Dernière intervention
26 mars 2009

26 mars 2009 à 12:52
j'ai besoin d'un petit exemple sur la langue arab en delphi
ottolicos
Messages postés
16
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
9 janvier 2008

23 juil. 2007 à 19:28
bonjour je veux savoir si tous ces codes existe déjà en php. Puisque j'ai les mêmes problems mais avec php.
Merci d'avance.
ville007
Messages postés
16
Date d'inscription
samedi 22 mars 2003
Statut
Membre
Dernière intervention
29 septembre 2020

10 nov. 2005 à 22:32
c bon
mais nous cherchons comment basculer d'une langue à une autre sans passer par le clavier (exp si j'ai 02 edit l'un je vais ecrir en arabe et l'autre en france ) j'aimrai bien quand je passe à edit en arabe le clavien se mais derectement en arabe et si je passe à edit 2 le clavier passe en francais et vis vi
rca
japee
Messages postés
1727
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
6 novembre 2021
8
4 avril 2004 à 00:07
Oh la la... je me sens pas bien...
Je vérifie tout ça, Delphiprog, et je réagirai plus tard >:(
Sinon, les commentaires dans le zip peuvent toujours être utiles... j'espère... à titre documentaire... sob (sanglots)
Je me suis bien amusé quand même, quoi qu'il en soit :)
Pfff ce décalage horaire, à qui le dis-tu ;)
cs_Delphiprog
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Membre
Dernière intervention
9 janvier 2013
31
3 avril 2004 à 23:04
Quel courage d'avoir tapé tout cela et d'avoir réécrit une fonction convertissant une chaine composée de caractères en son équivalent décimal alors que la fonction HexToBin existe depuis Delphi 1 (à vérifier).

Pour connaitre les langues installées ou utilisées, le code source suivant s'appuie sur les API fournies par Windows : http://www.swissdelphicenter.ch/torry/showcode.php?id=1471

En plus, il permet de basculer la langue du clavier à partir d'une application Delphi dis donc !
Le tout en si peu de code que tu vas regretter d'avoir loupé des heures de sommeil. Déjà que le week-end dernier on a dormi une heure de moins...;o)

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.