使用CreateProcess启动Ping程序, 利用管道与Ping通信, 但是无法使用^C让Ping终止

zhangxvpp 2008-05-10 10:50:31
Rt;

我使用CreateProcess 启动Windows下的Ping程序, 可以利用管道获得Ping的执行过程, 但是在执行过程中我想使用^C(Ctrl + C)让Ping程序终止掉, 但是发现这个字符(0x03)发送给管道是成功的, 但是Ping没有停止下来!
...全文
200 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuming2003 2008-05-12
  • 打赏
  • 举报
回复
有一个地方你要改一下,smallapp.cpp 中GenerateConsoleCtrlEvent生成的是CTRL_BREAK_EVENT事件,你要改成CTRL_C_EVENT
wuming2003 2008-05-12
  • 打赏
  • 举报
回复
GenerateConsoleCtrlEvent 的确是比较难用(不知道微软为什么会提供这么难用的api,弱化console???),Jeffrey Richter给了一个经典用法,你可以参考参考。http://www.microsoft.com/msj/0698/win320698.aspx,上面有一份代码,估计可以解决你的问题。
zhangxvpp 2008-05-12
  • 打赏
  • 举报
回复
直接用TerminateProcess结束进程,合并绕弯去发送CTRL+C。

BOOL TerminateProcess(
HANDLE hProcess, // handle to the process
UINT uExitCode // exit code for the process
);


这个不行吧, 直接使用TerminateProcess 子进程确实可以结束, 但是太粗暴了, Ping的统计信息就没有了, 我之所以使用Ctrl+C的方式就是可以在进程结束之前可以获得统计信息
zhangxvpp 2008-05-12
  • 打赏
  • 举报
回复
引用 1 楼 wuming2003 的回复:
你直接向管道写入^C是没用的,键盘的ctrl+C会使操作系统对当前运行的进程产生一个异常,因此如果你想模拟ctrl+c,应该使用GenerateConsoleCtrlEvent,而不是向标准输入写入^C


GenerateConsoleCtrlEvent 我尝试了,结果不好用啊, 我用CreateProcess 启动了Ping程序, 一个线程实时的从Ping程序获得结果, 使用GenerateConsoleCtrlEvent 向dwProcessID发从Ctrl+c 一点作用都没有, 不知道怎么回事啊!
vocanicy 2008-05-11
  • 打赏
  • 举报
回复
直接用TerminateProcess结束进程,合并绕弯去发送CTRL+C。

BOOL TerminateProcess(
HANDLE hProcess, // handle to the process
UINT uExitCode // exit code for the process
);
Eleven 2008-05-11
  • 打赏
  • 举报
回复
up
abomber2 2008-05-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuming2003 的回复:]
你直接向管道写入^C是没用的,键盘的ctrl+C会使操作系统对当前运行的进程产生一个异常,因此如果你想模拟ctrl+c,应该使用GenerateConsoleCtrlEvent,而不是向标准输入写入^C
[/Quote]支持,学习了
wuming2003 2008-05-10
  • 打赏
  • 举报
回复
你直接向管道写入^C是没用的,键盘的ctrl+C会使操作系统对当前运行的进程产生一个异常,因此如果你想模拟ctrl+c,应该使用GenerateConsoleCtrlEvent,而不是向标准输入写入^C

15,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧