调整控制台事件的大小

2024-03-17

所以我认为窗口调整大小事件将通过 winproc 进行,我可能是错误的,希望获得控制台调整大小事件的通知。

我想在调整大小时最大化控制台缓冲区,一旦完成,基本上将其缩小回窗口大小,从而防止由于缓冲区小于窗口而导致溢出错误。


不幸的是,答案是你无法挂钩控制台的 WndProc 因为它位于一个单独的、安全控制的进程中 https://stackoverflow.com/a/13438939/521757。 Spy++可以hook其他进程的WndProcs来读取窗口消息,而Spy++甚至无法读取控制台窗口消息。即使您可以解决安全问题,C# 也不能用于挂钩另一个进程。

我在调整大小时遇到​​完全相同的竞争条件。在 Windows 10 上情况更糟,因为调整窗口大小会重排文本并更改缓冲区宽度和窗口宽度。Console.BufferWidth, Console.BufferHeight和 family 是非原子的,如果在调整窗口大小时使用它们,将会抛出托管和非托管错误。

您绝对可以找到有关调整大小的信息事后 by 读取输入缓冲区事件 https://msdn.microsoft.com/en-us/library/windows/desktop/ms685035.aspx但这并不能解决你的问题。您仍然会遇到并发问题。因为这不是一个钩子,所以你不能让调整大小等待你完成Console类的非原子缓冲区/窗口大小操作。

我认为处理竞争条件的唯一选择是重试循环,这就是我将要使用的。

while (true) try
{
    // Read and write the buffer size/location and window size/location and cursor position,
    // but be aware it will be rudely interrupted if the console is resized by the user.
}
catch (IOException) { }
catch (ArgumentOutOfRangeException) { }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调整控制台事件的大小 的相关文章

随机推荐

  • Angular 2 服务 + RxJS BehaviourSubject 或 EventEmitter

    我是 Angular 2 和 RXJS 的新手 我有一个带有 2 个触发器 按钮 的自定义标头组件 它应该在应用程序的不同部分激活 2 个不同的导航指令 我创建了一个服务 它注册了 2 个不同的导航指令 并且标头组件订阅了该指令 我想知道链
  • 类型错误:get_params() 缺少 1 个必需的位置参数:'self'

    我试图使用scikit learn与 python 3 4 一起打包以进行网格搜索 from sklearn feature extraction text import TfidfVectorizer from sklearn linea
  • 即使添加“unsafe-eval”后,对 function() 的调用也会被 CSP 阻止

    我正在开发一个 NodeJS 项目并且正在使用CSP 内容安全政策 http www w3 org TR CSP 我正在使用外部插件FullCalendar它被 csp 阻止 出现以下错误 Error call to Function bl
  • Sequelize:批量插入

    我正在使用 Node js MySQL 和 Sequelize 我想一次向表中插入一些 10k 行 桌子有定制的primaryKey字段 正在手动设置 数据是从网上下载的并且是重叠的 我想要一个版本bulkCreate如果数据中的任何行具有
  • 如何在 MPAndroidChart 中向 x 轴和 y 轴添加字符串标签

    I am trying to add a String Label in order to label both the domain x axis and the range y axis of my LineChart as shown
  • Django:GenericForeignKey 中的 content_type_id

    我根据文档编写了这个类 以便能够对应用程序中具有 id 的任何内容进行投票 class Vote models Model class Meta unique together voted id voter id content type
  • take 2 $ [1..] 在 haskell 中如何工作?

    我们知道 运算符绑定的是最松散的 并且也关联到右侧 这意味着 1 应该首先被评估 因此 它不应该陷入无限循环吗 为什么它甚至完全停止了 Haskell is lazy and doesn t change that The operator
  • 适用于 C++ 的最佳开放式 XML 解析器是什么? [复制]

    这个问题在这里已经有答案了 我正在寻找一个简单 干净 正确的 XML 解析器来在我的 C 项目中使用 我应该自己写吗 怎么样RapidXML http rapidxml sourceforge net RapidXML 是一个用 C 编写的
  • C++:全局变量作为指针

    我是 C 新手 对全局变量有一个问题 我在许多示例中看 到全局变量是带有堆地址的指针 所以指针位于全局 静态变量的内存中 地址后面的数据位于堆上 对吗 相反 您可以声明存储数据的全局 无指针 变量 因此 数据存储在全局 静态变量的内存中 而
  • Grails - 将 HTML 文件作为 UTF-8 提供?

    通过 tomcat 通过 web app 提供的 html 文件的 UTF 8 被破坏 如果我直接打开文件file 它渲染得很好 如果我在运行应用程序期间查看该文件 它看起来不错 然而 当我部署为战争时 UTF 8字符出现乱码 响应的内容类
  • 如何内省地将处理程序连接到信号?

    gtk Builder http www pygtk org docs pygtk class gtkbuilder html能够识别 GUI 在 XML 文件中描述 可以发出的所有信号 并使用以下方法连接信号 http www pygtk
  • 状态栏中图标的颜色(Flutter)

    我正在使用 FLUTTER 设计指的是状态栏的黑色 并且状态栏图标的颜色必须是白色 那么如何改变 flutter 中状态栏图标的颜色呢 要改变icon白色尝试以下内容build method import package flutter s
  • 在 Rails 中清理迁移的好方法是什么?

    所以我已经在这个 Web 应用程序上工作了一年 我想将模式编译为一个迁移 这样我的文本编辑器加载速度更快 git 工作目录也不会那么混乱 搜索查找会更快 我的任何配置 数据库都不会长 4000px 迁移服务器后 请删除迁移文件 如果您想开始
  • CSV 标准 - 多个表

    我正在开发一个 python 项目 对 csv 文件进行一些分析 我知道 csv 文件没有明确定义的标准 但据我了解定义 https www rfc editor org rfc rfc4180 page 2 https www rfc e
  • 以编程方式控制 Angular-ui 手风琴的好方法是什么?

    我正在使用手风琴指令http angular ui github com bootstrap http angular ui github com bootstrap 我需要更好地控制手风琴何时打开和关闭 更准确地说 我需要手风琴组内的一个
  • ggplot2:如何通过多个变量为图表着色

    我相当确定我在某处看到了这个问题的解决方案 但由于我无法找到它 这就是我的问题 我有一些由多个变量标识的时间序列数据 我希望能够使用多个变量来绘制图表并区分颜色ggplot2 样本数据 date lt c 2016 04 01 UTC 20
  • Symfony2 跨多个应用程序共享用户

    我有多个 symfony2 应用程序 它们共享公共实体 但使用不同的数据库设置 每个数据库都有表user user role and role 问题是 我希望该用户能够登录app1通过访问www myproject com app1 log
  • 从另一个类启动 JavaFX 应用程序

    我需要从另一个 容器 类启动 javafx 应用程序并调用应用程序上的函数 但似乎没有任何方法可以获取对使用 Application launch 方法启动的应用程序的引用 这可能吗 谢谢 假设这是我们的 JavaFX 类 import j
  • 在 Erlang 中确定传入 TCP/IP 连接的 IP 地址和端口

    我想获取传入 TCP IP 连接的 IP 地址和端口号 很遗憾gen tcp s accept and recv函数只返回一个套接字 而gen udp s recv函数还返回地址信息 有没有一种简单的方法来收集属于 Erlang 中套接字的
  • 调整控制台事件的大小

    所以我认为窗口调整大小事件将通过 winproc 进行 我可能是错误的 希望获得控制台调整大小事件的通知 我想在调整大小时最大化控制台缓冲区 一旦完成 基本上将其缩小回窗口大小 从而防止由于缓冲区小于窗口而导致溢出错误 不幸的是 答案是你无