我是一个VB新手,想学习API,
特请高手帮助我编一个屏幕锁定程序

http://www.hktk.com/soft/soft_desktool/pingmusd.html
功能差不多的软件源代码

解决方案 »

  1.   

    看了那个程序,她只是锁定了鼠标,键盘仍然可以使用,好象还有点不完善!而且,鼠标在用键盘新开启的程序中失去了原来的效果!我分析她的功能可能是使用了回调函数截获了windows的鼠标消息,然后通过getdc(0)的方法得到桌面的hDC,然后使用lineto划线。在启动程序之初,可能使用EnumWindows枚举了所有的窗口!
    EnumWindows VB声明 
    Declare Function EnumWindows& Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) 
    说明 
    枚举窗口列表中的所有父窗口(顶级和被所有窗口) 
    返回值 
    Long,非零表示成功,零表示失败 
    参数表 
    参数 类型及说明 
    lpEnumFunc Long,指向为每个子窗口都调用的一个函数的指针。用AddressOf运算符获得函数在标准模式下的地址 
    lParam Long,在枚举期间,传递给dwcbkd32.ocx定制控件之EnumWindows事件的值。这个值的含义是由程序员规定的 
    注解 
    我的理解——在随vb5同时提供的api32.txt文件中,找不到这个函数
     GetDC VB声明 
    Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long 
    说明 
    获取指定窗口的设备场景 
    返回值 
    Long,指定窗口的设备场景句柄,出错则为0 
    参数表 
    参数 类型及说明 
    hwnd Long,将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC 
    注解 
    若窗口所属类具有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式,则获取的设备场景属窗口或类专有。vb的窗体和图片框控件也是这种情况,它用该函数取得的结果和控件的hdc属性相同(在autoredraw为FALSE时)。您无须考虑取回的窗体或图片框控件设备场景的默认状态,特别是绘图对象。另外,默认状态随着窗体和控件autoredraw属性的设置而不同。在设备场景释放前您必须回复其状态为初始值。对于没有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式的窗口的设备场景,可从通用windows缓存中获取,其状态为默认值。缓存中可用设备场景数量是有限的,因此只要可能就释放设备场景
    用本函数获取的设备场景一定要用ReleaseDC函数释放,不能用DeleteDC
     ReleaseDC VB声明 
    Declare Function ReleaseDC Lib "user32" Alias "ReleaseDC" (ByVal hwnd As Long, ByVal hdc As Long) As Long 
    说明 
    释放由调用GetDC或GetWindowDC函数获取的指定设备场景。它对类或私有设备场景无效(但这样的调用不会造成损害) 
    返回值 
    Long,执行成功为1,否则为0 
    参数表 
    参数 类型及说明 
    hwnd Long,要释放的设备场景相关的窗口句柄 
    hdc Long,要释放的设备场景句柄 
    注解 
    对那些用CreateDC一类的DC创建函数生成的设备场景,不要用本函数
     LineTo VB声明 
    Declare Function LineTo Lib "gdi32" Alias "LineTo" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long 
    说明 
    用当前画笔画一条线,从当前位置连到一个指定的点。这个函数调用完毕,当前位置变成x,y点 
    返回值 
    Long,非零表示成功,零表示失败 
    参数表 
    参数 类型及说明 
    hdc Long,设备场景的句柄 
    x,y Long,线段终点位置,采用逻辑坐标表示。这个点不会实际画出来;它不属于线段的一部分 
    注解 
    如重复调用这个函数和一个几何画笔,从而创建一系列线段,那么除非在一个路径的场景中调用,否则不会认为这些线段已结合到一起
     
      

  2.   

    这有什么用啊?
    Windows就有这个功能
      

  3.   

    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 Sub Form_Load()
      Dim myval As Long
      myval = SystemParametersInfo(97, True, CStr(1), 0)
    End SubPrivate Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
      If Text1.Text = "12345" And KeyCode = vbKeyReturn Then
         Dim myval As Long
         myval = SystemParametersInfo(97, False, CStr(1), 0)
         End
      End If
    End Sub
    这个程序不能屏蔽开始快捷键
      

  4.   

    用Visual Basic设计Windows门禁程序
    http://www.yesky.com/20020122/214855.shtml
      

  5.   

    如果只是想“锁定屏幕”,可以用LockWindowUpdate,锁定桌面内容的更新
    如果是想“锁定操作”,可以用BlockInput。
      

  6.   

    先抓取当前图象,作为窗体的背景,窗体enable=false,模式全屏,然后:
    ''''''''''''''''禁止使用 Alt-Tab 或 Ctrl-Alt-Del
    Private Declare Function EnableWindow Lib "user32" (ByVal hWnd As Short, ByVal aBOOL As Short) As Short
    Private Declare Function IsWindowEnabled Lib "user32" (ByVal hWnd As Short) As Short
    Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Short) As Short
    Private Declare Function FindWindow Lib "user32"  Alias "FindWindowA"(ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
    Private Declare Function SystemParametersInfo Lib "user32"  Alias "SystemParametersInfoA"(ByVal uAction As Integer, ByVal uParam As Integer, ByVal lpvParam As Any, ByVal fuWinIni As Integer) As Integer

    Private TaskBarhWnd As Integer
    Private IsTaskBarEnabled As Short
    Private TaskBarMenuHwnd As Short
    Const SPI_SCREENSAVERRUNNING As Short = 97
    '禁止或允许使用 Alt-Tab
    Sub FastTaskSwitching(ByRef bEnabled As Boolean)
    Dim X, bDisabled As Integer
    bDisabled = Not bEnabled
    X = SystemParametersInfo(97, bDisabled, CStr(1), 0)
    End Sub
    '禁止使用Ctrl-Alt-Del
    Public Sub DisableTaskBar()
    Dim EWindow As Short
    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


    Public Sub EnableTaskBar()
    '允许使用Ctrl -Alt - Del
    If IsTaskBarEnabled = 0 Then
    IsTaskBarEnabled = EnableWindow(TaskBarhWnd, 1)
    End If
    End Sub
    用法:
    '禁止c+a+d
    Dim pOld As String
    Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, pOld, 0)

    Call SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, pOld, 0)至于详细怎么写看你自己的了(注意:如果程序退出前仍没有解除禁用,那么程序退出后仍有作用,除非重启!)
      

  7.   

    一个例子:
    http://www.applevb.com/sourcecode/lockcmp.zip