怎么样才能使窗体能屏闭掉所有的键盘按键,比如Ctrl+Alt+Del,以及所有其它的键盘按键,并使窗体总是停留在最上层!!!

解决方案 »

  1.   

    关于最上层:
    ---- 我们看到有的应用程序不管窗口是否活动都使窗口保持在最上层,常见的Microsoft Word的文件打开和编辑查找窗口就是这样。在VB开发中可以通过调用SetWindowsPos()API函数实现这个功能。该函数声明如下: Private Declare Function SetWindowPos
     Lib "user32" (ByVal hwnd As Long, _
     ByVal hWndInsertAfter As Long, ByVal
     x As Long, ByVal y As Long, _
       ByVal cx As Long, ByVal cy As Long, 
         ByVal wFlags As Long) As Long
    ---- hWnd变元是窗口的句柄;x,y是窗口的左上角的坐标;cx、cy是窗口宽度和高度;hWndInsertAfter变元是窗口清单中hWnd窗口前面的窗口句柄,有四个可选值: 序号 可 选 值 作 用
    1 HWND_BOTTOM 把窗口放在窗口清单的底部
    2 HWND_TOP 把窗口放在窗口清单的字符顺序的顶部
    3 HWND_TOPMOST 把窗口放在窗口清单的顶部
    4 HWND_NOTOPMOST 把窗口放在窗口清单的顶部,最上层窗口之下
    ---- WFlags变元为整型值,有八个可选值: 序号 可  选  值 作   用
    1 SWP_DRAWFRAME 在窗口周围画一个方框
    2 SWP_HIDEWINDOW 隐藏窗口
    3 SWP_NOACTIVATE  不激活窗口
    4 SWP_NOMOVE 保持窗口当前位置
    5 SWP_NOREDRAW 窗口不自动重画
    6 SWP_NOSIZE  保持窗口当前尺寸
    7 SWP_NOZORDER 保持窗口在窗口清单中的当前位置
    8 SWP_SHOWWINDOW 显示窗口
    ---- 下面的例子程序Test演示了对函数中的以上7个变元作正确的选择后,应用程序运行后窗口总可保持在最上层,程序清单如下: Option Explicit
    Private Declare Function SetWindowPos
    Lib "user32" (ByVal hwnd As Long, _
     ByVal hWndInsertAfter As Long,
     ByVal x As Long, ByVal y As Long, _
       ByVal cx As Long, ByVal cy As Long,
         ByVal wFlags As Long) As Long
    Private Const HWND_TOPMOST = -1
    Private Const SWP_SHOWWINDOWS = &H40Private Sub Form_Load()
    Dim retValue As Long
    retValue = SetWindowPos(Me.hwnd,
     HWND_TOPMOST, Me.CurrentX, _
     Me.CurrentY, 300, 300, SWP_SHOWWINDOWS)
    End Sub关于屏敝:
    禁止使用 Alt-Tab 或 Ctrl-Alt-Del   
           
    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 LongPrivate 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禁止 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, FalPS:分数拿来
      

  2.   

    锁定所有键盘
    moudle:
    Option ExplicitDeclare Function SetWindowsHookEx Lib "user32" Alias _
    "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
    ByVal hmod As Long, ByVal dwThreadId As Long) As Long
    Declare Function UnhookWindowsHookEx Lib "user32" _
    (ByVal hHook As Long) As Long
    Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, _
    ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As LongPublic hnexthookproc As Long
    Public Const HC_ACTION = 0
    Public Const WH_KEYBOARD = 2Public Sub UnHookKBD()
    If hnexthookproc <> 0 Then
    UnhookWindowsHookEx hnexthookproc
    hnexthookproc = 0
    End If
    End Sub
    Public Function EnableKBDHook()
    If hnexthookproc <> 0 Then
    Exit Function
    End If
    hnexthookproc = SetWindowsHookEx(WH_KEYBOARD, AddressOf _
    MyKBHFunc, App.hInstance, 0)
    If hnexthookproc <> 0 Then
    EnableKBDHook = hnexthookproc
    End If
    End Function
    Public Function MyKBHFunc(ByVal iCode As Long, _
    ByVal wParam As Long, ByVal lParam As Long) As Long
    '这叁个参数是固定的,不能动,而MyKBHFunc这个名称只要和
    'SetWindowsHookex()中 AddressOf後的名称一样便可,不一定叫什麽
    'wParam 是传入按了哪个key的virtual-key code'如果您将以下的两行un则所有键盘的输入皆没有作用
    MyKBHFunc = 1 '吃掉讯息
    'Exit FunctionMyKBHFunc = 0 '讯息要处理
    If iCode < 0 Then
    MyKBHFunc = CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
    Exit Function
    End If
    If wParam = vbKeySnapshot Then '侦测 有没有按到PrintScreen键
    MyKBHFunc = 1 '在这个Hook便吃掉这个讯息
    Debug.Print "haha"
    Else
    Call CallNextHookEx(hnexthookproc, iCode, wParam, lParam)
    End If
    End Functionform
    '以下在Form
    Private Sub Form_Load()
    Call EnableKBDHook
    End SubPrivate Sub Form_Unload(Cancel As Integer)
    Call UnHookKBD
    End Sub
      

  3.   

    不过,我好像做过一个屏保程序,鼠标与键盘操作,好像都要先输入密码才能回到WINDOWS桌面,但是源代码不见了,好像不一定要屏闭什么shift+CTRL+Alt键的!
      

  4.   

    在NT(2000)下无法屏蔽shift+CTRL+Alt,这是调用任务管理器的,是系统最优级的服务,也许只有微软自己知道如果屏蔽。
      

  5.   

    都让楼上的说了那我就不说了,不过利用API函数还是比较方便的。
      

  6.   

    其實也有方法可以實現屏敞ctrl+alt+del鍵的,我試過,可以不讓進程管理器出現是可以,但不能阻止登入窗口的出現,如果只是不想讓程序在進程管理器裡出現,是可以實現的