HugoFlex » 02.11.2004 (Вт) 5:43
Я итак знаю отлавливать нажатиые кнопки даже если форма неактивна. Да при этом у меня работает с маленькими и русскими шрифтами, да и форма видна (а утебя как только запускаешь, формы нет

). Вот отрывок кода:
- Код: Выделить всё
Private Declare Function GetKeyboardLayoutName Lib "user32" _
Alias "GetKeyboardLayoutNameA" (ByVal pwszKLID As String) As Long
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Function Getasynckeystate Lib "user32" Alias "GetAsyncKeyState" (ByVal VKEY As Long) As Integer
Private Const VK_CAPITAL = &H14
Const bigRUS = "ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ"
Const smlRUS = "фисвуапршолдьтщзйкыегмцчня"
Private Sub Timer1_Timer()
f (RUKeysOn = False And CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = _
&H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
Text2 = Text2 + Chr(x)
End If
If (RUKeysOn = False And CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = _
&H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
Text2 = Text2 + Chr(x + 32)
End If
If (RUKeysOn = True And CAPSLOCKON = True And Shift = 0 And (keystate And &H1) = _
&H1) Or (CAPSLOCKON = False And Shift <> 0 And (keystate And &H1) = &H1) Then
Text2 = Text2 + Mid(bigRUS, x - 64, 1)
End If
If (RUKeysOn = True And CAPSLOCKON = False And Shift = 0 And (keystate And &H1) = _
&H1) Or (CAPSLOCKON = True And Shift <> 0 And (keystate And &H1) = &H1) Then
Text2 = Text2 + Mid(smlRUS, x - 64, 1)
End If
Next
End Sub
Public Function RUKeysOn() As Boolean
Dim KeybLayoutName As String, k As Long, nap
KeybLayoutName = String(9, 0)
GetKeyboardLayoutName (KeybLayoutName)
k = CStr(CLng(Left$(KeybLayoutName, _
InStr(1, KeybLayoutName, Chr(0)) - 1)))
If k = "0409" Then
RUKeysOn = False
ElseIf k = "0419" Then
RUKeysOn = True
End If
End Function
Public Function CAPSLOCKON() As Boolean
Static bInit As Boolean
Static bOn As Boolean
If Not bInit Then
While Getasynckeystate(VK_CAPITAL)
Wend
bOn = GetKeyState(VK_CAPITAL)
bInit = True
Else
If Getasynckeystate(VK_CAPITAL) Then
While Getasynckeystate(VK_CAPITAL)
DoEvents
Wend
bOn = Not bOn
End If
End If
CAPSLOCKON = bOn
End Function
Но впрос я задал иной.

Как поменять раскладку клавиатуры вне формы?

Читай не затем, чтобы противоречить и опровергать, не затем, чтобы принимать на веру и не затем, чтобы найти предмет для беседы, но чтобы мыслить, рассуждать и мечтать.