Отправить текст в другие приложения - PullRequest
1 голос
/ 17 сентября 2011

У меня есть строковая переменная.Теперь я хочу сохранить строковое значение в элементе управления в другом приложении без использования буфера обмена.Я хочу сделать это вручную.

Я думаю, что я должен использовать SendMessage (WM_SETTEXT).Какой способ вы предлагаете (с примером, пожалуйста)?

Ответы [ 2 ]

3 голосов
/ 17 сентября 2011

Поскольку ваше приложение знает строку, которую оно должно отправить ...

Вы можете при необходимости установить фокус на целевое окно / приложение.

Затем вы обрабатываете каждый символ, содержащийся в вашемстрока для имитации нажатия клавиш.Нечто подобное (слишком простое, чтобы работать точно так, как вы ожидаете, но идея здесь ...; o)):

for i := 1 to Length(yourstring) do
begin
  keybd_event(Ord(yourstring[i]), 0, 0, 0);  // key down
  Sleep(10);
  keybd_event(Ord(yourstring[i]), 0, 0 or KEYEVENTF_KEYUP, 0); / key up
  Sleep(10);
end;

Если ваша строка прописная, ..., вам нужно смоделировать сдвиг, ctrl, ...

0 голосов
/ 25 марта 2012

Ввод многобайтовых символов с помощью keybd_event:

procedure InsertText(text:string);
var i:integer;
    j:integer;
    ch:byte;
    str:string;
begin
  i:=1;
  while i<=Length(text) do
  begin
    ch:=byte(text[i]);
    if Windows.IsDBCSLeadByte(ch) then
       begin
         Inc(i);
         str:=inttostr(MakeWord(byte(text[i]), ch));
         keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), 0, 0);
         j:=1;
         while j<=Length(str) do
         begin
               keybd_event(96+strtoint(str[j]), MapVirtualKey(96+strtoint(str[j]), 0), 0, 0);
               keybd_event(96+strtoint(str[j]), MapVirtualKey(96+strtoint(str[j]), 0), 2, 0);
               j:=j+1;
         end;
         keybd_event(VK_MENU, MapVirtualKey(VK_MENU, 0), KEYEVENTF_KEYUP, 0);
       end
    else begin
           keybd_event(VkKeyScan(text[i]),0,0,0);
           keybd_event(VkKeyScan(text[i]),0,2,0);
         end;
    Inc(i);
  end;
end;
...