如何在控制台应用程序中以编程方式 select 文本?

How to programmatically select text in a console application?

我似乎找不到如何通过 WinAPI 在我的控制台应用程序中 select 文本。如果有人右键单击控制台 window 和 selects "Mark":

几乎可以用鼠标完成什么

然后在控制台上拖动鼠标window:

我可以使用 WinAPI 执行此操作吗?

使用 ReadConsoleOutput 读取您想要 select 的区域。更改接收到的每个字符的 CHAR_INFO 属性以反映不同的(例如反转的)颜色。使用 WriteConsoleOutput 将修改后的数据写入同一个矩形区域。这将显示一个 'selected' 区域。如果需要,请使用 SetConsoleCursorPosition 更改光标位置。可以看到如何使用 ReadConsoleOutput 和 WriteConsoleOutput 的示例 here.

没有API做你要求的。所以你将不得不模拟它。

使用SetConsoleMode()启用ENABLE_QUICK_EDIT_MODE启用鼠标选择文本。然后根据需要使用 SendInput()mouse_event() 来操纵鼠标移动和点击。

使用 GetConsoleWindow() 获取控制台的 HWND,并使用 GetWindowRect() 获取其在屏幕上的位置。使用 GetConsoleScreenBufferInfo/Ex() 获取控制台的 column/row 计数,以及字符在控制台中出现的矩形 window。然后您应该能够使用一些数学运算将字符 column/row 偏移量转换为发送鼠标操作时需要的屏幕坐标。