怎样用VB才能使所有的键盘按键失效?就象死机一样?能给出详细程序吗?最好是98和2000下都能可以用的

解决方案 »

  1.   

    'form1 ,需要一个 Command1 和一个 text1
    Private Sub Command1_Click()
    Dim str5 As String, len5 As Long, i As LongCall EnableHook
    str5 = "ÕâÊÇÒ»¸ö²âÊÔJournalPlayBackHookµÄ³Ìʽ"
    len5 = Len(str5)
    For i = 1 To len5
    Text1.Text = Mid(str5, 1, i)
    Text1.Refresh
    Sleep (200)
    Next
    Call FreeHook
    End Sub
    'module1 :
    Declare Sub Sleep Lib "KERNEL32" (ByVal dwMilliseconds As Long)
    Const WM_MOUSELAST = &H209
    Const WM_MOUSEFIRST = &H200
    Public Const WM_KEYLAST = &H108
    Public Const WM_KEYFIRST = &H100
    Public Const WH_JOURNALRECORD = 0
    Public Const WH_JOURNALPLAYBACK = 1Type EVENTMSG
    message As Long
    paramL As Long
    paramH As Long
    time As Long
    hwnd As Long
    End Type
    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
    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 Long
    Public hNxtHook As Long ' handle of Hook Procedure
    Public msg As EVENTMSGSub EnableHook()
    hNxtHook = SetWindowsHookEx(WH_JOURNALPLAYBACK, AddressOf HookProc, App.hInstance, 0)
    End Sub
    Sub FreeHook()
    Dim ret As Long
    ret = UnhookWindowsHookEx(hNxtHook)
    End Sub
    Function HookProc(ByVal code As Long, ByVal wParam As Long, _
    ByVal lParam As Long) As Long
    HookProc = CallNextHookEx(hNxtHook, code, wParam, lParam)
    End Function
      

  2.   

    有一个最好的办法,你不防试一下,在用之前一定要小心!Enablehardwareinput(false)
      

  3.   

    注意,这两种方法都会使鼠标失灵。到时候可能只能按电源键了。问一下:二楼用CallNextHookEx了,会死机吗?
      

  4.   

    Enablehardwareinput(false)
    指教一下,从来没看到过。
      

  5.   

    不用这么麻烦,用两个API函数就可以了。
    一个是getdesktopwindow() enablewindow()
    具体代码:
    dim a as long 
    a=getdesktopwindow()
    call cnablewindow(a)
    这样无论你是键盘还MOUSE,都不能用。
      

  6.   

    谢谢wxy_xiaoyu的代码,不瞒你说,这段代码在我买的一本书《VB编程技巧280例》中有过记载,其实str5="ÕâÊÇÒ»¸ö²âÊÔJournalPlayBackHookµÄ³Ìʽ"中的这段乱码,可以改成任意文字,只要这段文字在text1中显示完后,键盘鼠标便可以使用,但是你可以试一下,在程序运行过程中,按Num lock,Scroll lock,Caps lock这三个键,指示灯会亮,按Print Sscreen Sysrq会截屏幕图片,按Ctrl+Esc会出现开始菜单,按Ctrl+Alt+Delete会……也许还会有其他的什么键好用吧,我不知道了,对不起,或许是我的问题没有提清楚,但还是要谢谢你!
      

  7.   

    TO:efei4000请你详细解释一下Enablehardwareinput(false)好吗?能给出范例吗?谢谢了!
      

  8.   

    TO:pigpag关于CallNextHookEx,我在2000下是没有死过,不过别的什么系统我记不知道了。
      

  9.   

    public Declare Function EnableHardwareInput Lib "User" (byval bEnableInput) as longdim l as longl=enablehardwareinput(false) '禁止l=enablehardwareinput(true) '允许如果行,记得给分我了!:)
      

  10.   

    efei4000(何浩然) 同志:    你的方法不行吆!无论在9x还是在2k/xp下都不管用。
      

  11.   

    顶楼的方法在NT下面应该是不行的。在9x下面应该是可以的。
      

  12.   

    顶楼的方法在2000下面应该是可以的只是在程序运行过程中,按Num lock,Scroll lock,Caps lock这三个键,指示灯会亮,按Print Sscreen Sysrq会截屏幕图片,按Ctrl+Esc会出现开始菜单,按Ctrl+Alt+Delete会……也许还会有其他的什么键好用我不知道了。
      

  13.   

    efei4000(何浩然)好象真不太好用,能给出范例吗?谢谢!
      

  14.   

    请输入如下代码(自己写的声明,错了请指教)Option ExplicitPrivate Declare Function BlockInput Lib "user32" (ByVal bBlock As Boolean) As BooleanPrivate Sub Form_Load()
        Timer1.Interval = 10000
        Timer1.Enabled = True
        BlockInput True
    End SubPrivate Sub Timer1_Timer()
        BlockInput False
        Timer1.Enabled = False
    End Sub
    任何输入都失效,除了一个:CTRL+ALT+DEL
    对于这个,你可以参考其它地方诸如游戏程序等
    屏蔽系统热键的文章。
    注意:必须有个Timer1控件,且设为Enabled = True,
    Interval 根据你需要“死机”多长时间来设。运行。
      

  15.   

    xiaoxpyao(逍遥小妖):“TO:pigpag关于CallNextHookEx,我在2000下是没有死过,不过别的什么系统我记不知道了。”您误会我了。你用了CallNextHookEx就把键盘钩子传递下去了,程序就能接收到键盘事件,应该是不会“死机”。我是想问问用了CallNextHookEx还会实现楼主的效果吗?
      

  16.   

    不好意思,我也误会你了,用CallNextHookEx严格的说,是不符合“死机”效果的。