高手快来!如何关闭由ShellExecute打开的程序??(绝对给分!)

jxwa_wzw 2002-12-31 11:09:05
高手快来!如何关闭由ShellExecute打开的程序??(绝对给分!)

问题:用createprocess()创建的一个可执行程序啊a.exe的进程,在98下(进程方式)可以正常运行,可是到2000下(进程方式)程序运行出错(但当独直接运行a.exe不会出错),奇怪的是函数createprocess()在98和2000下返回值均显示正确!所以后来在2000下用ShellExecute()函数来执行,不会出错,可是现在的问题来了,如何关闭由ShellExecute()运行的程序了?

1、如何得到由ShellExecute()创建程序的的进程号!
2、如何得到由ShellExecute()创建程序窗口的句柄!
3、如何得到由ShellExecute()如何得到窗口的标题!

只要知道上面3个问题的一个答案就可以关闭该程序!
...全文
528 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingcom_xu 2003-01-03
  • 打赏
  • 举报
回复
楼主结贴吧...
我还差166就进top100了..
Melchior 2003-01-02
  • 打赏
  • 举报
回复
EnumProcess,得到进程Id,然后OpenProcess获得句柄,最后TerminateProcess就行了。
qiufuwang 2003-01-02
  • 打赏
  • 举报
回复
up
GoogleGeek 2003-01-01
  • 打赏
  • 举报
回复
mission impossable
ShellExecute()返回的实列变量???
搞笑!
返回的并不是真正的实列变量!
只是为了兼容性,才这么做的!
zhang_zhibin 2003-01-01
  • 打赏
  • 举报
回复
我就是这样做的,用的很好。
zhang_zhibin 2003-01-01
  • 打赏
  • 举报
回复
CreateProcess打开
TerminateProcess关闭
honganwp 2003-01-01
  • 打赏
  • 举报
回复
up
happy new year!
jxwa_wzw 2003-01-01
  • 打赏
  • 举报
回复
难道没有办法根据ShellExecute()返回的实列变量来得到以下
1、如何得到由ShellExecute()创建程序的的进程号!
2、如何得到由ShellExecute()创建程序窗口的句柄!
3、如何得到由ShellExecute()如何得到窗口的标题!
jxwa_wzw 2003-01-01
  • 打赏
  • 举报
回复
CreateProcess打开
TerminateProcess关闭
关键是我用CreateProcess打开程序在2000下会出错,而且函数还返回执行成功的代码,(这种方式运行程序,程序运行会出错),所以才用其他函数来执行,现在关键是如何根据ShellExecute()返回的实列变量来得到
1、如何得到由ShellExecute()创建程序的的进程号!
2、如何得到由ShellExecute()创建程序窗口的句柄!
3、如何得到由ShellExecute()如何得到窗口的标题!
???????????????????????????
In355Hz 2003-01-01
  • 打赏
  • 举报
回复
用 ShellExecuteEx 可以获得新进程的 hProcess,
kingcom_xu(刀是用来杀人的!) 的应该正确。
jxwa_wzw 2003-01-01
  • 打赏
  • 举报
回复
其中用进程方式运行传奇程序时,函数返回的值是正确地,就是程序运行时程序出错,说什么格式不正确!
jxwa_wzw 2003-01-01
  • 打赏
  • 举报
回复
楼上的,的确我的定义没错,在2000可以用进程方式运行系统的记事本,可是运行那个程序就不行(传奇的服务程序),但直接运行可以,注意:我设置了当前目录!什么原因?????
kingcom_xu 2003-01-01
  • 打赏
  • 举报
回复
http://www.vckbase.com/document/viewdoc.asp?id=416

Q: 如何启动一个程序,直到它运行结束? SHELLEXECUTEINFO ShExecInfo = {0};
ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
ShExecInfo.hwnd = NULL;
ShExecInfo.lpVerb = NULL;
ShExecInfo.lpFile = "c:\\MyProgram.exe";
ShExecInfo.lpParameters = "";
ShExecInfo.lpDirectory = NULL;
ShExecInfo.nShow = SW_SHOW;
ShExecInfo.hInstApp = NULL;
ShellExecuteEx(&ShExecInfo);
WaitForSingleObject(ShExecInfo.hProcess,INFINITE);


既然有了hProcess,那么只需把WaitForSingleObject改为TerminateProcess就可以了...
kingcom_xu 2003-01-01
  • 打赏
  • 举报
回复
CreateProcess不可能出错的..你检查一下是不是没有设置当前目录...
longsheng2 2002-12-31
  • 打赏
  • 举报
回复
直接结束进程!我有点忘了,但是任何书上都有结束进程的函数介绍。用afxgetXX函数,我想。
jxwa_wzw 2002-12-31
  • 打赏
  • 举报
回复
楼上的,关键我可能执行不同的可执行程序啊,我如何得到他们的标题,难道我要守到机器旁看标题不成!
foxmail 2002-12-31
  • 打赏
  • 举报
回复
HWND hWnd=FindWindow("xx",..);
PostMessage(hWnd,WM_QUIT,NULL,NULL);
jxwa_wzw 2002-12-31
  • 打赏
  • 举报
回复
没找到,帮我贴一下啊!
zhaoweidf 2002-12-31
  • 打赏
  • 举报
回复
csdn 中就有
jxwa_wzw 2002-12-31
  • 打赏
  • 举报
回复
老大,给段代码撒!
加载更多回复(1)

15,471

社区成员

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

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