Я уже реализовал приложение, которое может получить выделенный текст, эмулируя ctr + c keypress.Функция или библиотека, которая помогает получить выделенный текст из разных приложений
Итак, теперь у меня есть 3 методы работы:
// Using InputSimulator library
private static void CtrlC_inputSimulator()
{
var hWnd = GetWindowUnderCursor();
SetActiveWindow(hWnd);
InputSimulator i = new InputSimulator();
i.Keyboard.ModifiedKeyStroke(VirtualKeyCode.CONTROL, VirtualKeyCode.VK_C);
}
// Using SendKey
private static void CtrlC_SendKey()
{
try
{
SendKeys.Send("^(c)");
}
catch(Exception ex) { }
}
// Using native user32 keybd_event directly
private void CtrlC_KeybdEvent_User32()
{
uint KEYBD_EVENT_KEYUP = 2;
var hWnd = GetWindowUnderCursor();
SetForegroundWindow(hWnd);
// Ctrl-C Down
keybd_event(KEY_CONTROL, 0, 0, 0);
keybd_event(KEY_C, 0, 0, 0);
// Ctrl-C Up
keybd_event(KEY_C, 0, KEYBD_EVENT_KEYUP, 0);
keybd_event(KEY_CONTROL, 0, KEYBD_EVENT_KEYUP, 0);
}
Но на практике это не стабильный способ использования моделирования нажатие.
И я подумал о том, как получить выделенный текст с помощью системных сообщений, таких как WM_GETTEXT, но насколько я знаю, большинство из этих вещей работают только с большим текстовым полем и не будут работать в таких программах, как Chrome или Acrobat Reader.
Скажите, пожалуйста, есть ли функция или какая-нибудь библиотека, чем это можно сделать?
UI Automation .. –
Он будет работать даже с выбором в браузере? – Letfar
Кроме того, это ненадежно, вы также сбрасываете буфер обмена. То, что входит в буфер обмена, должно находиться под контролем * users *, а не с вашим приложением. –