2

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

目前我所做的只是使用WaitForSingleObject(ShExecInfo.hProcess,INFINITE); 在批处理文件完成之前,这显示我的应用程序处于挂起状态(实际上并非如此)。

4

2 回答 2

1

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

于 2013-03-26T11:24:04.600 回答
0
  • 一旦用户启动操作 - 禁用所有控件(所有需要的控件)。并启动一个线程。
  • 该线程将调用ShellExecute[ Ex] 或CreateProcess. 握住进程的把手,WaitForSingleObjectINFINITE时间调用。
  • 一旦 WFSO 返回,通知窗口(对话框,表单 - 无论如何),该过程已经完成。
  • -

为了通知窗口完成,您可能必须定义一个自定义消息代码:

#define WM_PROCESS_FINISHED (WM_APP + 10)

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

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

PostMessage(hTargetWnd, WM_PROCESS_FINISHED); 
于 2013-03-27T05:55:06.750 回答