在c#中使用WM_Close

Anu*_*uya 0 c#

我使用以下代码以编程方式退出进程.因为我对这个概念不熟悉.我想知道如何使用下面的代码.

逻辑:我将终止进程名称,我shud将其分配给此函数.

如果想终止记事本,如何将参数[Process Name]传递给这个函数?

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
    static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
    static uint WM_CLOSE = 0xF060;

    public void CloseWindow(IntPtr hWindow)
    {
        SendMessage(hWindow, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
    }
Run Code Online (Sandbox Code Playgroud)

Meh*_*ari 5

使用Process.CloseMainWindow而不是手动发送消息.这会将消息发送到进程的主窗口:

using System.Diagnostics;
// ...

foreach (var process in Process.GetProcessesByName("notepad.exe"))
    process.CloseMainWindow();
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用MainWindowHandle获取a主窗口的句柄Process并向其发送消息:

foreach (var process in Process.GetProcessesByName("notepad.exe"))
    CloseWindow(process.MainWindowHandle); // CloseWindow is defined by OP.
Run Code Online (Sandbox Code Playgroud)

如果你想立即终止进程而不是关闭主窗口,这不是一个好方法.您应该使用该Process.Kill方法.

  • `CloseMainWindow`只是将`WM_Close`发送到进程的主窗口.如果你想手动执行此操作,请使用`MainWindowHandle`获取句柄并手动将消息发送到该HWND.然而,这个所谓的需求是非常愚蠢的,并且有了这个逻辑,你不应该使用.NET库中的任何东西并自己重新发明一切. (2认同)