という処理が必要になったので、Delphiで作成してみた。
以下、指定したアプリを前面に持ってくるサンプル。
procedure TForm1.Button1Click(Sender: TObject); unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) LabeledEdit1: TLabeledEdit; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private 宣言 } public { Public 宣言 } end; var Form1: TForm1; implementation Uses JclSysInfo; {$R *.dfm} function AllowSetForegroundWindow(dwProcessID: Cardinal): BOOL; stdcall; external 'user32.DLL'; procedure TForm1.Button1Click(Sender: TObject); var ProcessList : TStringList; i : Integer; Pid : Cardinal; Wnd: THandle; begin ProcessList := TStringList.Create; try //起動するアプリは、自前のものではないので //プロセスがいるかどうかは、プロセスのリストを総当りで //確認 JclsysInfo.RunningProcessesList(ProcessList,true); i := -1; ProcessList.Find(LabeledEdit1.Text,i); if i >= 0 then begin Pid := GetPidFromProcessName(ProcessList.Strings[i]); Wnd :=GetMainAppWndFromPid(Pid); //いつぞやのバージョンのwindowsから前面に出す許可を //しておくことが必要 AllowSetForegroundWindow(Pid); //最小化されているのでアイコンからもとのサイズに //戻す if IsIconic(Wnd) then begin OpenIcon(Wnd); end else begin //指定したウインドウを前面に SetForegroundWindow(wnd); //場合によっては、AttachThreadInputで //前面に出したいウインドのスレッドにあタッチが必要 end; end; finally ProcessList.Free; end; end; end.
0 件のコメント:
コメントを投稿