Показать сообщение отдельно
  #1  
Старый 20.04.2013, 18:28
PonuHunter PonuHunter вне форума
Прохожий
 
Регистрация: 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;
Ответить с цитированием