使用 .net 监视非托管程序

Monitoring Unmanaged program using .net

本文关键字:程序 net 监视 使用      更新时间:2023-10-16


我有一个使用 c++ 编写的 exe 程序,
我想在exe opened, closed or minimized
时执行一些操作我想知道使用c#.net是否可以使用这种功能?

您可以发送Windows消息。还可以使用管道名称控制窗口

A simple message pump looks like this:
[Serializable, StructLayout(LayoutKind.Sequential)]
public struct MSG
{
    public IntPtr hwnd;
    public int message;
    public IntPtr wParam;
    public IntPtr lParam;
    public int time;
    public int pt_x;
    public int pt_y;
}
[DllImport("user32.dll", CharSet = CharSet.Ansi)]
public static extern bool GetMessage([In, Out] ref MSG msg, IntPtr hWnd, int MsgFilterMin,  int uMsgFilterMax);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr DispatchMessage([In] ref MSG msg);

[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
public static extern uint RegisterWindowMessage(string lpString);
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);

    // #1
    MSG msg = new MSG();
    while (GetMessage(ref msg, IntPtr.Zero, 0, 0))
    {
        DispatchMessage(ref msg);
    }
    // #2
    uint UWM_UART_CTRL_TRS = Win32Api.RegisterWindowMessage("BT_UARTCTRL_TRANSFER");
    Win32Api.SendMessage(HWND_BROADCAST, UWM_UART_CTRL_TRS, (IntPtr)0, (IntPtr)0);
    // #3
    uint UWM_UART_CTRL_TRS = Win32Api.RegisterWindowMessage("BT_UARTCTRL_TRANSFER");
    Win32Api.SendMessage(HWND_BROADCAST, UWM_UART_CTRL_TRS, (IntPtr)1, (IntPtr)0);

本机 .NET Process类具有用于在进程关闭时触发的事件的功能。

本文还部分讨论了 C# 中的进程监视。

考虑到这一点,您必须使用 Windows 管理规范来跟踪各种特定流程事件。