という処理が必要になったので、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 件のコメント:
コメントを投稿