2009-08-14 33 views
0

有没有办法可靠地捕获对win32控制台缓冲区所做的所有更改?这个想法是将文本模式应用程序的屏幕更新转换为ANSI转义序列,用于telnet/ssh服务器。我需要捕获光标移动,颜色,窗口标题等。如果可能的话,还需要鼠标点击。如何可靠捕获win32控制台屏幕缓冲区更改?

迄今为止我所见过的唯一技术是基本上采用控制台缓冲区内容的频繁快照,并与以前的快照进行比较。如果有变化,那么找出发生了什么变化并生成ANSI转义序列。

这种工作,但一个很好的差异算法,以尽量减少发送数据量的数据将是复杂的。有时屏幕缓冲区会更新得如此之快以至于根本不会发送某些更新。这是一场表演赛;我需要100%可靠地捕获所有数据。

回答

1

不幸的是,这不可能干净地完成。重定向标准句柄只会捕获高级控制台I/O。我意识到捕捉所有东西的唯一方式是令人遗憾的是,将控制台API与目标进程(及其子进程)挂钩。