博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c#中将WM_CLOSE消息发送到没有窗口的进程的方法
阅读量:4303 次
发布时间:2019-05-27

本文共 1723 字,大约阅读时间需要 5 分钟。

开始一个过程-

 

ProcessStartInfo psi = new ProcessStartInfo("G:\SampleWinApp.exe");             psi.UseShellExecute = false; psi.CreateNoWindow = true;             Process prcs = Process.Start(psi);复制代码

使用PostMessage发送

 

const int WM_CLOSE = 0x0010;public void SendCloseSignal(Process proc){    uint uiPid = (uint) proc.Id;    bool bResult = EnumWindows(new WNDENUMPROC(EnumWindowsProc), uiPid);    if (!bResult && Marshal.GetLastWin32Error() == 0) {        object objWnd = processWnd[uiPid];        if (objWnd != null) {            IntPtr ptrWnd = (IntPtr) objWnd;            PostMessage(ptrWnd, WM_CLOSE, 0, 0);            return;        }    }    foreach (ProcessThread thread in proc.Threads) {        PostThreadMessage((uint) thread.Id, WM_CLOSE, UIntPtr.Zero, IntPtr.Zero);    }}private static bool EnumWindowsProc(IntPtr hwnd, uint lParam){    uint uiPid = 0;    if (GetParent(hwnd) == IntPtr.Zero)    {        GetWindowThreadProcessId(hwnd, ref uiPid);        if (uiPid == lParam)        {            processWnd[uiPid] = hwnd;            return false;        }    }    return true;} 复制代码

使用CreateNoWindow = false启动exe,发送WM_CLOSE消息,并正常关闭应用程序.

如果CreateNoWindow = true,则WM_CLOSE消息永远不会到达进程.甚至PostThreadMessage似乎也不起作用.有什么方法可以发送WM_CLOSE消息?我有一天要寻找解决办法,..不走运.

编辑:为每个应用程序都安装了Windows服务.启动/停止服务将启动/停止应用程序.目前,我们在服务停止时终止了该应用程序.由于其残酷的杀伤力,应用程序无法正常终止.一些应用程序监听.现在,我只需要一些方法即可将WM_CLOSE消息发送到这些应用程序.

Edit2:如果存在窗口,则WM_CLOSE会触发.但是,当任何进程以CreateNoWindow = true启动时,都不会触发.

最佳答案

Is there any way to send WM_CLOSE message?

WM_CLOSE发送到窗口.如果在此过程中没有窗口,则没有任何可处理的消息.如果您希望关闭没有窗口的进程,那么发送WM_CLOSE不是解决方案.

看来您只是想终止进程.当控制台进程具有关联的窗口时,您将使用WM_CLOSE消息来触发CTRL_CLOSE_EVENT信号.

由于CTRL_CLOSE_EVENT已经是杀死进程的一种相当残酷的方式,因此,我认为完全可以证明杀死它是合理的.您已经有一个Process对象.只需使用Process.Kill()将其杀死.

转载地址:http://fclws.baihongyu.com/

你可能感兴趣的文章
期货市场技术分析07_摆动指数和相反意见理论
查看>>
满屏的指标?删了吧,手把手教你裸 K 交易!
查看>>
不吹不黑 | 聊聊为什么要用99%精度的数据回测
查看>>
X 分钟速成 Python
查看>>
对于模拟交易所引发的思考
查看>>
高频交易的几种策略
查看>>
量化策略回测TRIXKDJ
查看>>
量化策略回测唐安奇通道
查看>>
CTA策略如何过滤部分震荡行情?
查看>>
量化策略回测DualThrust
查看>>
量化策略回测BoolC
查看>>
量化策略回测DCCV2
查看>>
mongodb查询优化
查看>>
五步git操作搞定Github中fork的项目与原作者同步
查看>>
git 删除远程分支
查看>>
删远端分支报错remote refs do not exist或git: refusing to delete the current branch解决方法
查看>>
python multiprocessing遇到Can’t pickle instancemethod问题
查看>>
APP真机测试及发布
查看>>
通知机制 (Notifications)
查看>>
10 Things You Need To Know About Cocoa Auto Layout
查看>>