Страница: 1 |
Страница: 1 |
Вопрос: Раскладка в активном приложении
Добавлено: 23.07.10 07:26
Автор вопроса: Евгений
Господа!
Такое дело:
Наивно думал что текущую раскладку клавиатуры можно легко определить с помощью GetKeyboardLayoutName, оказывается, что это только тогда, когда окно проги активно...
Вопрошаю всех умных людей:
Как узнать раскладку клавиатуры в любом активном окне? Помогите плиз чайнику....
Ответы
Всего ответов: 10
Номер ответа: 1
Автор ответа:
Just
Вопросов: 4
Ответов: 330
Профиль | | #1
Добавлено: 23.07.10 09:13
Номер ответа: 2
Автор ответа:
Евгений
Вопросов: 7
Ответов: 22
Профиль | | #2
Добавлено: 26.07.10 08:50
Огромное спасибо Just, Попробовал, работает во всех приложениях, только не на веб страницах в интернете, прокоментируй если знаешь в чём дело...?
Номер ответа: 3
Автор ответа:
Just
Вопросов: 4
Ответов: 330
Профиль | | #3
Добавлено: 26.07.10 09:51
у меня работает... в 2 браузерах проверил...
Номер ответа: 4
Автор ответа:
Евгений
Вопросов: 7
Ответов: 22
Профиль | | #4
Добавлено: 26.07.10 10:14
В Explorer могут быть какие нибудь блокировки?
Номер ответа: 5
Автор ответа:
Just
Вопросов: 4
Ответов: 330
Профиль | | #5
Добавлено: 26.07.10 12:50
Вряд ли
проверь в разных браузерах и если не поможет - покажи код
Номер ответа: 6
Автор ответа:
Евгений
Вопросов: 7
Ответов: 22
Профиль | | #6
Добавлено: 27.07.10 02:50
А вот и код...
Модуль:
Public Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Public Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
Public Declare Function GetForegroundWindow Lib "user32" () As Long
Dim Wind As Long
Dim Lang As Long
Dim sA As String, lLen As Long
Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Форма:
Private Sub Form_Load()
Timer1.Interval = 50
End Sub
Private Sub Timer1_Timer()
Wind = GetForegroundWindow
Lang = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, 0))
If Lang = 67699721 Then
Text1.Text = Str(Wind)
Label2.Caption = "En"
Text2.Text = Str(Lang)
End If
If Lang = 68748313 Then
Text1.Text = Str(Wind)
Label2.Caption = "RUS"
Text2.Text = Str(Lang)
End If
End Sub
Номер ответа: 7
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #7
Добавлено: 27.07.10 09:51
GetWindowThreadProcessId(Wind, 0) тогда уж?
Номер ответа: 8
Автор ответа:
Just
Вопросов: 4
Ответов: 330
Профиль | | #8
Добавлено: 27.07.10 11:11
код немного замороченный, но все равно должен работать, у меня норм работал...
немного переписал твой код, так вроде попроще
форма
модуль
Номер ответа: 9
Автор ответа:
Евгений
Вопросов: 7
Ответов: 22
Профиль | | #9
Добавлено: 28.07.10 02:45
немного переписал твой код, так вроде попроще
Сейчас попробовал-то же самое на Explorer не работает, но всё равно благодарю за поддержку...
AgentFire, а параметр "Wind" в GetWindowThreadProcessId(Wind, 0) как определять?
Номер ответа: 10
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #10
Добавлено: 28.07.10 07:25
Wind = GetForegroundWindow
Lang = GetKeyboardLayout(GetWindowThreadProcessId(Wind, 0))
-_-