Конференция "WinAPI" » Буфер обмена winapi [D7]
 
  • PonyHunter © (20.04.13 18:43) [0]
    Задача: послать стороннему приложению, (в данном случае игра на 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]
  • clickmaker © (25.04.13 19:19) [1]
    Form1.Memo1.CopyToClipboard;
    Form1.Memo1.CopyToClipboard;

    :)
 
Конференция "WinAPI" » Буфер обмена winapi [D7]
Есть новые Нет новых   [119103   +94][b:0][p:0]