【问题标题】:Show progress bar while the shellexecute command executes batch file in MFC当 shellexecute 命令在 MFC 中执行批处理文件时显示进度条
【发布时间】:2013-03-26 11:17:36
【问题描述】:
我正在做的是通过 shellexecute 命令执行一个批处理文件,现在我想要的是显示一个进度条或只是一个状态为“进行中”并禁用对话框上的所有其他控件。我们如何在 MFC 中实现这一点。
目前我所做的只是使用 WaitForSingleObject(ShExecInfo.hProcess,INFINITE); 这将我的应用程序显示为挂起(实际上不是),直到批处理文件完成。
【问题讨论】:
标签:
visual-c++
mfc
visual-studio-2005
【解决方案1】:
您需要创建一个工作线程来管理批处理文件的执行,并在准备好后将消息发布到主 (GUI) 线程。
【解决方案2】:
- 一旦用户启动操作 - 禁用所有控件(所有需要的控件)。并启动一个线程。
- 线程将调用
ShellExecute[Ex] 或CreateProcess。握住进程的句柄,用INFINITE时间调用WaitForSingleObject。
- WFSO 返回后,立即通知窗口(对话框、表单 - 无论如何),该过程已完成。
-
为了通知窗口完成,你可能需要定义一个自定义消息代码:
#define WM_PROCESS_FINISHED (WM_APP + 10)
在消息循环或消息映射中为WM_PROCESS_FINISHED 写入条目。
从线程中,只需使用目标窗口的句柄和此消息代码调用PostMessage(或SendMessage):
PostMessage(hTargetWnd, WM_PROCESS_FINISHED);