在一个线程中,使用CreateProcess启动了一个.Bat文件,不知道该怎么关闭出现的CMD窗口,请帮忙,谢谢!

VCILOVE 2005-08-07 02:59:03
在一个线程中,使用CreateProcess启动了一个.Bat文件,不知道该怎么关闭出现的CMD窗口,即使我关闭了这个线程也不能将CMD窗口关闭,而且线程也堵塞了,再给现成发消息都收不到了,只能把这个CMD手动关掉后才可以,当然我是用WaitForSingleObject,因为我希望BAT文件执行完成后,我能知道,大家有没有什么解决方案呢,谢谢!
...全文
721 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
VCILOVE 2005-08-20
  • 打赏
  • 举报
回复
谢谢
gnixemos 2005-08-19
  • 打赏
  • 举报
回复
那是自己写的 .bat 有问题啊。
一般.bat运行后自己会结束关闭窗口的。
用不着手工去关闭。检查你写的.bat文件。
----------------------

楼上的正解

VCILOVE 2005-08-15
  • 打赏
  • 举报
回复
楼上说的很对啊,就是我的意思,
根据你的再去试试,谢谢
wuming945 2005-08-14
  • 打赏
  • 举报
回复
你是想在批处理文件没有结束前,主程序退出,让批处理文件的cmd窗口也关闭吧。
你可以注意一下,你用createprocess加载了那个批处理文件之后,在你的进程管理器中,你是找不到
那个与你的批处理文件对应的进程名和进程id的,其中多出来的进程名是在你的批处理文件中启动的程序的名字,所以,你可以考虑一下两种方法:1,在主程序退出是根据进程名terminateprocess掉那个有批处理文件启动的进程;2,不要加载那个批处理文件,而是直接加载批处理文件中启动的那些进程
younggle 2005-08-11
  • 打赏
  • 举报
回复
那是自己写的 .bat 有问题啊。
一般.bat运行后自己会结束关闭窗口的。
用不着手工去关闭。检查你写的.bat文件。
nelsonc 2005-08-11
  • 打赏
  • 举报
回复
FreeConsole
VCILOVE 2005-08-11
  • 打赏
  • 举报
回复
是在WAIT的时候,主程序退出,也想让CONSOLE退出,可是,主程序能退,CONSOLE却退不了
VCILOVE 2005-08-08
  • 打赏
  • 举报
回复
我的BAT文件执行完成后是会自动退出的,我之所以用Wait就是为了等待 BAT文件执行结束,好进行下面的操作,请大家再给看看
nelsonc 2005-08-08
  • 打赏
  • 举报
回复
那是Wait不能结束?还是结束后Console窗口还没关掉?
longyii 2005-08-07
  • 打赏
  • 举报
回复
agree,在bat里加exit
gohappy_1999 2005-08-07
  • 打赏
  • 举报
回复
顶一下
dirdirdir3 2005-08-07
  • 打赏
  • 举报
回复
同意xqchang(),加上exit会自动退出。
nelsonc 2005-08-07
  • 打赏
  • 举报
回复
这样:
1. 用AllocConsole创建一个Console窗口。
2. 用GetConsoleWindow取得Console窗口的句柄。
3. 把Console窗口Hide掉,用ShowWindow(...)。
4. 调用CreateProcess。

我没试过,你试试看。
xqchang 2005-08-07
  • 打赏
  • 举报
回复
要么用ShellExute,要么在BAT文件最后一行加上“exit”试试。
VCILOVE 2005-08-07
  • 打赏
  • 举报
回复
if( !CreateProcess( NULL, // No module name (use command line).
(LPTSTR)(LPCTSTR)strBatFileName, // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
NULL, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi // Pointer to PROCESS_INFORMATION structure.
)
)
{
bReturnVal = FALSE;
}
else
{
WaitForSingleObject( pi.hProcess, INFINITE );
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
}

return bReturnVal;
快乐鹦鹉 2005-08-07
  • 打赏
  • 举报
回复
能看一下CreateProcess函数你是怎么调用的么?我指参数都是什么?

15,467

社区成员

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

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