Копировать и изменять выделенный текст в другом приложении - PullRequest
10 голосов
/ 25 октября 2008

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

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

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

Ответы [ 3 ]

13 голосов
/ 07 ноября 2008

Ваш вопрос имеет два ответа

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

Вы должны вызвать функцию 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
Размещено здесь для вашего удобства.

1 голос
/ 25 октября 2008

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

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

0 голосов
/ 25 октября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...