Delphi 向其他应用程序发送文本
我有一个字符串变量。现在我想将字符串值存储到另一个应用程序中的控件中,而不使用剪贴板。我想手工做Delphi 向其他应用程序发送文本,delphi,clipboard,copy-paste,sendmessage,Delphi,Clipboard,Copy Paste,Sendmessage,我有一个字符串变量。现在我想将字符串值存储到另一个应用程序中的控件中,而不使用剪贴板。我想手工做 我想我应该使用SendMessage(WM_SETTEXT)。您建议采用哪种方式(请举例)?因为您的应用程序知道它必须发送的字符串 如果需要,可以将焦点设置为目标窗口/应用程序 然后处理字符串中包含的每个字符以模拟它们的按键。类似的东西(太基本了,无法完全按照您的预期工作,但想法就在这里……;o)): 如果字符串大写,…,则需要模拟shift、ctrl、…使用keybd\u事件输入多字节字符: pr
我想我应该使用SendMessage(WM_SETTEXT)。您建议采用哪种方式(请举例)?因为您的应用程序知道它必须发送的字符串 如果需要,可以将焦点设置为目标窗口/应用程序 然后处理字符串中包含的每个字符以模拟它们的按键。类似的东西(太基本了,无法完全按照您的预期工作,但想法就在这里……;o)):
如果字符串大写,…,则需要模拟shift、ctrl、…使用keybd\u事件输入多字节字符:
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;
过程插入文本(文本:字符串);
varⅠ:整数;
j:整数;
ch:字节;
str:字符串;
开始
i:=1;
而IDE依赖于其他应用程序。它是哪个应用程序?你的目标是应用程序中的哪个控件?好的,那么你实际上不想粘贴任何严格意义上的东西,也就是说,使用剪贴板?每个应用程序都可能有不同的解决方案。该应用程序中的每个控件可能需要不同的处理。@Kermia不,它的工作方式是这样的。按CTRL+V,系统将合成键盘输入消息,这些消息将放置在前台线程的输入队列中。连接到该线程的消息泵随后处理这些按键。这通常涉及将WM_粘贴消息传递到窗口控件。Windows不会粘贴。具有输入焦点的应用程序收到一条消息,用户按下CTRL+V,然后选择从剪贴板读取,解释其内容,并做出相应的响应。在我看来,发送键是最可靠的方法。@Kermia这相当于您已经拥有的发送键。@Marjan我向代码发送了“Hello”,输出为:“h5/”。为什么?它与HELLO一起工作……而不是与小写字符一起工作……您必须管理它……是否有一个处理小写和大写字符的现成类?在我看来,这比(ab)使用剪贴板要好得多。
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;