私は文字列変数を持っています。今私は、クリップボードを使用せずに別のアプリケーションのコントロールに文字列値を格納したい。私はそれを手動でやりたい他のアプリケーションにテキストを送る
私はSendMessage(WM_SETTEXT)を使うべきだと思います。どちらの方法をお勧めしますか(例を挙げてください)?
私は文字列変数を持っています。今私は、クリップボードを使用せずに別のアプリケーションのコントロールに文字列値を格納したい。私はそれを手動でやりたい他のアプリケーションにテキストを送る
私はSendMessage(WM_SETTEXT)を使うべきだと思います。どちらの方法をお勧めしますか(例を挙げてください)?
アプリケーションは、それが送信する必要があり、文字列を知っているように...
必要に応じて、ターゲットウィンドウ/アプリケーションにフォーカスを設定することができます。
文字列に含まれる各文字を処理して、キーストロークをシミュレートします。そのような何か(あなたが期待どおりに動作するようにあまりにも基本的な、しかし、アイデアはここにある...; 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 、... keybd_eventと
動作しません。コンパイルしてコードを確認してください。 – Kermia
@Kermiaこれは既に持っているSendKeysに相当します。 –
@Kermia:「うまくいきません」というのはあまり有益ではありません。 –
入力複数バイト文字:
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;
は、他のアプリケーションに依存します。どのアプリケーションですか?そのアプリケーションのどのコントロールをターゲットにしていますか? –
OK、実際にクリップボードを使って厳密な意味で*貼り付けをしたくないのですか? –
まず最初に、ターゲットエディットコントロールのウィンドウハンドルが必要です。 –