发送文本到其他应用程序

时间:2011-09-17 11:36:42

标签: delphi clipboard copy-paste sendmessage

我有一个字符串变量。现在我想在不使用剪贴板的情况下将字符串值存储到另一个应用程序的控件中。我想手动完成。

我想我应该使用SendMessage(WM_SETTEXT)。你建议采用哪种方式(请举例)?

2 个答案:

答案 0 :(得分:3)

当您的应用程序知道它必须发送的字符串时......

如果需要,您可以将焦点设置为目标窗口/应用程序。

然后处理字符串中包含的每个字符以模拟其键击。像这样的东西(太基本了,不能完全像你期望的那样工作,但这个想法就在这里......; 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;

如果你的字符串大写,...,你需要模拟shift,ctrl,...

答案 1 :(得分:0)

使用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;