先抓取当前图象,作为窗体的背景,窗体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)
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
Private Sub Form_Load()
Dim myval As Long
myval = SystemParametersInfo(97, True, CStr(1), 0)
End Sub
Private 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
这个程序不能屏蔽开始快捷键
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,线段终点位置,采用逻辑坐标表示。这个点不会实际画出来;它不属于线段的一部分
注解
如重复调用这个函数和一个几何画笔,从而创建一系列线段,那么除非在一个路径的场景中调用,否则不会认为这些线段已结合到一起