制作一个按钮,使它显示在桌面之上.点击之后显示(ctrl + alt + del)的窗口
可以使用任意编程工具实现,运行平台为XP,谢谢哦!

解决方案 »

  1.   

    private sub form_load()
        setparent command1.hwnd,getdesktopwind()
        me.hide
    end subprivate sub command1_click(...)
        exitwindow xxx,xxx,xxx....
    end sub只是一个思路,因为我这里没有VB
      

  2.   

    谢谢两位帅哥,sakurako(最爱API)哥哥能不能再详细一点呢,小妹资质有限哦
      

  3.   

    Private Declare Sub keybd_event Lib "user32.dll" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)Private Sub Command1_Click()
        keybd_event vbKeyControl, 0, 0, 0
        keybd_event vbKeyShift, 0, 0, 0
        keybd_event vbKeyEscape, 0, 0, 0
        keybd_event vbKeyControl, 0, KEYEVENTF_KEYUP, 0
        keybd_event vbKeyShift, 0, KEYEVENTF_KEYUP, 0
        keybd_event vbKeyEscape, 0, KEYEVENTF_KEYUP, 0
    End Sub已经成功调出 任务管理器
    楼主只需要把程序生成一个快捷方式放在桌面上即可
      

  4.   

    恩,先谢谢lxxldd(菜鸟一个)哥哥,但是的确按扭要显示在桌面上哦,能不能有其他方法啊?
      

  5.   

    好像效果有点不同,因为我在Win2k下试了,并不弹出(ctrl + alt + del)的窗口,而是直接弹出任务管理器。而且用完之后系统有点失常。如果只是为了弹出任务管理器,不如直接运行"taskmgr.exe"就可以了。
      

  6.   

    "制作一个按钮,使它显示在桌面之上"
    ------用无边框窗体,按扭与窗体一样大“(ctrl + alt + del)的窗口”
    -----------Shell "taskmgr.exe"
      

  7.   

    LGYAN(紫衣随想)哥哥,我要我要,告诉我吧!
      

  8.   

    楼主这样我会怕的。不敢说了。呵呵新建一工程,添加一模块,删除窗体,使用Sub main启动,在模块中代码如下:
    Option ExplicitPrivate Declare Function GetDesktopWindow Lib "user32" () As Long
    Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
    Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Declare Sub PostQuitMessage Lib "user32" (ByVal nExitCode As Long)
    Declare Function GetMessage Lib "user32" Alias "GetMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long) As Long
    Declare Function TranslateMessage Lib "user32" (lpMsg As Msg) As Long
    Declare Function DispatchMessage Lib "user32" Alias "DispatchMessageA" (lpMsg As Msg) As Long
    Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
    '  Define information of the window (pointed to by hWnd)
    Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Type POINTAPI
        x As Long
        y As Long
    End Type
    Type Msg
        hWnd As Long
        message As Long
        wParam As Long
        lParam As Long
        time As Long
        pt As POINTAPI
    End TypePublic Const WS_CHILD = &H40000000
    Public Const WM_NULL = &H0
    Public Const WM_CREATE = &H1
    Public Const WM_DESTROY = &H2
    Public Const WM_MOVE = &H3
    Public Const WM_SIZE = &H5
    Public Const GWL_WNDPROC = -4
    Dim hwnd2 As Long, hwnd3 As Long, old_proc As Long, new_proc As Long
    Public Sub Main()
        Dim lngTemp As Long
       
            If MyCreateWindow Then
                new_proc = GetMyWndProc(AddressOf ButtonProc)
                old_proc = SetWindowLong(hwnd2, GWL_WNDPROC, new_proc)
                MyMessageLoop
            End If
    End SubPrivate Function MyCreateWindow() As Boolean
        Dim hWnd As Long
        ' Create the window
        hWnd = GetDesktopWindow
        hwnd2 = CreateWindowEx(0, "Button", "My button", WS_CHILD, 50, 55, 100, 25, hWnd, 0, App.hInstance, ByVal 0&)
        ShowWindow hwnd2, 1
        MyCreateWindow = (hWnd <> 0)
    End FunctionPrivate Function MyWndProc(ByVal hWnd As Long, ByVal message As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Select Case message
            Case WM_DESTROY
                PostQuitMessage (0)
        End Select
        MyWndProc = DefWindowProc(hWnd, message, wParam, lParam)
    End FunctionFunction GetMyWndProc(ByVal lWndProc As Long) As Long
        GetMyWndProc = lWndProc
    End Function
    Private Sub MyMessageLoop()
        Dim aMsg As Msg
        Do While GetMessage(aMsg, 0, 0, 0)
            DispatchMessage aMsg
        Loop
    End Sub
    Private Function ButtonProc(ByVal hWnd As Long, ByVal message As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Dim x As Integer
        If (message = 533) Then
            x = MsgBox("不要再单击我了。", vbOKOnly)
        End If
       
        ButtonProc = CallWindowProc(old_proc, hWnd, message, wParam, lParam)
    End Function