という処理が必要になったので、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.