Author: Arkadiy Olovyannikov
Run this code. When you will change the language setting (the little "En" blue square in your status bar) the program will tell you to which language you've switched.
Declare Function CallNextHookEx Lib "user32"
_
(ByVal hHook As Long, ByVal ncode As Long, _
ByVal wParam As Long, lParam As Any) As Long
Declare Function SetWindowsHookEx Lib "user32" _
Alias
"SetWindowsHookExA" (ByVal idHook As Long, _
ByVal lpfn As Long, ByVal
hmod As Long, _
ByVal dwThreadId As Long) As Long
Declare Function UnhookWindowsHookEx Lib _
"user32" (ByVal hHook As
Long) As Long
Declare Function GetLocaleInfo Lib "kernel32" _
Alias
"GetLocaleInfoA" (ByVal Locale As Long, _
ByVal LCType As Long, ByVal
lpLCData As String, _
ByVal cchData As Long) As Long
Public Const WH_SHELL = 10
Public Const HSHELL_LANGUAGE = 8
Public Const
LOCALE_ILANGUAGE
As Long = &H1
Public Const
LOCALE_SLANGUAGE
As Long = &H2
Public Const
LOCALE_SENGLANGUAGE As
Long = &H1001
Public Const
LOCALE_SABBREVLANGNAME As Long =
&H3
Public Const
LOCALE_SCOUNTRY
As Long = &H6
Public Const
LOCALE_SENGCOUNTRY
As Long = &H1002
Public Const
LOCALE_SABBREVCTRYNAME As Long = &H7
Public hHook As Long
Public Function ShellHookProc(ByVal idHook As Long,
_
ByVal wParam As Long, ByVal lParam As Long)
As Long
If idHook = HSHELL_LANGUAGE
Then
Dim LocID As
Long
LocID =
LoWord(lParam)
Form1.Cls
' You can
use other LOCALE_ const to get localized names of
'
language/country
Form1.Print "Language
ID ", _
GetlanguageInfo(LocID, LOCALE_ILANGUAGE)
Form1.Print "Language ", GetlanguageInfo(LocID,
_
LOCALE_SENGLANGUAGE)
Form1.Print
"Country ", GetlanguageInfo(LocID,
_
LOCALE_SENGCOUNTRY)
End If
ShellHookProc = CallNextHookEx(hHook, idHook, wParam,
_
ByVal lParam)
End Function
Private Function LoWord(DWORD As Long) As Integer
If DWORD
And &H8000& Then
LoWord = &H8000
Or (DWORD And &H7FFF&)
Else
LoWord = DWORD And
&HFFFF&
End If
End Function
Private Function GetlanguageInfo(ByVal dwLocaleID As Long,
_
ByVal dwLCType As Long) As String
Dim sReturn As String, nRet As Long
sReturn = String$(128,
0)
nRet = GetLocaleInfo(dwLocaleID, dwLCType, sReturn,
_
Len(sReturn))
GetlanguageInfo = Left$(sReturn, nRet - 1)
End Function
Private Sub Form_Load()
hHook =
SetWindowsHookEx(WH_SHELL, AddressOf ShellHookProc, 0&, 0&)
End Sub
Private Sub Form_Unload(Cancel As Integer)
If hHook Then
UnhookWindowsHookEx hHook
End Sub