本帖最后由 fuhohua 于 2022-9-3 10:28 编辑
PostThreadMessage声明
[C#] 纯文本查看 复制代码
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool PostThreadMessage(int threadId, uint msg, IntPtr wParam, IntPtr lParam);
Dll部分
[C#] 纯文本查看 复制代码
// 首先通过主程序路径获取主程序进程Id(processId)(这里没有贴出代码)
// 然后发送消息到主程序的主线程
PostThreadMessage(Process.GetProcessById(processId).Threads[0].Id, 2048, IntPtr.Zero, IntPtr.Zero);
主程序部分
让你主程序的Form类继承 IMessageFilter接口,然后实现方法PreFilterMessage
[C#] 纯文本查看 复制代码
public partial class FrmMain : Form, IMessageFilter
{
/// <summary>
/// 过滤消息
/// </summary>
/// <param name="m"></param>
/// <returns></returns>
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == 2048)
{
// 干你想干的
return true;
}
return false;
}
}
在Form类的构造函数添加消息监视
[C#] 纯文本查看 复制代码
public FrmMain()
{
// 添加进程消息监视
MsgFilter msgFilter = new();
Application.AddMessageFilter(msgFilter);
InitializeComponent();
}
|