-
Задача: послать стороннему приложению, (в данном случае игра на directx) в окно ввода, комбинацию клавиш ctrl + v, перед этим скопировав в буфер обмена какой нибудь текст. При этом приложение находится в свернутом состоянии, то есть не получает фокуса. С этим проблем нет, вставка текста работает. Только вот вставляется не тот текст который я копирую в буфер обмена, а тот текст который был в буфере до этого. То есть приложение по непонятно каким причинам игнорирует последнее изменение буфера обмена и в поле ввода копируется текст как будто буфер обмена не изменялся. Как решить эту проблему и заставить приложение копировать текст который я сам помещаю в буфер обмена. :mad:
Ниже прилагаю часть кода которая непосредственно отвечает за вставку текста из буфера обмена.
[CODE]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;[/CODE]
-
Form1.Memo1.CopyToClipboard; Form1.Memo1.CopyToClipboard;
:)
|