如何以编程方式在控制台应用程序中选择文本?
我似乎无法找到如何通过WinAPI在我的控制台应用程序中选择文本。差不多就是可以用鼠标来完成,如果有人右键单击控制台窗口,选择“标记”:如何以编程方式在控制台应用程序中选择文本?
,然后拖动鼠标在控制台窗口:
我可以用WinAPI做这个吗?
有没有API来做你所要求的。所以你将不得不模拟它。
使用SetConsoleMode()
启用ENABLE_QUICK_EDIT_MODE
以启用用鼠标选择文本。然后使用SendInput()
或mouse_event()
来根据需要操纵鼠标移动和点击。
使用GetConsoleWindow()
来获得控制台的HWND
和GetWindowRect()
在屏幕上的位置。使用GetConsoleScreenBufferInfo/Ex()
可获取控制台的列/行数,以及控制台窗口中出现字符的矩形。然后,当发送鼠标动作时,您应该能够使用一些数学方法将字符列/行偏移转换为屏幕坐标。
那么,这是一种方法。只是好奇,因为控制台[可以处理鼠标事件](https://msdn.microsoft.com/en-us/library/windows/desktop/ms685035(v = vs.85).aspx),有没有一种方法来模拟那些而不是发送通用鼠标输入? – c00000fd
@ c00000fd:AFAIK,控制台API只能*处理*鼠标事件,它不能*生成*它们。因此需要在控制台以外的API链上更高。尽管你可能会将“WM_MOUSEMOVE”和“WM_LBUTTON(DOWN | UP)”消息直接发布到控制台窗口。或者使用UIAutomation在控制台窗口上模拟鼠标输入。 –
我会将其标记为“各种各样的解决方案”。通过'SendInput'发送直接输入到控制台是有效的,但是非常笨拙和不可靠(即,当调用SendInput时,它取决于控制台窗口的键盘焦点)。 – c00000fd
这里是如何:http://*.com/questions/2210245/can-i-get-copy-paste-functionality-from-ac-sharp-console-window – 2016-06-21 19:26:52
@Nope,问题是要做到这一点编程。 – chris
['ReadConsoleOutput'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms684965(v = vs.85).aspx)看起来应该如此。 – chris