Копировать и изменять выделенный текст в другом приложении
Вопрос
У меня есть приложение для 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 функция для отправки текста в целевое окно или просто команда для вставки текста, если вы уже поместили его в буфер обмена.