c#中将WM_CLOSE消息发送到没有窗口的进程的方法
开始一个过程-
ProcessStartInfo psi = new ProcessStartInfo("G:\SampleWinApp.exe"); psi.UseShellExecute = false;psi.CreateNoWindow = true; Process prcs = Process.Start(psi);
复制代码
使用PostMessage发送WM_CLOSE
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服务.启动/停止服务将启动/停止应用程序.目前,我们在服务停止时终止了该应用程序.由于其残酷的杀伤力,应用程序无法正常终止.一些应用程序监听CTRL signals.现在,我只需要一些方法即可将WM_CLOSE消息发送到这些应用程序.
Edit2:如果存在窗口,则WM_CLOSE会触发CTRL_CLOSE_EVENT.但是,当任何进程以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()将其杀死.
c#中将WM_CLOSE消息发送到没有窗口的进程的方法相关推荐
- RocketMQ源码解析-Producer消息发送
首先以默认的异步消息发送模式作为例子.DefaultMQProducer中的send()方法会直接调用DefaultMQProducerImpl的send()方法,在DefaultMQProducer ...
- Rocket之消息发送
涉及角色 生产者组:一个逻辑概念,在使用生产者实例的时候需要指定一个组名.一个生产者组可以生产多个Topic的消息. 生产者实例:一个生产者组部署了多个进程,每个进程都可以称为一个生产者实例. Top ...
- MQ中将消息发送至远程队列的配置
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! MQ中将 ...
- MFC Windows 消息发送顺序
WM_CREATE 和 WM_INITDIALOG 什么时候发送的? 小结: WM_CREATE是所有窗口都能响应的消息,表明本窗口已经创建完毕.可以安全的使用这个窗口了,例如在它上面画控件等等.这个 ...
- go 实现 kafka 消息发送、接收
引言 网络上关于 go 实现 kafka 消息发送和接收的文章很多,但是实际操作起来又不是很清楚,本文在网络资源的基础上,结合自己搭建过程中遇到的问题进行了总结. 本文的实验主机:Mac笔记本. 一. ...
- 理解SetCapture、ReleaseCapture、GetCapture(控制了消息发往哪个窗口,是理解消息的关键)
理解SetCapture.ReleaseCapture.GetCapture 正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口.如果调用了SetCapture,之后无论鼠标的位置在哪 ...
- Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和区别
原文:http://jm.taobao.org/2016/04/01/kafka-vs-rabbitmq-vs-rocketmq-message-send-performance/?utm_sourc ...
- 花点时间了解消息,句柄和窗口
消息.句柄和窗口 一,为什么我要花时间研究这些东西 对于我个人来说我不想做码农,不想只知道拖控件,使用控件有的时候要了解一下底层,不知道你们有没有想过这样的一个问题,我们在C#中使用的的event事件 ...
- SignalR第一节-在5分钟内完成通信连接和消息发送
前言 首先声明,这又是一个小白从入门到进阶系列. SignalR 这个项目我关注了很长时间,中间好像还看到过微软即将放弃该项目的消息,然后我也就没有持续关注了,目前的我项目中使用的是自己搭建的 Web ...
最新文章
- Visual Studio 2005 Team System: Demo Videos
- 启动Tomcat的时候遇到错误
- Linux环境安装Mysql
- Qt绘图事件:QPainter、QPaintEngine和QPaintDevice
- ActiviteX 服务控件
- C# : 调用C++动态库(dll)
- 干货|一文读懂阿里云数据库Autoscaling是如何工作的
- java如何实例化集合_如何在java中实例化一个Queue对象?
- 老员工在线“黑”华为:早期手机难看丢人 习惯另外带苹果三星
- 基于sklearn进行文本向量化
- Unity内截屏实现
- linux 路由器 限速,Linux服务器限速WonderShaper使用方法 | 陌小九
- Android11 热点配置信息保存分析
- MySQL视图——创建视图、修改视图、删除视图、查看视图和更新视图
- Unity 2D游戏:代码控制精灵图片切换做出帧动画效果
- 备受资本市场关注的Zebec,正在构建“新DeFi”生态
- 2018年超强台风“玉兔”重创塞班岛卫星影像纪实
- 计算机应用及网络安全论文,计算机应用技术专业毕业论文--计算机网络安全与防范.doc...
- 滴滴专车司机苹果手机ios客户端可以下载了
- UI设计中的小元素总结
热门文章
- 寻找两个正序数组的中位数Python解法
- matlab逆变换法产生随机数_matlab数值积分方法(一)
- UE4学习-AI导航网格的创建及修改
- linux 22.3 终端,Linux系统服务Day.22
- 抽象类可以创建对象吗_【基础篇】java-抽象类与继承的补充
- java方法重载_Java方法的重载
- python scrapy框架爬虫_Scrapy爬虫框架教程(一)-- Scrapy入门
- 无穷大功率电源matlab仿真,MATLAB-Simulink系统建模与仿真-实验报告
- kodi android设置中文,Kodi(原XBMC)
- java上传与下载文件_java实现文件的上传和下载功能