2013-03-26 157 views
2

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

目前我所做的只是使用WaitForSingleObject(ShExecInfo.hProcess,INFINITE);直到批处理文件结束时才显示我的应用程序被挂起(而不是实际)。

回答

1

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

0
  • 只要用户启动操作 - 禁用所有控件(所有需要的控件)。并启动一个线程。
  • 该线程将调用ShellExecute [Ex]或CreateProcess。保持过程的句柄并用INFINITE时间呼叫WaitForSingleObject
  • 只要WFSO返回,通知窗口(对话框,表单 - 无论如何),该过程已完成。
  • -

为了通知完成的窗口,您可能需要定义一个自定义消息代码:在消息循环,或消息映射为WM_PROCESS_FINISHED

#define WM_PROCESS_FINISHED (WM_APP + 10) 

写条目。

从线程,只需要调用与目标窗口的句柄PostMessage(或SendMessage)和该消息的代码:

PostMessage(hTargetWnd, WM_PROCESS_FINISHED);