Узнать раскладку клавиатуры в программах - VB

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Подскажите как узнать раскладку клавиатуры не в программе VB, а в других активных окнах. Находил код, но он работает только когда активно окно проекта. Спасибо.

Решение задачи: «Узнать раскладку клавиатуры в программах»

textual
Листинг программы
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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.846 из 5
Похожие ответы