如何在控制台应用程序中以编程方式 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 偏移量转换为发送鼠标操作时需要的屏幕坐标。
我似乎找不到如何通过 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 偏移量转换为发送鼠标操作时需要的屏幕坐标。