Option ExplicitPrivate Const WM_ENABLE = &HA Private Const WS_DISABLED = &H8000000 Private Const GWL_STYLE = (-16)Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate hwndShellTray As Long Private hwndStartButton As Long Private nOldWndStyle As Long Private nNewWndStyle As LongPrivate Sub cmdDisable_Click() nNewWndStyle = nOldWndStyle Or WS_DISABLED
WIN2000中屏蔽WIN键的方法:在模块中: Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Type PKBDLLHOOKSTRUCT vkCode As Long scanCode As Long flags As Long time As Long dwExtraInfo As Long End TypePrivate Const HC_ACTION = 0 Private Const WM_KEYDOWN = &H100 Private Const WM_SYSKEYDOWN = &H104 Private Const WM_KEYUP = &H101 Private Const WM_SYSKEYUP = &H105 Private Const VK_LWIN = &H5B Private Const VK_RWIN = &H5C Private Const WH_KEYBOARD_LL = 13Private PrevHook As Long Public Function LowLevelKeyboardProc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Dim fEatKeystroke As Boolean Dim p As PKBDLLHOOKSTRUCT
If ncode = HC_ACTION Then Select Case wParam Case WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP CopyMemory p, ByVal lParam, Len(p) If p.vkCode = VK_LWIN Or p.vkCode = VK_RWIN Then fEatKeystroke = True End If Case Else 'do nothing End Select End If
If fEatKeystroke Then LowLevelKeyboardProc = 1 Else CallNextHookEx WH_KEYBOARD_LL, ncode, wParam, lParam End If End Function Public Sub Hook() PrevHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0) End Sub Public Sub UnHook() UnhookWindowsHookEx PrevHook End Sub 在窗体中: Private Form_Load() Hook() End SubPrivate Sub Form_Unload(Cancel As Integer) UnHook() End Sub
我来CSDN都是看的,现在都不想发表了
Private Const WS_DISABLED = &H8000000
Private Const GWL_STYLE = (-16)Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate hwndShellTray As Long
Private hwndStartButton As Long
Private nOldWndStyle As Long
Private nNewWndStyle As LongPrivate Sub cmdDisable_Click() nNewWndStyle = nOldWndStyle Or WS_DISABLED
SetWindowLong hwndStartButton, GWL_STYLE, nNewWndStyleEnd SubPrivate Sub cmdRestore_Click() SetWindowLong hwndStartButton, GWL_STYLE, nOldWndStyleEnd SubPrivate Sub Form_Load() hwndShellTray = FindWindow("Shell_TrayWnd", vbNullString)
hwndStartButton = FindWindowEx(hwndShellTray, ByVal 0&, "BUTTON", vbNullString)
nOldWndStyle = GetWindowLong(hwndStartButton, GWL_STYLE)
End SubPrivate Sub Form_Unload(Cancel As Integer) SetWindowLong hwndStartButton, GWL_STYLE, nOldWndStyle
End Sub
hwnds = FindWindow("Shell_TrayWnd", vbNullString)
hwndSb= FindWindowEx(hwndShellTray, ByVal 0&, "BUTTON", vbNullString)
然后,sendmessage(hwndsb,SHOW_HIDE,0,0)
如果你还是解决不了,那就加我,我在QQ上告诉你
Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Private Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Type PKBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End TypePrivate Const HC_ACTION = 0
Private Const WM_KEYDOWN = &H100
Private Const WM_SYSKEYDOWN = &H104
Private Const WM_KEYUP = &H101
Private Const WM_SYSKEYUP = &H105
Private Const VK_LWIN = &H5B
Private Const VK_RWIN = &H5C
Private Const WH_KEYBOARD_LL = 13Private PrevHook As Long
Public Function LowLevelKeyboardProc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim fEatKeystroke As Boolean
Dim p As PKBDLLHOOKSTRUCT
If ncode = HC_ACTION Then
Select Case wParam
Case WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP
CopyMemory p, ByVal lParam, Len(p)
If p.vkCode = VK_LWIN Or p.vkCode = VK_RWIN Then
fEatKeystroke = True
End If
Case Else
'do nothing
End Select
End If
If fEatKeystroke Then
LowLevelKeyboardProc = 1
Else
CallNextHookEx WH_KEYBOARD_LL, ncode, wParam, lParam
End If
End Function
Public Sub Hook()
PrevHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0)
End Sub
Public Sub UnHook()
UnhookWindowsHookEx PrevHook
End Sub
在窗体中:
Private Form_Load()
Hook()
End SubPrivate Sub Form_Unload(Cancel As Integer)
UnHook()
End Sub