再那个帖子里我回答了如何彻底的杀死开始菜单,遗憾的是我不知道如何重新打开,实际上我觉得应该采用全局hook,如果不允许运行其他程序,我觉得必须做到
1)禁止开始菜单
2)禁止ctrl+alt+del,因为xp,2k能够用taskmgr.exe运行程序
3)禁止alt+tab
4)窗体全屏而且总在最前而且不能最小化不能移动
...
。
1)禁止开始菜单
2)禁止ctrl+alt+del,因为xp,2k能够用taskmgr.exe运行程序
3)禁止alt+tab
4)窗体全屏而且总在最前而且不能最小化不能移动
...
。
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Dim task As Long
Dim win As Long
Dim bswap As BooleanPrivate Sub Command1_Click()
If Not bswap Then
SetParent win, Me.hwnd
ShowWindow win, 0
Else
SetParent win, task
ShowWindow win, 1
End If
bswap = Not bswap
End SubPrivate Sub Form_Load()
task = FindWindow("Shell_TrayWnd", vbNullString)
If task Then
win = FindWindowEx(task, 0, "Button", vbNullString)
If win Then
Else
MsgBox "没有找到开始按钮"
Unload Me
End If
Else
MsgBox "没有找到任务栏"
Unload Me
End If
End SubPrivate Sub Form_Unload(Cancel As Integer)
If bswap Then
SetParent win, task
ShowWindow win, 1
End If
End Sub
'屏蔽Windows快捷键和热启动
'dyw
'2002.10.30'DisableCtrlAltDel(Boolean)' Used for DisableCtrlAltDelete
Private Const SPI_SETDESKWALLPAPER = 20&
Private Const SPIF_UPDATEINIFILE = 0
Private Const SPIF_SENDWININICHANGE = 2
Private Declare Function GetProfileString Lib "kernel32" Alias "GetProfileStringA" (ByVal lpAppName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long) As Long
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName 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 Long
Public Sub DisableCtrlAltDel(bDisabled As Boolean)
' 禁止或恢复Ctrl+Alt+Del键和Ctrl+Esc键的使用
Dim x As Long
x = SystemParametersInfo(97, bDisabled, CStr(1), 0)End Sub
只要用Findwindow查找一个类名为"basebar"标题为空的窗体再向它发送WM_close消息就行了sendmessage findwinodw ("basebar",""),&h10,0,0
就搞定了!
API声明自己加把自己的窗体提前只要先把窗体的位置提到最顶,再设置一个计时器,不停的激活自身这个窗体就行了!好像激活窗体VB里有自带函数。activewindow吧?
怎么能得到应用程序的类名!
'dyw
'2002.10.30'使用 HideTaskbar(True)
'显示、隐藏任务栏
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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 LongPrivate Const SWP_HIDEWINDOW = &H80
Private Const SWP_SHOWWINDOW = &H40'隐藏任务栏
Public Sub HideTaskBar(Flag As Boolean) rtn = FindWindow("Shell_traywnd", "") '获得窗口
If Flag = True Then
Call SetWindowPos(rtn, 0, 0, 0, 0, 0, SWP_HIDEWINDOW) '隐藏任务栏
Else
Call SetWindowPos(rtn, 0, 0, 0, 0, 0, SWP_SHOWWINDOW) '显示任务栏
End If
End Sub
FindWindow//这个用来找任务条句柄
FindWindowEx//这个用来找任务条中的开始按钮的句柄
ShowWindow//这个用来设定是否显示这个按钮
EnableWindow//这个用来设定是否可以使用该按钮
至于怎么找上面的两个句柄,用SPY查看这两个窗口类吧。
不过我已经把开始菜单的类找出来了。是"basebar"
大家不用查喽。
sendmessage函数和findwindow函数声明就不用我加了吧??
具体做法是:
1、设置窗体的BorderStyle为None,WindowState为最大化。这样是为了遮盖住其他软件。
2、使用下面的函数定义:
Private 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 lngRet As Long
Dim blnOld As Boolean
lngRet = SystemParametersInfo(SPI_SCREENSAVERRUNNING, True, _
blnOld, _
0&)
允许切换时,使用:
Dim lngRet As Long
Dim blnOld As Boolean
lngRet = SystemParametersInfo(SPI_SCREENSAVERRUNNING, False, _
blnOld, _
0&)
这个方法只适用于Win9x。
答案是:为了安全
因为在NT内核下,只有系统核心才能截获 Ctrl+Alt+Del 这个组合键
换句话说,在NT/2000/XP下,是不可能彻底禁止 Ctrl+Alt+Del 的,如果有人做到了,也一定是在Windows加截前加载的
个人意见,有错请指出