Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Раскладка в активном приложении Добавлено: 23.07.10 07:26  

Автор вопроса:  Евгений
Господа!
Такое дело:
Наивно думал что текущую раскладку клавиатуры можно легко определить с помощью GetKeyboardLayoutName, оказывается, что это только тогда, когда окно проги активно...
Вопрошаю всех умных людей:
Как узнать раскладку клавиатуры в любом активном окне? Помогите плиз чайнику....

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 Just



Вопросов: 4
Ответов: 330
 Профиль | | #1 Добавлено: 23.07.10 09:13
  1. hKL = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, 0))

Ответить

Номер ответа: 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
код немного замороченный, но все равно должен работать, у меня норм работал...
немного переписал твой код, так вроде попроще


форма
  1.  
  2. Option Explicit
  3.  
  4. Private Sub Form_Load()
  5. Timer1.Interval = 50
  6. End Sub
  7.  
  8. Private Sub Timer1_Timer()
  9. Select Case KeyboardLayout
  10.   Case 67699721
  11.     Label2.Caption = "En"
  12.   Case 68748313
  13.     Label2.Caption = "RUS"
  14.   Case Else
  15.     Label2.Caption = "другой язык или ошибка"
  16. End Select
  17. End Sub



модуль
  1.  
  2. Option Explicit
  3.  
  4. Private Declare Function GetKeyboardLayout Lib "user32" (ByVal dwLayout As Long) As Long
  5. Private Declare Function GetForegroundWindow Lib "user32" () As Long
  6. Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
  7.  
  8. Public Function KeyboardLayout() As Long
  9.     KeyboardLayout = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, 0&))
  10. End Function

Ответить

Номер ответа: 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))

-_-

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам