Keyboard detection
Keyboard detection
Hello,
Is it possible to know with Purebasic if the keyboard is QWERTY or AZERTY?
thank you
Is it possible to know with Purebasic if the keyboard is QWERTY or AZERTY?
thank you
Re: Keyboard detection
That funtionality is often not directly provided and is different for every OS.
On Windows u can check the layout manually.
Give this a try (untested):
On Windows u can check the layout manually.
Give this a try (untested):
Code: Select all
EnableExplicit
Procedure.i KeyboardType();0 = error / 1 = azerty / 2 = qwerty
Protected name.s
Protected azerty.s
Protected qwerty.s
name = Space(#KL_NAMELENGTH)
If GetKeyboardLayoutName_(@name)
azerty = "00020401,0001080c,0000080c,0000040c"
qwerty = "0000041a,00000405,00000407,00010407,"
qwerty + "0000040e,0000046e,00010415,00000418,"
qwerty + "0000081a,0000041b,00000424,0001042e,"
qwerty + "0002042e,0000042e,0000100c,00000807"
If FindString(azerty,name)
ProcedureReturn 1
EndIf
If FindString(qwerty,name)
ProcedureReturn 2
EndIf
EndIf
ProcedureReturn #Null
EndProcedure
Debug KeyboardType()
End
Re: Keyboard detection
I get a return of 0 on win 11 QWERTY Keyboard of a Surface Go signature type cover keyboard.
Re: Keyboard detection
Hello Mijikai,
I tested and the procedure returns 0 !
I have Windows 11 on a DELL Latitude 7290 laptop and an AZERTY keyboard (I'm French)
I tested and the procedure returns 0 !
I have Windows 11 on a DELL Latitude 7290 laptop and an AZERTY keyboard (I'm French)
Re: Keyboard detection
Most likely codes are just missing.
You need a list of all language identifiers that are not QWERTY (which is the default)
aka. AZERTY, QWERTZ, QZERTY, DVORAK, ... and compare them.
https://docs.microsoft.com/en-us/window ... windows-11
Anyway i made a mistake in the example code, the identifiers provided are qwertz not qwerty:
You need a list of all language identifiers that are not QWERTY (which is the default)
aka. AZERTY, QWERTZ, QZERTY, DVORAK, ... and compare them.
https://docs.microsoft.com/en-us/window ... windows-11
Anyway i made a mistake in the example code, the identifiers provided are qwertz not qwerty:
Code: Select all
EnableExplicit
Procedure.i KeyboardType();0 = error / 1 = azerty / 2 = qwertz / 3 = rest (mostly qwerty)
Protected name.s
Protected azerty.s
Protected qwertz.s
name = Space(#KL_NAMELENGTH)
If GetKeyboardLayoutName_(@name)
azerty = "00020401,0001080c,0000080c,0000040c"
qwertz = "0000041a,00000405,00000407,00010407,"
qwertz + "0000040e,0000046e,00010415,00000418,"
qwertz + "0000081a,0000041b,00000424,0001042e,"
qwertz + "0002042e,0000042e,0000100c,00000807"
If FindString(azerty,name)
ProcedureReturn 1
EndIf
If FindString(qwertz,name)
ProcedureReturn 2
EndIf
ProcedureReturn 3
EndIf
ProcedureReturn #Null
EndProcedure
Debug KeyboardType()
End
Re: Keyboard detection
My keyboard is AZERTY and it gives me 3!
Re: Keyboard detection
Im sure u can make it work
There might be a better solution out there but thats what i found.
There might be a better solution out there but thats what i found.
Re: Keyboard detection
Perfect, I looked on the site and I wrote this little test
Code: Select all
Global Langue.s
Procedure ChercherClavier()
Protected name.s
name = Space(#KL_NAMELENGTH)
GetKeyboardLayoutName_(@name)
Select name
Case "0000040C"
Langue="Français.txt"
Case "00000809","00000452","00010409","00020409","00040409","00000409"
Langue="English.txt"
Default
Langue="English.txt"
EndSelect
EndProcedure
ChercherClavier()
Debug Langue
Re: Keyboard detection
To be complete:
Code: Select all
Procedure.s GetKbdLayoutName()
Protected Name$
Name$ = Space(#KL_NAMELENGTH)
GetKeyboardLayoutName_(@Name$)
Select Name$
Case "0000041c" : Name$ = "Albanian"
Case "00000401" : Name$ = "Arabic (101)"
Case "00010401" : Name$ = "Arabic (102)"
Case "00020401" : Name$ = "Arabic (102) AZERTY"
Case "0000042b" : Name$ = "Armenian Eastern"
Case "0002042b" : Name$ = "Armenian Phonetic"
Case "0003042b" : Name$ = "Armenian Typewriter"
Case "0001042b" : Name$ = "Armenian Western"
Case "0000044d" : Name$ = "Assamese - Inscript"
Case "0001042c" : Name$ = "Azerbaijani (Standard)"
Case "0000082c" : Name$ = "Azerbaijani Cyrillic"
Case "0000042c" : Name$ = "Azerbaijani Latin"
Case "0000046d" : Name$ = "Bashkir"
Case "00000423" : Name$ = "Belarusian"
Case "0001080c" : Name$ = "Belgian (Comma)"
Case "00000813" : Name$ = "Belgian (Period)"
Case "0000080c" : Name$ = "Belgian French"
Case "00000445" : Name$ = "Bangla (Bangladesh)"
Case "00020445" : Name$ = "Bangla (India)"
Case "00010445" : Name$ = "Bangla (India - Legacy)"
Case "0000201a" : Name$ = "Bosnian (Cyrillic)"
Case "000b0c00" : Name$ = "Buginese"
Case "00030402" : Name$ = "Bulgarian"
Case "00010402" : Name$ = "Bulgarian (Latin)"
Case "00020402" : Name$ = "Bulgarian (phonetic layout)"
Case "00040402" : Name$ = "Bulgarian (phonetic traditional)"
Case "00000402" : Name$ = "Bulgarian (Typewriter)"
Case "00001009" : Name$ = "Canadian French"
Case "00000c0c" : Name$ = "Canadian French (Legacy)"
Case "00011009" : Name$ = "Canadian Multilingual Standard"
Case "0000085f" : Name$ = "Central Atlas Tamazight"
Case "00000429" : Name$ = "Central Kurdish"
Case "0000045c" : Name$ = "Cherokee Nation"
Case "0001045c" : Name$ = "Cherokee Nation Phonetic"
Case "00000804" : Name$ = "Chinese (Simplified) - US Keyboard"
Case "00000404" : Name$ = "Chinese (Traditional) - US Keyboard"
Case "00000c04" : Name$ = "Chinese (Traditional, Hong Kong S.A.R.)"
Case "00001404" : Name$ = "Chinese (Traditional Macao S.A.R.) US Keyboard"
Case "00001004" : Name$ = "Chinese (Simplified, Singapore) - US keyboard"
Case "0000041a" : Name$ = "Croatian"
Case "00000405" : Name$ = "Czech"
Case "00010405" : Name$ = "Czech (QWERTY)"
Case "00020405" : Name$ = "Czech Programmers"
Case "00000406" : Name$ = "Danish"
Case "00000439" : Name$ = "Devanagari-INSCRIPT"
Case "00000465" : Name$ = "Divehi Phonetic"
Case "00010465" : Name$ = "Divehi Typewriter"
Case "00000413" : Name$ = "Dutch"
Case "00000C51" : Name$ = "Dzongkha"
Case "00000425" : Name$ = "Estonian"
Case "00000438" : Name$ = "Faeroese"
Case "0000040b" : Name$ = "Finnish"
Case "0001083b" : Name$ = "Finnish With Sami"
Case "0000040c" : Name$ = "French"
Case "00120c00" : Name$ = "Futhark"
Case "00000437" : Name$ = "Georgian"
Case "00020437" : Name$ = "Georgian (Ergonomic)"
Case "00010437" : Name$ = "Georgian (QWERTY)"
Case "00030437" : Name$ = "Georgian Ministry of Education And Science Schools"
Case "00040437" : Name$ = "Georgian (Old Alphabets)"
Case "00000407" : Name$ = "German"
Case "00010407" : Name$ = "German (IBM)"
Case "000c0c00" : Name$ = "Gothic"
Case "00000408" : Name$ = "Greek"
Case "00010408" : Name$ = "Greek (220)"
Case "00030408" : Name$ = "Greek (220) Latin"
Case "00020408" : Name$ = "Greek (319)"
Case "00040408" : Name$ = "Greek (319) Latin"
Case "00050408" : Name$ = "Greek Latin"
Case "00060408" : Name$ = "Greek Polytonic"
Case "0000046f" : Name$ = "Greenlandic"
Case "00000474" : Name$ = "Guarani"
Case "00000447" : Name$ = "Gujarati"
Case "00000468" : Name$ = "Hausa"
Case "0000040d" : Name$ = "Hebrew"
Case "00010439" : Name$ = "Hindi Traditional"
Case "0000040e" : Name$ = "Hungarian"
Case "0001040e" : Name$ = "Hungarian 101-key"
Case "0000040f" : Name$ = "Icelandic"
Case "00000470" : Name$ = "Igbo"
Case "00004009" : Name$ = "India"
Case "0000085d" : Name$ = "Inuktitut - Latin"
Case "0001045d" : Name$ = "Inuktitut - Naqittaut"
Case "00001809" : Name$ = "Irish"
Case "00000410" : Name$ = "Italian"
Case "00010410" : Name$ = "Italian (142)"
Case "00000411" : Name$ = "Japanese"
Case "00110c00" : Name$ = "Javanese"
Case "0000044b" : Name$ = "Kannada"
Case "0000043f" : Name$ = "Kazakh"
Case "00000453" : Name$ = "Khmer"
Case "00010453" : Name$ = "Khmer (NIDA)"
Case "00000412" : Name$ = "Korean"
Case "00000440" : Name$ = "Kyrgyz Cyrillic"
Case "00000454" : Name$ = "Lao"
Case "0000080a" : Name$ = "Latin American"
Case "00020426" : Name$ = "Latvian (Standard)"
Case "00010426" : Name$ = "Latvian (Legacy)"
Case "00070c00" : Name$ = "Lisu (Basic)"
Case "00080c00" : Name$ = "Lisu (Standard)"
Case "00010427" : Name$ = "Lithuanian"
Case "00000427" : Name$ = "Lithuanian IBM"
Case "00020427" : Name$ = "Lithuanian Standard"
Case "0000046e" : Name$ = "Luxembourgish"
Case "0000042f" : Name$ = "Macedonia (FYROM)"
Case "0001042f" : Name$ = "Macedonia (FYROM) - Standard"
Case "0000044c" : Name$ = "Malayalam"
Case "0000043a" : Name$ = "Maltese 47-Key"
Case "0001043a" : Name$ = "Maltese 48-key"
Case "00000481" : Name$ = "Maori"
Case "0000044e" : Name$ = "Marathi"
Case "00000850" : Name$ = "Mongolian (Mongolian Script - Legacy)"
Case "00020850" : Name$ = "Mongolian (Mongolian Script - Standard)"
Case "00000450" : Name$ = "Mongolian Cyrillic"
Case "00010c00" : Name$ = "Myanmar"
Case "00090c00" : Name$ = "N'ko"
Case "00000461" : Name$ = "Nepali"
Case "00020c00" : Name$ = "New Tai Lue"
Case "00000414" : Name$ = "Norwegian"
Case "0000043b" : Name$ = "Norwegian With Sami"
Case "00000448" : Name$ = "Odia"
Case "000d0c00" : Name$ = "Ol Chiki"
Case "000f0c00" : Name$ = "Old Italic"
Case "000e0c00" : Name$ = "Osmanya"
Case "00000463" : Name$ = "Pashto (Afghanistan)"
Case "00000429" : Name$ = "Persian"
Case "00050429" : Name$ = "Persian (Standard)"
Case "000a0c00" : Name$ = "Phags-pa"
Case "00010415" : Name$ = "Polish (214)"
Case "00000415" : Name$ = "Polish (Programmers)"
Case "00000816" : Name$ = "Portuguese"
Case "00000416" : Name$ = "Portuguese (Brazilian ABNT)"
Case "00010416" : Name$ = "Portuguese (Brazilian ABNT2)"
Case "00000446" : Name$ = "Punjabi"
Case "00000418" : Name$ = "Romanian (Legacy)"
Case "00020418" : Name$ = "Romanian (Programmers)"
Case "00010418" : Name$ = "Romanian (Standard)"
Case "00000419" : Name$ = "Russian"
Case "00020419" : Name$ = "Russian - Mnemonic"
Case "00010419" : Name$ = "Russian (Typewriter)"
Case "00000485" : Name$ = "Sakha"
Case "0002083b" : Name$ = "Sami Extended Finland-Sweden"
Case "0001043b" : Name$ = "Sami Extended Norway"
Case "00011809" : Name$ = "Scottish Gaelic"
Case "00000c1a" : Name$ = "Serbian (Cyrillic)"
Case "0000081a" : Name$ = "Serbian (Latin)"
Case "0000046c" : Name$ = "Sesotho sa Leboa"
Case "00000432" : Name$ = "Setswana"
Case "0000045b" : Name$ = "Sinhala"
Case "0001045b" : Name$ = "Sinhala - wij 9"
Case "0000041b" : Name$ = "Slovak"
Case "0001041b" : Name$ = "Slovak (QWERTY)"
Case "00000424" : Name$ = "Slovenian"
Case "00100c00" : Name$ = "Sora"
Case "0001042e" : Name$ = "Sorbian Extended"
Case "0002042e" : Name$ = "Sorbian Standard"
Case "0000042e" : Name$ = "Sorbian Standard (Legacy)"
Case "0000040a" : Name$ = "Spanish"
Case "0001040a" : Name$ = "Spanish Variation"
Case "0000041d" : Name$ = "Swedish"
Case "0000083b" : Name$ = "Swedish With Sami"
Case "0000100c" : Name$ = "Swiss French"
Case "00000807" : Name$ = "Swiss German"
Case "0000045a" : Name$ = "Syriac"
Case "0001045a" : Name$ = "Syriac Phonetic"
Case "00030c00" : Name$ = "Tai Le"
Case "00000428" : Name$ = "Tajik"
Case "00000449" : Name$ = "Tamil"
Case "00010444" : Name$ = "Tatar"
Case "00000444" : Name$ = "Tatar (Legacy)"
Case "0000044a" : Name$ = "Telugu"
Case "0000041e" : Name$ = "Thai Kedmanee"
Case "0002041e" : Name$ = "Thai Kedmanee (non-ShiftLock)"
Case "0001041e" : Name$ = "Thai Pattachote"
Case "0003041e" : Name$ = "Thai Pattachote (non-ShiftLock)"
Case "00010451" : Name$ = "Tibetan (PRC - Standard)"
Case "00000451" : Name$ = "Tibetan (PRC - Legacy)"
Case "00050c00" : Name$ = "Tifinagh (Basic)"
Case "00060c00" : Name$ = "Tifinagh (Full)"
Case "0001041f" : Name$ = "Turkish F"
Case "0000041f" : Name$ = "Turkish Q"
Case "00000442" : Name$ = "Turkmen"
Case "00010408" : Name$ = "Uyghur"
Case "00000480" : Name$ = "Uyghur (Legacy)"
Case "00000422" : Name$ = "Ukrainian"
Case "00020422" : Name$ = "Ukrainian (Enhanced)"
Case "00000809" : Name$ = "United Kingdom"
Case "00000452" : Name$ = "United Kingdom Extended"
Case "00010409" : Name$ = "United States - Dvorak"
Case "00020409" : Name$ = "United States - International"
Case "00030409" : Name$ = "United States - Dvorak For left hand"
Case "00040409" : Name$ = "United States - Dvorak For right hand"
Case "00000409" : Name$ = "United States - English"
Case "00000420" : Name$ = "Urdu"
Case "00010480" : Name$ = "Uyghur"
Case "00000843" : Name$ = "Uzbek Cyrillic"
Case "0000042a" : Name$ = "Vietnamese"
Case "00000488" : Name$ = "Wolof"
Case "00000485" : Name$ = "Yakut"
Case "0000046a" : Name$ = "Yoruba"
EndSelect
ProcedureReturn Name$
EndProcedure
Debug GetKbdLayoutName()
Re: Keyboard detection
Thank you infratec
Re: Keyboard detection
My computer need to add
before
M.
Code: Select all
"Name$ = LCase(Name$)"
Code: Select all
"Select Name$"