开始一个过程-

 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消息发送到没有窗口的进程的方法相关推荐

  1. RocketMQ源码解析-Producer消息发送

    首先以默认的异步消息发送模式作为例子.DefaultMQProducer中的send()方法会直接调用DefaultMQProducerImpl的send()方法,在DefaultMQProducer ...

  2. Rocket之消息发送

    涉及角色 生产者组:一个逻辑概念,在使用生产者实例的时候需要指定一个组名.一个生产者组可以生产多个Topic的消息. 生产者实例:一个生产者组部署了多个进程,每个进程都可以称为一个生产者实例. Top ...

  3. MQ中将消息发送至远程队列的配置

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! MQ中将 ...

  4. MFC Windows 消息发送顺序

    WM_CREATE 和 WM_INITDIALOG 什么时候发送的? 小结: WM_CREATE是所有窗口都能响应的消息,表明本窗口已经创建完毕.可以安全的使用这个窗口了,例如在它上面画控件等等.这个 ...

  5. go 实现 kafka 消息发送、接收

    引言 网络上关于 go 实现 kafka 消息发送和接收的文章很多,但是实际操作起来又不是很清楚,本文在网络资源的基础上,结合自己搭建过程中遇到的问题进行了总结. 本文的实验主机:Mac笔记本. 一. ...

  6. 理解SetCapture、ReleaseCapture、GetCapture(控制了消息发往哪个窗口,是理解消息的关键)

    理解SetCapture.ReleaseCapture.GetCapture 正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口.如果调用了SetCapture,之后无论鼠标的位置在哪 ...

  7. Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和区别

    原文:http://jm.taobao.org/2016/04/01/kafka-vs-rabbitmq-vs-rocketmq-message-send-performance/?utm_sourc ...

  8. 花点时间了解消息,句柄和窗口

    消息.句柄和窗口 一,为什么我要花时间研究这些东西 对于我个人来说我不想做码农,不想只知道拖控件,使用控件有的时候要了解一下底层,不知道你们有没有想过这样的一个问题,我们在C#中使用的的event事件 ...

  9. SignalR第一节-在5分钟内完成通信连接和消息发送

    前言 首先声明,这又是一个小白从入门到进阶系列. SignalR 这个项目我关注了很长时间,中间好像还看到过微软即将放弃该项目的消息,然后我也就没有持续关注了,目前的我项目中使用的是自己搭建的 Web ...

最新文章

  1. Visual Studio 2005 Team System: Demo Videos
  2. 启动Tomcat的时候遇到错误
  3. Linux环境安装Mysql
  4. Qt绘图事件:QPainter、QPaintEngine和QPaintDevice
  5. ActiviteX 服务控件
  6. C# : 调用C++动态库(dll)
  7. 干货|一文读懂阿里云数据库Autoscaling是如何工作的
  8. java如何实例化集合_如何在java中实例化一个Queue对象?
  9. 老员工在线“黑”华为:早期手机难看丢人 习惯另外带苹果三星
  10. 基于sklearn进行文本向量化
  11. Unity内截屏实现
  12. linux 路由器 限速,Linux服务器限速WonderShaper使用方法 | 陌小九
  13. Android11 热点配置信息保存分析
  14. MySQL视图——创建视图、修改视图、删除视图、查看视图和更新视图
  15. Unity 2D游戏:代码控制精灵图片切换做出帧动画效果
  16. 备受资本市场关注的Zebec,正在构建“新DeFi”生态
  17. 2018年超强台风“玉兔”重创塞班岛卫星影像纪实
  18. 计算机应用及网络安全论文,计算机应用技术专业毕业论文--计算机网络安全与防范.doc...
  19. 滴滴专车司机苹果手机ios客户端可以下载了
  20. UI设计中的小元素总结

热门文章

  1. 寻找两个正序数组的中位数Python解法
  2. matlab逆变换法产生随机数_matlab数值积分方法(一)
  3. UE4学习-AI导航网格的创建及修改
  4. linux 22.3 终端,Linux系统服务Day.22
  5. 抽象类可以创建对象吗_【基础篇】java-抽象类与继承的补充
  6. java方法重载_Java方法的重载
  7. python scrapy框架爬虫_Scrapy爬虫框架教程(一)-- Scrapy入门
  8. 无穷大功率电源matlab仿真,MATLAB-Simulink系统建模与仿真-实验报告
  9. kodi android设置中文,Kodi(原XBMC)
  10. java上传与下载文件_java实现文件的上传和下载功能