ShellExecuteを利用したアプリを遠隔操作する方法?

解決


ぽち  2003-12-17 21:39:36  No: 6266

ShellExecuteを使って,(例えば)メモ帳を起動
→クリップボードに予めコピーしていたものを,アクティブになったメモ帳にペーストしたいです.(起動後にはペースト完了)

こちら,初心者でやり方がまったく思い浮かびません・・
よろしくお願いします.


ぽち  2003-12-17 21:40:37  No: 6267

環境は
Windows XP Professional
Delphi 6 Personal
です.


にしの  2003-12-17 21:58:52  No: 6268

ShellExecuteは、起動したかどうか判断できません。
CreateProcessでプロセスを起動し、そのプロセスの、EDITクラスを探してキーを送信してやれば良いかと思います。

どうしてもShellExecuteでしたいのであれば、FindWindow, FindWindowExなどのAPIを使ってメモ帳の入力ウィンドウを取得します。
ShellExecuteの前に起動しているメモ帳を全て覚えておき、ShellExecuteの後に、覚えていた(以前起動していた)メモ帳以外のメモ帳を検索、貼り付けをします。
このとき、同時にメモ帳が起動した場合や、ShellExecuteで起動したメモ帳よりも先にメモ帳が開いた場合は、期待した動作をしません。


ぽち  2003-12-18 23:47:21  No: 6269

にしの様,ありがとうございます.

CreateProcessを使ってプロセスの起動,キーの送信は,多方面を検索,参照しうまくいきました!

var
   SI: TStartupInfo;
   PI: TprocessInformation;
   WinHnd: HWND;
begin
   Memo1.SelectAll;
   Memo1.CopyToClipboard;

   GetStartupInfo(SI);

   if not CreateProcess(PChar('c:****.exe'), nil, nil, nil, False,
            CREATE_DEFAULT_ERROR_MODE, nil, nil, SI,PI) then

            raise Exception.Create('****.exeを起動できません');

     WaitForInputIdle(Pi.hProcess, INFINITE);
     WinHnd := FindWindow('wgnupl32',nil);
     SetForegroundWindow(WinHnd);

     Keybd_event(VK_MENU,0,0,0);  {Alt + }
     Keybd_event(VK_SPACE,0,0,0);  {スペース +}
     Keybd_event(VK_SPACE,0,KEYEVENTF_KEYUP,0); {スペースを離す}
     Keybd_event(VK_MENU,0,KEYEVENTF_KEYUP,0); {Altを離す}
     ・・・・・
end;


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加