パソコンで動作しているアプリケーションのEXE名を取り出して処理したいのですが、タスクマネージャに表示される様なEXE名を取り出す方法がありましたら教えて下さい。
他に動いているアプリケーションの一覧を知るには?
http://www.borland.co.jp/qanda/delphi/d0003287.html
ありがとうございました。
試してみましたが、TProcessEntry32等が未定義になりました。
「該当するバージョン:Delphi 1.0,Delphi 2.0,Delphi 3.0/Delphi3.1,Delphi4」となっていましたが、DelPhi 7.0ではどの様に使えばよろしいのでしょうか?
ここ
https://www.petitmonte.com/bbs/answers?question_id=1652
の GetAllProcessModuleName か GetProcessModule が役に立つでしょう。
>DelPhi 7.0ではどの様に使えばよろしいのでしょうか?
http://madia.world.coocan.jp/delphi/Win32API/Process.htm
B社のFAQサンプル間違っているようです。 (訂正依頼しました)
Pr.dwSize := sizeof (PROCESSENTRY32);を下記の場所に入れてください。
List.Clear;
Pr.dwSize := sizeof (PROCESSENTRY32);
Flag := Process32First( ListHandle, Pr);
http://www.borland.co.jp/qanda/delphi/d0003287.html
>http://support.microsoft.com/default.aspx?scid=kb;ja;175030
> 注 : Process32First() を呼び出す前に、PROCESSENTRY32 構造体の
> dwSize メンバに sizeof (PROCESSENTRY32) を設定するようにしてください。
>DelPhi 7.0ではどの様に使えばよろしいのでしょうか?
サンプルを試すには、
uses TLHELP32;
を追加してください
type
TForm1 = class(TForm)
...
public
{ Public 宣言 }
procedure GetProcessesList(List: TStringList);
...
end;
という具合に、 procedure GetProcessesList(List: TStringList);
を追加してください
。
数多くのレス、ありがとうございました。
サンプルを参照してプログラム作成を行います。
質問内容が,EXE名を知りたいということですので,他の方の様にプロセス
の一覧で取得するのが正攻法だとは思います.
一方,もし,起動中のアプリだけに操作をする場合であれば,直接
ハンドルを取得する以下のようなコードも考えられます.
参考までに.
implementation
{$R *.DFM}
// 使用コンポーネントは以下の通り
// Button1 (TButton)
// ListView (TListView);
// ImageList1 (TImageList)
//=============================================================================
// 現在起動中のアプリの一覧を作成
// ここでは[Ctrl]+[Alt]+[Delete]で表示されるタスクマネージャの[アプリケーシ
// ョン]タブの表示を真似てみた.
//
// ・タイトルがあり,表示されているウィンドウのみを対象とする
// ・他のウィンドウに所有されていないウィンドウのみとする
// ・非可視のウィンドウはリスト対象から除く
// ・タスクトレイアプリケーションも除く
// リストするウィンドウはGetWindow等でも制御可能.詳細は以下を参照
// http://homepage2.nifty.com/Mr_XRAY/Halbow/VCL06.html
//=============================================================================
function EnumWindowProc(Handle: hWnd; lPalam: Integer):Boolean;Stdcall;
Var
Title : array[0..MAX_PATH] of char;
AItem : TListItem;
AIcon : TIcon;
begin
Result:=True;
//所有されていないウィンドウのみ
if GetWindow(Handle,GW_OWNER)<>0 then exit;
//非可視ウィンドウは除く
if not IsWindowVisible(Handle) then exit;
if GetWindowText(Handle, Title,MAX_PATH-1 )>0 then begin
AIcon:=TIcon.Create;
if AnsiUpperCase(Title)<>'PROGRAM MANAGER' then begin
AItem:=Form1.ListView1.Items.Add;
AItem.Caption:=Title;
AIcon.Handle:=GetClassLong(Handle,GCL_HICONSM);
AItem.ImageIndex:=Form1.ImageList1.AddIcon(AIcon);
end;
end;
end;
//=============================================================================
// 一覧表示用のListViewの設定
//=============================================================================
procedure TForm1.FormCreate(Sender: TObject);
begin
ListView1.ViewStyle:=vsReport;
ListView1.SmallImages:=ImageList1;
ListView1.Columns.Add;
ListView1.Columns[0].Caption :=' タスク';
ListView1.Columns[0].Width :=326;
end;
//=============================================================================
// ボタンクリックでウィンドウのリストを作成
//=============================================================================
procedure TForm1.Button1Click(Sender: TObject);
begin
ListView1.Items.Clear;
ImageList1.Clear;
EnumWindows(Addr(EnumWindowProc), 0);
end;
end.
ツイート | ![]() |