我有一个字符串变量。现在我想在不使用剪贴板的情况下将字符串值存储到另一个应用程序的控件中。我想手动完成。
我想我应该使用SendMessage(WM_SETTEXT)。你建议采用哪种方式(请举例)?
答案 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;