Determine the input language that is used by the current application


#1

Hi,

There is a problem with entering combinations (for example, ctrl + v) in a local language, for example RU. Therefore, you need to determine the input language that is used by the current application.

What are the ideas?


#2

language.xaml (7.2 KB)


#3

this does not work.

InputLanguage.CurrentInputLanguage Gets or sets the input language for the current thread.
msdn

I assume that the current thread is a robot, and not the application in which it works.


#4

But isn’t input goes from Robot “type into” or “select item” to application unless I’m missing something.

Thanks,

Vinay


#5

Or you want to check what language the application accepts and change to that at Runtime?

Thanks,

Vinay


#6

yes, I need to check what input language the application is currently using

so I found an example on VB, but I do not understand how it can be applied to invoke code

Option Explicit
Private Declare Function GetKeyboardLayout Lib “User32” (ByVal dwLayout As Long) As Long
Private Declare Function GetWindowThreadProcessId& Lib “User32” (ByVal hWnd As Long, lpdwProcessId As Long)
'Private Declare Function GetActiveWindow Lib “user32” () As Long ’ <-- активное окно очереди сообщений вызывающего_потока
Private Declare Function GetForegroundWindow& Lib “User32” () ’ <-- “самое верхнее” окно рабочего_стола. Вернет 0, если рабочий стол заблокирован
Private Declare Sub SetWindowPos Lib “User32” (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Const HWND_TOPMOST = -1, SWP_NOSIZE = &H1, SWP_NOMOVE = &H2
'Делаем форму поверх всех окон
Private Sub Form_Load()
SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
End Sub

Private Sub Timer1_Timer()
Dim hAppWnd As Long
Dim ThreadID As Long
Dim ThreadLayout As Long
Dim vbNullString, lng As String
'hAppWnd = GetActiveWindow()
hAppWnd = GetForegroundWindow()
ThreadID = GetWindowThreadProcessId(hAppWnd, ByVal 0&)
ThreadLayout = GetKeyboardLayout(ThreadID)
lng = Left(Trim(Str(Hex(ThreadLayout))), 3)
Select Case lng
Case 409: Me.Caption = “Английский” 'Выводим в заголовок информацию о языке
Case 419: Me.Caption = “Русский”
Case Else: Me.Caption = “Другой”
End Select
End Sub