使用 .net 监视非托管程序
Monitoring Unmanaged program using .net
我有一个使用 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 管理规范来跟踪各种特定流程事件。
相关文章:
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- 是否有可能构建面向Linux和Windows的.Net Core C++ / CLI应用程序?
- .NET核心应用程序无法加载C++DLL
- 在.NET Core 3.1中运行托管C++/CLI程序集时,映像格式错误
- 生成.NET包装程序需要源代码吗
- 用C++编写.Net窗口应用程序
- JIT 编译器及其在 C++ 前面加快 .NET 中程序执行速度的好处
- 我可以在 vb.net Windows 窗体应用程序中使用 COLECONTROLModule 吗?
- 将简单的程序从C++移植到 vb.net
- 从 C++ 运行 .NET 应用程序
- .Net应用程序SideBySide加载失败COMException(0x80040154)
- 如何为64位应用程序注册.NET DLL
- 在没有.NET框架的情况下运行.NET EXE应用程序
- 使用 .NET 4.5 和混合程序集时出现未知异常
- 如何使用 C# 在网页 asp.net 显示 C 程序错误
- 将 .NET C# 程序集成到已编译(非托管)C++程序中(无需执行单独的.exe文件)
- 从C#.NET应用程序调用C/C 代码
- .NET:如何以编程方式确定是否已编译 .NET 应用程序
- 为什么每次生成时,本地 .NET 程序集在引用列表中(几乎)都显示为损坏
- 如何从C++程序(.NET 4)运行regasm.exe