再那个帖子里我回答了如何彻底的杀死开始菜单,遗憾的是我不知道如何重新打开,实际上我觉得应该采用全局hook,如果不允许运行其他程序,我觉得必须做到
1)禁止开始菜单
2)禁止ctrl+alt+del,因为xp,2k能够用taskmgr.exe运行程序
3)禁止alt+tab
4)窗体全屏而且总在最前而且不能最小化不能移动
...

解决方案 »

  1.   

    '这个程序能够完全禁止开始菜单,而且能够恢复开始菜单,ctrl+esc和win键都不管用,但是在xp,2k下还是能够通过taskmgr.exe(任务管理器)运行新的程序,所以还要禁止ctrl+alt+del。Option Explicit
    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
      

  2.   

    有一个外国人做的DLL很好用,禁止了一切。
      

  3.   

    Attribute VB_Name = "DisableCtrlAltDelM"
    '屏蔽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
      

  4.   

    dingyanwei的程序只能在98,me下有效,在2k,xp下无效,有的人说修改注册表能够实现,但是我照例操作就不管用。
      

  5.   

    开始菜单就是一个类名为"basebar",标题为空的窗体
    只要用Findwindow查找一个类名为"basebar"标题为空的窗体再向它发送WM_close消息就行了sendmessage findwinodw ("basebar",""),&h10,0,0
    就搞定了!
    API声明自己加把自己的窗体提前只要先把窗体的位置提到最顶,再设置一个计时器,不停的激活自身这个窗体就行了!好像激活窗体VB里有自带函数。activewindow吧?
      

  6.   

    FUNDGIRL(阿弥陀佛) ( ) 
    怎么能得到应用程序的类名!
      

  7.   

    看来,我上面的问题解答错了,没注意,这个好使,不论是什么,呵呵。'隐藏、显示任务栏
    '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
      

  8.   

    噢对了,还有一招,就是加一个透明窗体罩在屏幕上,然后屏蔽鼠标和按键,至于2000下ctrl+alt+del嘛,还是有方法解决的。在csdn你面一搜很多,我就不转帖了。
      

  9.   

    用几个API就行了
    FindWindow//这个用来找任务条句柄
    FindWindowEx//这个用来找任务条中的开始按钮的句柄
    ShowWindow//这个用来设定是否显示这个按钮
    EnableWindow//这个用来设定是否可以使用该按钮
    至于怎么找上面的两个句柄,用SPY查看这两个窗口类吧。
      

  10.   

    SPY查不到开始菜单的类的!嘿嘿
      

  11.   

    怎么找不到?不就是Button吗?
      

  12.   

    我说菜单啊!不是开始按钮啊
    不过我已经把开始菜单的类找出来了。是"basebar"
    大家不用查喽。
      

  13.   

    楼主为何还不结贴啊?我已经给出了绝对可用的代码!sendmessage findwinodw ("basebar",""),&h10,0,0
    sendmessage函数和findwindow函数声明就不用我加了吧??
      

  14.   

    在Windows 95/98下可以使用SystemParametersInfo(SPI_SCREENSAVERRUNNING)使Windows认为你的程序是个屏幕保护程序,从而禁止程序切换。 
        具体做法是: 
        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。
      

  15.   

    各位高手听我一言不知各位注意过Win2000的启动没有,它要求你按 Ctrl+Alt+Del 登录,为什么?
    答案是:为了安全
    因为在NT内核下,只有系统核心才能截获 Ctrl+Alt+Del 这个组合键
    换句话说,在NT/2000/XP下,是不可能彻底禁止 Ctrl+Alt+Del 的,如果有人做到了,也一定是在Windows加截前加载的
    个人意见,有错请指出
      

  16.   

    to  jennyvenus()你能否把你的那个帖子地址写在上面