主题:如何才能不切换屏幕?
xuranchun
[专家分:270] 发布于 2008-11-04 20:00:00
各位大侠,最近我在编一个全屏软件,但不想被用户按 Alt+Tab 键切屏,还有让用户在使用软件的时候,不允许开“任务管理器”,说简单点就是不让强行关掉程序,小弟在这边跪求答案~
谢谢各位大侠了~
回复列表 (共2个回复)
沙发
lppop [专家分:50] 发布于 2008-11-06 10:35:00
'*****************模块代码**************************
Option Explicit
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 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 Type
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 '屏蔽左WINDOWS键
Private Const VK_RWIN = &H5C '屏蔽右WINDOWS键
Private Const VK_F4 = &H73 '屏蔽F4键
Private Const VK_TAB = &H9 '屏蔽TAB键其他可以自己添加
Private Const HC_ACTION = 0
Private Const WH_KEYBOARD_LL = 13
Private lngHook As Long
'使用底层KeyboardHook拦截按键消息
Public Function LowLevelKeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim blnHook As Boolean
Dim p As PKBDLLHOOKSTRUCT
If nCode = HC_ACTION Then
Select Case wParam
Case WM_KEYDOWN, WM_SYSKEYDOWN, WM_KEYUP, WM_SYSKEYUP
Call CopyMemory(p, ByVal lParam, Len(p))
If p.vkCode = VK_LWIN Or p.vkCode = VK_RWIN Or p.vkCode = VK_TAB Or p.vkCode = VK_F4 Then '按下了左/右Win键
blnHook = True
End If
Case Else
'do nothing
End Select
End If
If blnHook Then
LowLevelKeyboardProc = 1
Else
Call CallNextHookEx(WH_KEYBOARD_LL, nCode, wParam, lParam)
End If
End Function
Public Sub HooK()
lngHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf LowLevelKeyboardProc, App.hInstance, 0)
End Sub
Public Sub UnHooK()
Call UnhookWindowsHookEx(lngHook)
End Sub
'***********************窗体代码***************
Private Sub Form_Load()
HooK
'Dim s As String
's = Environ("windir")
's = s + "\system32\taskmgr.exe"
'Open s For Random Lock Read As #1 注释代码可以占用任务管理器
End Sub
Private Sub Form_Unload(Cancel As Integer)
UnHooK
End Sub
板凳
lppop [专家分:50] 发布于 2008-11-06 10:41:00
补充另一屏蔽任务管理器方法。。。。。
就是用FindWindowA函数关闭指定caption窗体也能达到效果。。
我来回复