2010-04-15 126 views
2

我正在开发控制台应用程序。我需要模拟命令行实用程序时按下F7键的行为,如下面所示的方式:控制台应用程序模拟命令行

alt text

是否有可能在C#2008?如果没有,是否有任何解决方法可用?

任何帮助非常赞赏。

+2

我很嫉妒。 *我的* F7不这样做...... – 2010-04-15 05:37:24

+0

这种类型的UI传统上是通过直接寻址与显卡的文本模式相对应的视频RAM来创建的。过去有大量的图书馆来建立菜单,绘制窗口等等。主要是他们应该在现代Windows下工作,但是我很长时间没有推荐任何特定的东西。如果一个热键(例如F7)激活菜单,您可能正在查看一个TSR(终止并保持驻留)程序......一个在DOS下启动,钩住键盘并退出但仍留在内存中等待特定按键。 – 2010-04-15 05:40:48

+0

@Eric J. - 令人惊讶的是Windows NT一直支持控制台中的TSR:http://support.microsoft.com/kb/101921 - 但是今天使用这个API会很疯狂 - 你会写一个16-仅限于访问大约0.025%的现代PC内存。事实上,我不知道是否有人曾经在Windows NT或更高版本上运行过TSR。没有多少公司需要运行16位Windows应用程序。 – 2010-04-15 05:57:39

回答

0

在Windows上有一个用于编写“控制台模式”应用程序的完整API。它允许您以事件驱动的方式监听鼠标或键盘输入,还可以设置文本的前景和背景颜色,定位光标等。

要制作一个类似CMD.EXE所显示的盒子,你使用某些特殊字符来制作边框(有各种角落和边缘碎片 - 使用Character Map应用程序来查看它们)。

要使用C#中的Console API,您可能需要使用pinvoke,例如,

[DllImport("kernel32.dll")] 
public static extern bool SetConsoleTextAttribute(
          IntPtr hConsoleOutput, int wAttributes); 

请参阅文档SetConsoleTextAttribute以了解如何使用它来设置颜色。

1

我不确定.NET是否包含它们的包装器,或者是否必须通过P/Invoke来使用它们,但是Win32 API包含这些功能。例如,您可以使用ReadConsoleOutput来读取您要遮掩的显示屏的区块。然后你会使用WriteConsoleOutput来显示你的列表(包括边框)。覆盖图完成后,您可以通过WriteConsoleOutput的另一个调用恢复以前的内容,指定保存底层数据的块。

编辑:做一个快速检查,正确的功能不会跳出来反正我。也许我错过了一些显而易见的东西......

+0

+1。非常感谢 - 您的方法也适用于我。 – 2010-04-16 03:55:56

相关问题