我似乎無法找到如何通過WinAPI在我的控制檯應用程序中選擇文本。差不多就是可以用鼠標來完成,如果有人右鍵單擊控制檯窗口,選擇「標記」:如何以編程方式在控制檯應用程序中選擇文本?
,然後拖動鼠標在控制檯窗口:
我可以用WinAPI做這個嗎?
我似乎無法找到如何通過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://stackoverflow.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