【问题标题】:Showing a progress bar while SFX archive is extracting在 SFX 存档提取时显示进度条
【发布时间】:2010-05-18 08:54:24
【问题描述】:

我正在使用 C++ 和本机 Win32 API 编写程序。我正在以静默模式从 SFX 存档 EXE 创建一个进程,没有向用户显示 GUI。但我想在我的应用程序中显示一个进度条,同时提取 SFX 存档。

我该怎么做?

谢谢。

【问题讨论】:

    标签: c++ winapi progress-bar sfx


    【解决方案1】:

    如果您创建的过程产生了一些文本输出到标准输出,那么您可能会以某种方式解析该输出并显示进度。要知道它是否存在,请在命令行窗口中激活它并观察你从中得到什么。

    win32 的CreateProcess() 允许您将进程的标准输出重定向到管道。这样您就可以在生成后立即收到输出。

    如果您正在创建的流程没有以某种方式报告其进度,那么您真的无能为力。您可以尝试在文件大小和提取文件所需的平均时间之间提出函数,然后伪造一个进度条。这将有助于让用户放心,但仅此而已。

    --编辑
    CreateProcess() 的调用会在进程创建后立即返回。 CreateProcess() 用它创建的进程的句柄填充结构 PROCESS_INFORMATION。它包含进程主线程的句柄。如果您想等待进程完成,您可以在该线程句柄上WaitForSingleEvent(),当线程终止时该句柄会发出信号。完成后不要忘记CloseHandle()这些句柄。

    【讨论】:

    • 好的,谢谢。再问一个问题,你知道如何防止执行 CreateProcess() 函数后进度条停止吗?它锁定了我的进程(这是我想要的,因为我想在它终止后删除已执行的 EXE)。
    • 查看编辑。在这个网站上表达感谢的一种常见方式是对答案投赞成票,甚至可能接受它。
    猜你喜欢
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    相关资源
    最近更新 更多