shellexecute命令在MFC中执行批处理文件时显示进度条

时间:2013-03-26 11:17:36

标签: visual-c++ mfc visual-studio-2005

我正在做的是通过shellexecute命令执行批处理文件,现在我想要的是显示进度条或仅显示“正在进行”状态并禁用对话框上的所有其他控件。我们如何在MFC中实现这一目标。

目前我所做的只是使用 WaitForSingleObject(ShExecInfo.hProcess,INFINITE); ,它将我的应用程序显示为挂起(实际上),直到批处理文件完成。

2 个答案:

答案 0 :(得分:1)

您需要创建一个管理执行批处理文件的工作线程,并在准备好时将消息发布到主(GUI)线程。

答案 1 :(得分:0)

  • 一旦用户启动操作 - 禁用所有控件(所有需要的控件)。并启动一个线程。
  • 主题会调用ShellExecute [Ex]或CreateProcess。按住流程句柄并在WaitForSingleObject时间内致电INFINITE
  • 一旦WFSO返回,通知窗口(对话框,表格 - 无论如何),该过程已经完成。
  •   -

为了通知完成的窗口,您可能需要定义自定义消息代码:

#define WM_PROCESS_FINISHED (WM_APP + 10)

在消息循环或消息映射中写入WM_PROCESS_FINISHED的条目。

在线程中,只需使用目标窗口的句柄和此消息代码调用PostMessage(或SendMessage):

PostMessage(hTargetWnd, WM_PROCESS_FINISHED);