紧急!!!如何屏蔽系统热键!重谢!

pu110 2003-04-08 03:00:03
本人用VB开发了一软件,但无法屏蔽系统热键。win98可以。请问那位高手能赐教!屏蔽所有热键,所有windows系统都适应!谢谢!
...全文
52 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶帆 2003-04-11
  • 打赏
  • 举报
回复
Option Explicit

Public 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
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function GetKeyState Lib "user32" (ByVal nVirtKey As Long) As Integer
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, ByVal lpvSource As Long, ByVal cbCopy As Long)
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Const SW_SHOW = 5
Public Const SW_HIDE = 0
Public Const SW_RESTORE = 9

Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Type EVENTMSG
message As Long
paramL As Long
paramH As Long
time As Long
hwnd As Long
End Type

Public Const WH_KEYBOARD_LL = 13
Public Const Alt_Down = &H20

'消息
Public Const HC_ACTION = 0
Public Const HC_SYSMODALOFF = 5
Public Const HC_SYSMODALON = 4

Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105

Public msg As EVENTMSG

Public lHook As Long
Public lNum As Long


Public Function CallHookProc(ByVal code As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim bflag As Boolean
bflag = False
If code = HC_ACTION Then
CopyMemory msg, lParam, LenB(msg)
Select Case wParam
Case WM_SYSKEYDOWN, WM_SYSKEYUP, WM_KEYDOWN, WM_KEYUP:
'Win键 Menu键
bflag = (msg.message = 91) Or (msg.message = 92) Or (msg.message = 93)
'Ctrl+ESC
bflag = bflag Or ((GetKeyState(vbKeyControl) And &H8000) <> 0 And (msg.message = vbKeyEscape))
'Alt+Tab
bflag = bflag Or ((msg.message = vbKeyTab) And (msg.paramH And Alt_Down) <> 0)
'Alt+ESC
bflag = bflag Or ((msg.paramH And Alt_Down) <> 0 And (msg.message = vbKeyEscape))
End Select
End If

If bflag = True Then
CallHookProc = 1
Else
CallHookProc = 0
End If

If code <> 0 Then
CallHookProc = CallNextHookEx(0, code, wParam, lParam)
End If

End Function

'加钩子
lHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf CallHookProc, App.hInstance, 0)

‘卸钩子
If lHook <> 0 Then
UnhookWindowsHookEx lHook
End If
pu110 2003-04-11
  • 打赏
  • 举报
回复
感谢 foreverforyou(为情所困) zhenxizhou(天上人间) 的支持。

我所需要的是win2000\winxp的屏蔽!
zhenxizhou 2003-04-08
  • 打赏
  • 举报
回复
2000下面就有难度了。
hisofty 2003-04-08
  • 打赏
  • 举报
回复
2000这样的系统,用setwindowhookex这样的钩子函数…………
foreverforyou 2003-04-08
  • 打赏
  • 举报
回复
禁止使用 Alt+F4 关闭窗口
禁止使用 Alt+F4 关闭窗口 98-8-21
Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Const MF_BYPOSITION = &H400&


Private Sub Form_Load()
Dim hwndMenu As Long
Dim c As Long
hwndMenu = GetSystemMenu(Me.hwnd, 0)


c = GetMenuItemCount(hwndMenu)
'slet det nederste menupunkt ("LUK ALT+F4")


DeleteMenu hwndMenu, c - 1, MF_BYPOSITION


c = GetMenuItemCount(hwndMenu)
'slet det nederste menupunkt ("Skillelinje")
DeleteMenu hwndMenu, c - 1, MF_BYPOSITION


End Sub

foreverforyou 2003-04-08
  • 打赏
  • 举报
回复
禁止任务切换

Private Declare Function EnableWindow Lib "user32" (ByVal hWnd As Integer, ByVal aBOOL As Integer) As Integer
Private Declare Function IsWindowEnabled Lib "user32" (ByVal hWnd As Integer) As Integer
Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Integer) As Integer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long


Private TaskBarhWnd As Long
Private IsTaskBarEnabled As Integer
Private TaskBarMenuHwnd As Integer
'禁止或允许使用 Alt-Tab
Sub FastTaskSwitching(bEnabled As Boolean)
Dim X As Long, bDisabled As Long
bDisabled = Not bEnabled
X = SystemParametersInfo(97, bDisabled, CStr(1), 0)
End Sub
'禁止使用Ctrl-Alt-Del
Public Sub DisableTaskBar()
Dim EWindow As Integer
TaskBarhWnd = FindWindow("Shell_traywnd", "")
If TaskBarhWnd <> 0 Then
EWindow = IsWindowEnabled(TaskBarhWnd)
If EWindow = 1 Then
IsTaskBarEnabled = EnableWindow(TaskBarhWnd, 0)
End If
End If
End Sub
'允许使用Ctrl-Alt-Del
Public Sub EnableTaskBar()
If IsTaskBarEnabled = 0 Then
IsTaskBarEnabled = EnableWindow(TaskBarhWnd, 1)
End If
End Sub


98-7-22 禁止 Ctrl+Alt+Del
声明(For Win95):
Const SPI_SCREENSAVERRUNNING = 97
Private Declare Function SystemParametersInfo Lib "user32" Alias _
"SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, _
lpvParam As Any, ByVal fuWinIni As Long) As Long
使用:
'禁止
Dim pOld As Boolean
Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, pOld, 0)
'开启
Dim pOld As Boolean
Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, pOld, 0)


1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧