
20.04.2013, 18:28
|
Прохожий
|
|
Регистрация: 20.04.2013
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
|
|
Буфер обмена winapi
Задача: послать стороннему приложению, (в данном случае игра на directx) в окно ввода, комбинацию клавиш ctrl + v, перед этим скопировав в буфер обмена какой нибудь текст. При этом приложение находится в свернутом состоянии, то есть не получает фокуса. С этим проблем нет, вставка текста работает. Только вот вставляется не тот текст который я копирую в буфер обмена, а тот текст который был в буфере до этого. То есть приложение по непонятно каким причинам игнорирует последнее изменение буфера обмена и в поле ввода копируется текст как будто буфер обмена не изменялся. Как решить эту проблему и заставить приложение копировать текст который я сам помещаю в буфер обмена.
Ниже прилагаю часть кода которая непосредственно отвечает за вставку текста из буфера обмена.
Код:
procedure SendMsg;
begin
// копируем содержимое memo1 в буфер обмена
Clipboard.Clear;
Form1.Memo1.SelectAll;
Form1.Memo1.CopyToClipboard;
// кликаем в поле ввода в окне другой программы для того чтобы оно стало активным для ввода
PostMessage(Handler, WM_LBUTTONDOWN, MK_LBUTTON, MAKELparam(EditX, EditY));
sleep(100);
PostMessage(Handler, WM_LBUTTONUP, 0, MAKELparam(EditX, EditY));
sleep(1000);
// посылаем окну комбинацию ctrl + v
keybd_event(VK_CONTROL,0,0,0);
sleep(100);
PostMessage(Handler, WM_KEYDOWN, Ord('V'), $002F0001);
sleep(100);
PostMessage(Handler, WM_KEYUP, Ord('V'), $C02F0001);
sleep(100);
keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
sleep(100);
// нажимаем ентер
PostMessage(Handler, WM_KEYDOWN, VK_RETURN, $00000001);
sleep(100);
PostMessage(Handler, WM_KEYUP, VK_RETURN, $C0000001);
sleep(100);
end;
|