回 帖 发 新 帖 刷新版面

主题:如何才能不切换屏幕?

各位大侠,最近我在编一个全屏软件,但不想被用户按 Alt+Tab 键切屏,还有让用户在使用软件的时候,不允许开“任务管理器”,说简单点就是不让强行关掉程序,小弟在这边跪求答案~
谢谢各位大侠了~

回复列表 (共2个回复)

沙发

'*****************模块代码**************************
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

板凳


补充另一屏蔽任务管理器方法。。。。。
就是用FindWindowA函数关闭指定caption窗体也能达到效果。。

我来回复

您尚未登录,请登录后再回复。点此登录或注册