c# - 带有可选文本的控制台应用程序

标签 c# console-application

我希望用户能够选择文本(就像在命令提示符中一样),您可以在其中右键单击控制台应用程序的表面并显示一个菜单,然后用户可以选择与命令提示符中相同的功能:

Mark
Copy        (Shortcut: Enter)
Paste
Select All
Scroll
Find

我曾尝试在诸如“C# 控制台应用程序选择文本”和其他类型的事情之后使用 Google,但似乎无法为此找到合适的解决方案,因为用户应该能够标记他/她想要的文本' 复制或替换(使用粘贴)。

你有解决我的问题的方法吗?

最佳答案

没有托管方法可以执行此操作,但可以通过 P/Invoke 启用快速编辑模式。快速编辑模式允许使用鼠标选择和复制控制台文本,以及使用鼠标右键粘贴文本。 (有关快速编辑模式的说明,请参阅 this article。)

// using System.Runtime.InteropServices;

[DllImport("kernel32.dll")]
static extern bool SetConsoleMode(IntPtr hConsoleHandle, int mode);

[DllImport("kernel32.dll")]
static extern bool GetConsoleMode(IntPtr hConsoleHandle, out int mode);

[DllImport("kernel32.dll")]
static extern IntPtr GetStdHandle(int handle);

const int STD_INPUT_HANDLE = -10;
const int ENABLE_QUICK_EDIT_MODE = 0x40 | 0x80;

public static void EnableQuickEditMode()
{
    int mode;
    IntPtr handle = GetStdHandle(STD_INPUT_HANDLE);
    GetConsoleMode(handle, out mode);
    mode |= ENABLE_QUICK_EDIT_MODE;
    SetConsoleMode(handle, mode);
}

关于c# - 带有可选文本的控制台应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6828450/

相关文章:

c# - 在多个大文本文件中搜索多个字符串的最快方法

c# - 我无法在 VS 中重命名文件名

c# - 在 .NET 中以编程方式将系统时间设置为正确的服务器时间?

c# - 反序列化嵌套的 json 字符串

c# - 控制台应用程序中的多个参数未正确解析

c# - 使用 Isolated COM 时应用程序在 CoCreateInstance 期间挂起

c# - ClickOnce 文件关联

.net - 为什么 Console.ReadKey() 会阻止在另一个线程中调用的 Console.WriteLine 的输出?

.net-core - 用.NET 5.0编写的控制台应用程序无法在同事的计算机上运行

c# - 如何通过开发人员命令提示符添加引用