2011-09-17 4 views
1

私は文字列変数を持っています。今私は、クリップボードを使用せずに別のアプリケーションのコントロールに文字列値を格納したい。私はそれを手動でやりたい他のアプリケーションにテキストを送る

私はSendMessage(WM_SETTEXT)を使うべきだと思います。どちらの方法をお勧めしますか(例を挙げてください)?

+1

は、他のアプリケーションに依存します。どのアプリケーションですか?そのアプリケーションのどのコントロールをターゲットにしていますか? –

+1

OK、実際にクリップボードを使って厳密な意味で*貼り付けをしたくないのですか? –

+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; 

あなたの文字列の大文字ならば、...、あなたがシフトをシミュレートする必要があり、CTRL 、... keybd_eventと

+0

動作しません。コンパイルしてコードを確認してください。 – Kermia

+0

@Kermiaこれは既に持っているSendKeysに相当します。 –

+2

@Kermia:「うまくいきません」というのはあまり有益ではありません。 –

0

入力複数バイト文字:

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; 
関連する問題