2013-04-01 120 views

回答

4

由於keybd_event功能已被取代,SendInputMSDN)是很長的路要走。順便說一句,如果你要在VB6中用鍵盤做一些嚴肅的事情,一定要檢查Carl E. Peterson的文章和代碼:http://vb.mvps.org/samples/SendInput/

要設置CapsLock狀態,可以使用下面的代碼(可選地將其放入標準模塊)。 SetCapsLockState(True)啓用CapsLock,並且SetCapsLockState(False)將其禁用。

Option Explicit 

Private Declare Function GetKeyState Lib "user32" _ 
    (ByVal nVirtKey As Long) As Integer 
Private Declare Function MapVirtualKey Lib "user32" _ 
    Alias "MapVirtualKeyA" _ 
    (ByVal uCode As Long, ByVal uMapType As Long) As Long 
Private Declare Function SendInput Lib "user32" _ 
    (ByVal nInputs As Long, pInputs As Any, ByVal cbSize As Long) As Long 

Private Type KeyboardInput  ' typedef struct tagINPUT { 
    dwType As Long    '  DWORD type; 
    wVK As Integer    '  union {MOUSEINPUT mi; 
    wScan As Integer    '   KEYBDINPUT ki; 
    dwFlags As Long    '   HARDWAREINPUT hi; 
    dwTime As Long    '  }; 
    dwExtraInfo As Long   ' }INPUT, *PINPUT; 
    dwPadding As Currency   ' 
End Type 

'SendInput constants 
Private Const INPUT_KEYBOARD As Long = 1 
Private Const KEYEVENTF_KEYUP As Long = 2 

Private Const VK_CAPITAL = &H14 

Public Function CapsLock() As Boolean 
    ' Determine whether CAPSLOCK key is toggled on. 
    CapsLock = CBool(GetKeyState(VK_CAPITAL) And 1) 
End Function 

Public Sub SetCapsLockState(bEnabled As Boolean) 
    'CapsLock is already in desired state. Nothing to do. 
    If CapsLock = bEnabled Then Exit Sub 

    PressCapsLock 
End Sub 

Private Sub PressCapsLock() 
    GenerateKeyboardEvent VK_CAPITAL, 0 
    GenerateKeyboardEvent VK_CAPITAL, KEYEVENTF_KEYUP 
End Sub 

Private Sub GenerateKeyboardEvent(VirtualKey As Long, Flags As Long) 
    Dim kevent As KeyboardInput 

    With kevent 
     .dwType = INPUT_KEYBOARD 
     .wScan = MapVirtualKey(VirtualKey, 0) 
     .wVK = VirtualKey 
     .dwTime = 0 
     .dwFlags = Flags 
    End With 
    SendInput 1, kevent, Len(kevent) 
End Sub 

人們可以從表單模塊這樣稱呼它:

Option Explicit 

Private Sub cmdCapsLockOff_Click() 
    SetCapsLockState False 
End Sub 

Private Sub cmdCapsLockOn_Click() 
    SetCapsLockState True 
End Sub 

Private Sub cmdShowState_Click() 
    MsgBox "CapsLock is " & IIf(CapsLock, "ON", "OFF") 
End Sub 
+0

這很好,謝謝。 – reza

2
+0

代碼只是改變現狀Caps Lock.i要打開或關閉,例如,將兩個按鈕設置爲打開或關閉 – reza

+0

因此?您可以編輯鏈接的代碼以滿足您的需求;需要的一切都在那裏。 – Arvo

+0

你錯了!該代碼模擬Caps Lock鍵。所以當鑰匙關閉時,將其打開並反過來。 – reza