如何在win98和win2000中屏蔽整个键盘(包括热键)和鼠标,欢迎大家踊跃发言!!!思路和源程序.

解决方案 »

  1.   

    当然能
         *API函数声明 
         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 
         编写如下函数: 
         Sub DisableCtrlAltDelete(bDisabled As Boolean) 
         Dim X As Long 
         X = SystemParametersInfo(97, bDisabled, CStr(1), 0) 
         End Sub 
         使Ctrl-Alt-Delete无效 : 
         Call DisableCtrlAltDelete(True) 
         恢复Ctrl-Alt-Delete : 
         Call DisableCtrlAltDelete(False)
      

  2.   

    http://expert.csdn.net/Expert/topic/2133/2133298.xml?temp=.6987574
    http://expert.csdn.net/Expert/topic/2394/2394203.xml?temp=.358227
    http://expert.csdn.net/Expert/topic/2374/2374876.xml?temp=.312298
    http://expert.csdn.net/Expert/TopicView1.asp?id=2086886
    http://expert.csdn.net/Expert/topic/2086/2086886.xml?temp=.6452753http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=172328
      

  3.   

    Win98下蔽掉 ctrl+del+altPublic Declare Function GetCurrentProcessId Lib “kernel32” () As Long 
    ’获得当前进程ID函数的声明 
    Public Declare Function RegisterServiceProcess Lib “kernel32” (ByVal ProcessId As Long, ByVal ServiceFlags As Long) As Long '窗体Private Sub Form_Load() 
    RegisterServiceProcess GetCurrentProcessId, 1 ’ 从系统中取消当前进程 
    end subPrivate Sub Form_Unload(Cancel As Integer) 
    RegisterServiceProcess GetCurrentProcessId, 0 ’从系统中取消当前程序的进程 
    End Sub 
    Win2000/XP下屏蔽CTRL+ALT+DEL
    http://expert.csdn.net/Expert/topic/2374/2374876.xml?temp=.312298
    http://expert.csdn.net/Expert/TopicView1.asp?id=2086886
    http://expert.csdn.net/Expert/TopicView1.asp?id=2019647
    http://expert.csdn.net/Expert/topic/2019/2019647.xml?temp=.8485681
    http://expert.csdn.net/Expert/topic/2394/2394203.xml?temp=.4765589
    http://expert.csdn.net/Expert/topic/2333/2333641.xml?temp=2.935427E-02编写小函数如下:
    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 LongSub DisableCtrlAltDelete(bDisabled As Boolean)
    Dim X As Long
    X = SystemParametersInfo(97, bDisabled, CStr(1), 0)
    End Sub
    程序设计时如果需要屏蔽Ctrl-Alt-Delete按键,可以书写
    Call DisableCtrlAltDelete(True),如果需要恢复原状,可以书写Call 
    DisableCtrlAltDelete(False)。
      

  4.   


    屏蔽Ctrl+Alt+Del:Option ExplicitPrivate Declare Function GetCurrentProcessId Lib "kernel32" () As LongPrivate Declare Function GetCurrentProcess Lib "kernel32" () As LongPrivate Declare Function RegisterServiceProcess Lib "kernel32" (ByVal dwProcessID As Long, ByVal dwType As Long) As LongPrivate Const RSP_SIMPLE_SERVICE = 1Private Const RSP_UNREGISTER_SERVICE = 0    Private Sub MakeMeService()    Dim pid As Long    Dim reserv As Long    pid = GetCurrentProcessId()    RegisterServiceProcess pid, RSP_SIMPLE_SERVICEEnd Sub    Private Sub UnMakeMeService()    Dim pid As Long    Dim reserv As Long    pid = GetCurrentProcessId()    RegisterServiceProcess pid, RSP_UNREGISTER_SERVICEEnd Sub    Private Sub Command1_Click()    Call MakeMeService 'ʹ´°¿ÚÒþ²ØEnd Sub    Private Sub Command2_Click()    Call UnMakeMeService  'ʹ´°¿ÚÏÔʾEnd Sub
      

  5.   


    模块里内容 
    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
    Sub DisableCtrlAltDelete(bDisabled As Boolean)
        ' Disables Control Alt Delete Breaking as well as Ctrl-Escape
        Dim X As Long
        X = SystemParametersInfo(97, bDisabled, CStr(1), 0)End Sub
    '窗体代码 
    Private Sub Command1_Click()
     DisableCtrlAltDelete (False)
    End SubPrivate Sub Command2_Click()
      DisableCtrlAltDelete (True)
    End Sub
      

  6.   

    SystemParametersInfo只能用在win98中,而用注册表的方式不太合适,
    上面怎么只是Ctrl-Alt-Delete,那么其他热键呢?如win,alt+esc等等??????
      

  7.   

    以下代码放到标准模块中,然后在窗体模块中就可以引用了
    Option Explicit
    '- 注册表 API 声明...
    Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
    Private Declare Function RegCreateKeyEx Lib "advapi32.dll" 
    Alias "RegCreateKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal Reserved As Long, ByVal lpClass As String, ByVal dwOptions As Long, ByVal samDesired As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, phkResult As Long, lpdwDisposition As Long) As Long
    Private Declare Function RegDeleteKey Lib "advapi32.dll" Alias "RegDeleteKeyA" (ByVal hKey As Long, ByVal lpSubKey As String) As Long
    Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
    Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
    Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
    Private Declare Function RegSaveKey Lib "advapi32.dll" Alias "RegSaveKeyA" (ByVal hKey As Long, ByVal lpFile As String, lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long
    Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long
    Private Declare Function RegQueryInfoKey Lib "advapi32.dll" Alias "RegQueryInfoKeyA" (ByVal hKey As Long, ByVal lpClass As String, lpcbClass As Long, ByVal lpReserved As Long, lpcSubKeys As Long, lpcbMaxSubKeyLen As Long, lpcbMaxClassLen As Long, lpcValues As Long, lpcbMaxValueNameLen As Long, lpcbMaxValueLen As Long, lpcbSecurityDescriptor As Long, lpftLastWriteTime As FILETIME) As Long
    Private Declare Function RegEnumValue Lib "advapi32.dll" Alias "RegEnumValueA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpValueName As String, lpcbValueName As Long, ByVal lpReserved As Long, lpType As Long, lpData As Byte, lpcbData As Long) As Long
    Private Declare Function RegEnumKeyEx Lib "advapi32.dll" Alias "RegEnumKeyExA" (ByVal hKey As Long, ByVal dwIndex As Long, ByVal lpName As String, lpcbName As Long, ByVal lpReserved As Long, ByVal lpClass As String, lpcbClass As Long, lpftLastWriteTime As FILETIME) As Long
    '- 注册表 Api 常数...
    ' 注册表数据类型...
    Const REG_SZ = 1                         ' 字符串值
    Const REG_EXPAND_SZ = 2                  ' 可扩充字符串值
    Const REG_BINARY = 3                     ' 二进制值
    Const REG_DWORD = 4                      ' DWORD值
    Const REG_MULTI_SZ = 7                   ' 多字符串值
    ' 注册表创建类型值...
    Const REG_OPTION_NON_VOLATILE = 0        ' 当系统重新启动时,关键字被保留
    ' 注册表关键字安全选项...
    Const READ_CONTROL = &H20000
    Const KEY_QUERY_VALUE = &H1
    Const KEY_SET_VALUE = &H2
    Const KEY_CREATE_SUB_KEY = &H4
    Const KEY_ENUMERATE_SUB_KEYS = &H8
    Const KEY_NOTIFY = &H10
    Const KEY_CREATE_LINK = &H20
    Const KEY_READ = KEY_QUERY_VALUE + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + READ_CONTROL
    Const KEY_WRITE = KEY_SET_VALUE + KEY_CREATE_SUB_KEY + READ_CONTROL
    Const KEY_EXECUTE = KEY_READ
    Const KEY_ALL_ACCESS = KEY_QUERY_VALUE + KEY_SET_VALUE + KEY_CREATE_SUB_KEY + KEY_ENUMERATE_SUB_KEYS + KEY_NOTIFY + KEY_CREATE_LINK + READ_CONTROL
                         
    ' 注册表关键字根类型...
    Const HKEY_CLASSES_ROOT = &H80000000
    Const HKEY_CURRENT_CONFIG = &H80000005
    Const HKEY_CURRENT_USER = &H80000001
    Const HKEY_DYN_DATA = &H80000006
    Const HKEY_LOCAL_MACHINE = &H80000002
    Const HKEY_PERFORMANCE_DATA = &H80000004
    Const HKEY_USERS = &H80000003' 返回值...
    Const ERROR_NONE = 0
    Const ERROR_BADKEY = 2
    Const ERROR_ACCESS_DENIED = 8
    Const ERROR_SUCCESS = 0'---------------------------------------------------------------
    '- 注册表类型...
    '---------------------------------------------------------------
    Private Type SECURITY_ATTRIBUTES
        nLength As Long
        lpSecurityDescriptor As Long
        bInheritHandle As Boolean
    End TypePrivate Type FILETIME
            dwLowDateTime As Long
            dwHighDateTime As Long
    End Type'------------------------------------------------------------------------
    '- 新建注册表关键字并设置注册表关键字的值...
    '- 如果 ValueName 和 Value 都缺省, 则只新建 KeyName 空项, 无子键...
    '- 如果只缺省 ValueName 则将设置指定 KeyName 的默认值
    '------------------------------------------------------------------------
    Public Function SetKey(KeyRoot As Long, KeyName As String, Optional ValueName As String, Optional Value As Variant = "", Optional ValueType As Long = REG_SZ) As Boolean
    Dim REG As Long                                     ' 注册表打开项的句柄
    Dim Success As Boolean                              ' 测试此次操作是否成功
    Dim lpAttr As SECURITY_ATTRIBUTES                   ' 注册表安全类型
    lpAttr.nLength = 50                                 ' 设置安全属性为缺省值...
    lpAttr.lpSecurityDescriptor = 0                     ' ...
    lpAttr.bInheritHandle = True                        ' ...'------------------------------------------------------------
    '- 新建注册表关键字...
    '------------------------------------------------------------
    Success = RegCreateKeyEx(KeyRoot, KeyName, 0, ValueType, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, lpAttr, REG, 0)
    If Success <> ERROR_SUCCESS Then GoTo SetKeyError    ' 错误处理'------------------------------------------------------------
    '- 设置注册表关键字的值...
    '------------------------------------------------------------
    If IsMissing(ValueName) = False Then
        Select Case ValueType
            Case REG_SZ, REG_EXPAND_SZ, REG_MULTI_SZ
                Success = RegSetValueEx(REG, ValueName, 0, ValueType, ByVal CStr(Value), LenB(StrConv(Value, vbFromUnicode)) + 1)
            Case REG_DWORD
                If CDec(Value) <= 2147483647 And CDec(Value) >= 0 Then
                    Value = Hex(CDec(Value))
                    Value = String(8 - Len(Value), "0") + Value
                    Dim dValue(3) As Byte
                    dValue(0) = Format("&h" + Mid(Value, 7, 2))
                    dValue(1) = Format("&h" + Mid(Value, 5, 2))
                    dValue(2) = Format("&h" + Mid(Value, 3, 2))
                    dValue(3) = Format("&h" + Mid(Value, 1, 2))
                    Success = RegSetValueEx(REG, ValueName, 0, ValueType, dValue(0), 4)
                Else
                    Success = ERROR_BADKEY
                End If
            Case REG_BINARY
                On Error GoTo SetKeyError
                Dim i As Long
                ReDim tmpValue(UBound(Value)) As Byte
                For i = 0 To UBound(tmpValue)
                    tmpValue(i) = Value(i)
                Next i
                Success = RegSetValueEx(REG, ValueName, 0, ValueType, tmpValue(0), UBound(Value) + 1)
        End Select
    End If
    If Success <> ERROR_SUCCESS Then GoTo SetKeyError    ' 错误处理'------------------------------------------------------------
    '- 关闭注册表关键字...
    '------------------------------------------------------------
    RegCloseKey REG
    SetKey = True
    Exit FunctionSetKeyError:
        SetKey = False                                   ' 设置错误返回代码
        RegCloseKey REG                                  ' 关闭注册表关键字
    End Function
      

  8.   

    有谁能介绍一下SetWindowsHookEx钩子函数屏蔽热键的方法和程序,谢谢!
      

  9.   

    在Win2000下屏蔽这三个键很困难。它需要一个动态连接库,不过有时不好使,不知为什么?你可以屏蔽处“取消”之外的所有键也可以 SaveStringWORD HKEY_CURRENT_USER, "software\microsoft\windows\currentversion\policies\system", "DisableTaskMgr", strValue
       SaveStringWORD HKEY_CURRENT_USER, "software\microsoft\windows\currentversion\policies\Explorer", "NoLogoff", strValue
       SaveStringWORD HKEY_CURRENT_USER, "software\microsoft\windows\currentversion\policies\Explorer", "NoClose", strValue
       SaveStringWORD HKEY_CURRENT_USER, "software\microsoft\windows\currentversion\policies\system", "DisableLockWorkstation", strValue
       SaveStringWORD HKEY_CURRENT_USER, "software\microsoft\windows\currentversion\policies\system", "DisableChangePassword", strValue
      

  10.   

    上面只是Ctrl-Alt-Delete,那么其他热键呢?如win,alt+esc等
    除了注册表方法以外难道就没有其他的了 ?
    SetWindowsHookEx函数屏蔽热键呢 ????
      

  11.   

    可用SetWindowsHookEx来实现低级键盘钩子,但在98下不能用的
    在2000下,除了ctrl+alt+del都可以拦截http://www.vbprobe.com/club/dispbbs.asp?boardID=30&replyID=210334&ID=34085&skin=1
    里面有我的原创源代码,如果不明,请回帖