【问题标题】:How do I preserve PDcurses output in a Windows Console window after executable completes?可执行文件完成后,如何在 Windows 控制台窗口中保留 PDcurses 输出?
【发布时间】:2022-01-02 01:15:44
【问题描述】:

我正在为 Windows 10 编写一个应用程序,用于在 Windows 控制台窗口的特定位置显示和更新文本。该程序由控制台窗口中的命令启动。启动时,它会擦除​​窗口以前的内容,然后显示其输出,并不断更新,直到完成。退出时,它应该保留显示的输出,并且下面应该出现一个新的命令提示符。启动、显示和后续命令提示符都发生在同一个控制台窗口中。 (老派,我知道,但这是要求。)该程序是用 C 编写的,并使用对 PDcurses 库的调用来控制光标位置并将显示文本输出到屏幕。该应用程序是在 Windows 10 平台上使用 GCC/MinGW 构建的。

在应用程序退出之前一切正常,但随后显示输出消失并且之前的窗口内容(从应用程序启动之前)重新出现。据我所知,这似乎是 curses 的默认行为,可能是由于它处理屏幕缓冲的方式。

我正在寻找覆盖此行为的方法,但我不确定如何处理它。我可以指示 PDcurses 写入标准屏幕缓冲区而不是备用屏幕缓冲区(如果这是怎么回事)?如果是这样,怎么做?我应该在调用 endwin() 之前复制屏幕缓冲区的内容,然后再将这些内容复制回屏幕缓冲区吗?再说一遍,怎么做?我确信这个问题已经解决了很多次,但我还没有找到任何似乎适用于在 Windows 控制台中运行的 C 可执行文件的解决方案,而且我对 PDcurses 和 Windows API 库的经验有限.任何帮助将不胜感激。

【问题讨论】:

    标签: winapi console-application windows-console pdcurses


    【解决方案1】:

    官方的做法是设置一个环境变量:set PDC_RESTORE_SCREEN=0。您可以将其与set PDC_PRESERVE_SCREEN=Y 结合使用,以防止 PDCurses 在启动时清除屏幕。

    【讨论】:

    • 谢谢,成功了。我认为必须有一个简单的方法来做到这一点,但该死的如果我能找到它。 PDC_RESTORE_SCREEN 和其他与 PDCurses 相关的环境变量是否记录在某个在线存储库中?网络搜索结果出人意料地稀少,安装包附带的文档只是传递引用。
    • 它仅记录在 HISTORY.md、IMPLEMNT.md 和源代码中。这可能需要纠正。
    • 同意——也许在 MANUAL.md 中包含对 PDC_RESTORE_SCREEN 和 PDC_PRESERVE_SCREEN 的简要描述?此外,关于 PDC_RESTORE_SCREEN 对 PDC_scr_close() 行为的影响,IMPLEMNT.md 似乎已经过时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多