ShellExecuteを使って,(例えば)メモ帳を起動
→クリップボードに予めコピーしていたものを,アクティブになったメモ帳にペーストしたいです.(起動後にはペースト完了)
こちら,初心者でやり方がまったく思い浮かびません・・
よろしくお願いします.
環境は
Windows XP Professional
Delphi 6 Personal
です.
ShellExecuteは、起動したかどうか判断できません。
CreateProcessでプロセスを起動し、そのプロセスの、EDITクラスを探してキーを送信してやれば良いかと思います。
どうしてもShellExecuteでしたいのであれば、FindWindow, FindWindowExなどのAPIを使ってメモ帳の入力ウィンドウを取得します。
ShellExecuteの前に起動しているメモ帳を全て覚えておき、ShellExecuteの後に、覚えていた(以前起動していた)メモ帳以外のメモ帳を検索、貼り付けをします。
このとき、同時にメモ帳が起動した場合や、ShellExecuteで起動したメモ帳よりも先にメモ帳が開いた場合は、期待した動作をしません。
にしの様,ありがとうございます.
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;
ツイート | ![]() |