如何使用VB.Net或C#.Net关闭回收站

如何使用VB.Net或C#.Net关闭回收站,c#,vb.net,C#,Vb.net,我想调用一个关闭回收站窗口的函数。这是打开回收站的代码,但我找不到关闭回收站的代码: Process.Start("explorer.exe", "/n, ::{645FF040-5081-101B-9F08-00AA002F954E}") Process.Start返回已启动的流程。试试这个: Process p=Process.Start("explorer.exe", "/n, ::{645FF040-5081-101B-9F08-00AA002F954E}

我想调用一个关闭回收站窗口的函数。这是打开回收站的代码,但我找不到关闭回收站的代码:

Process.Start("explorer.exe", "/n, ::{645FF040-5081-101B-9F08-00AA002F954E}")

Process.Start
返回已启动的
流程。试试这个:

Process p=Process.Start("explorer.exe", 
              "/n, ::{645FF040-5081-101B-9F08-00AA002F954E}");
p.CloseMainWindow();
//OR
p.Close();

如果它已被其他人打开,您可能需要使用win32 api-例如findwindow然后sendmessage来发送关闭消息。

以及指定您需要使用和api来查找然后关闭窗口

下面是一个示例代码

Imports System.Runtime.InteropServices

Public Class Form1

    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    End Function

    <DllImport("user32.dll", SetLastError:=True)> _
    Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
    End Function

    Public Const WM_SYSCOMMAND As Integer = &H112
    Public Const SC_CLOSE As Integer = &HF060



    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim hwnd As IntPtr

        hwnd = FindWindow("CabinetWClass", "Recycle Bin")


        if hwnd = Nothing then
             MessageBox.Show("Recycle Bin not found.")
        else
             SendMessage(hwnd, WM_SYSCOMMAND, SC_CLOSE, 0)
        end if

    End Sub
End Class
导入System.Runtime.InteropServices
公开课表格1
_
私有共享函数FindWindow(ByVal lpClassName作为字符串,ByVal lpWindowName作为字符串)作为IntPtr
端函数
_
公共共享函数SendMessage(ByVal hWnd作为IntPtr,ByVal Msg作为Integer,ByVal wParam作为IntPtr,ByVal lParam作为IntPtr)作为IntPtr
端函数
Public Const WM_SYSCOMMAND作为整数=&H112
Public Const SC_CLOSE为整数=&HF060
私有子表单1_Load(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理MyBase.Load
作为IntPtr的Dim hwnd
hwnd=FindWindow(“橱柜类”、“回收站”)
如果hwnd=无,则
MessageBox.Show(“未找到回收站”)
其他的
SendMessage(hwnd,WM_SYSCOMMAND,SC_CLOSE,0)
如果结束
端接头
末级
将代码转换为c#非常简单,如果在转换代码时遇到任何问题,请告诉我

资料来源:


编辑1:您可以使用Spy++查找.net工具提供的类名和窗口名。

我刚刚尝试过。在我的设置中,似乎只有p.Kill()起作用。谢谢你的回答,但是当从程序外部打开回收站时,这不起作用。因此,如果用户双击它,那么我无法到达进程来关闭它。必须有一些Shell函数来完成这项工作,但我似乎找不到它