Копировать и изменять выделенный текст в другом приложении

StackOverflow https://stackoverflow.com/questions/235972

  •  04-07-2019
  •  | 
  •  

Вопрос

У меня есть приложение для Windows, работающее на сервере. У меня есть функции в этом приложении, сопоставленные с горячими клавишами. Например, если я добавлю окно сообщения в эту функцию и назначу горячую клавишу как Alt + Ctrl + D . затем при нажатии Alt , Ctrl и D вместе появляется окно сообщения. Мое приложение работает нормально до этого момента.

Теперь я хочу написать код внутри этой функции, чтобы при использовании другого приложения, такого как блокнот, я выделял определенную строку текста и нажимал горячую клавишу Alt + Ctrl + D предполагается скопировать выделенный текст, добавить его с помощью " _copied " и вставьте его обратно в блокнот.

Всем, кто пробовал подобное приложение, помогите мне с вашими ценными материалами.

Это было полезно?

Решение

На ваш вопрос есть два ответа

Как мое приложение может установить глобальную горячую клавишу

Вы должны вызвать функцию API с именем RegisterHotKey

BOOL RegisterHotKey(
    HWND hWnd,         // window to receive hot-key notification
    int id,            // identifier of hot key
    UINT fsModifiers,  // key-modifier flags
    UINT vk            // virtual-key code
);

Дополнительная информация здесь: http://www.codeproject.com/KB/system/ nishhotkeys01.aspx

Как получить выделенный текст из окна переднего плана

Самый простой способ - отправить crl-C в окно и затем захватить содержимое буфера обмена.

[DllImport("User32.dll")] 
private static extern bool SetForegroundWindow(IntPtr hWnd);

[DllImport("user32.dll", CharSet=CharSet.Auto)]
static public extern IntPtr GetForegroundWindow();

[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, uint dwExtraInfo);


.....

private void SendCtrlC(IntPtr hWnd)
    {
    uint KEYEVENTF_KEYUP = 2;
    byte VK_CONTROL = 0x11;
    SetForegroundWindow(hWnd);
    keybd_event(VK_CONTROL,0,0,0);
    keybd_event (0x43, 0, 0, 0 ); //Send the C key (43 is "C")
    keybd_event (0x43, 0, KEYEVENTF_KEYUP, 0);
    keybd_event (VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);// 'Left Control Up

}

Отказ от ответственности: код Маркуса Питерса отсюда: http://bytes.com/forum/post1029553 -5.html
Размещено здесь для вашего удобства.

Другие советы

Используйте класс буфера обмена , чтобы скопировать содержимое в в буфер обмена, затем вставьте его в блокнот.

Вы также можете записать содержимое в текстовый файл и открыть его с помощью блокнота, запустив приложение notepad.exe с путем к текстовому файлу в качестве параметра командной строки.

Я думаю, что вы можете использовать SendInput функция для отправки текста в целевое окно или просто команда для вставки текста, если вы уже поместили его в буфер обмена.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top