////得到创建本窗口的文件名
// 1 - 获取窗口句柄
// 2 - 获取进程ID
GetWindowThreadProcessId(hw, ProcID);
// 3 - 通过进程ID获取进程句柄
hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, ProcID);
if hProcess <> 0 then
begin
// 4 - 获取路径(这个函数在psapi中)
if GetModuleFileNameEx(hProcess, 0, sBuf, SizeOf(sBuf) ) <> 0 then
Edit1.text := StrPas(sBuf);
end;
GetModuleFileNameEx函数在Win98下总是返回0,而WinXP正常,why呀?!!
// 1 - 获取窗口句柄
// 2 - 获取进程ID
GetWindowThreadProcessId(hw, ProcID);
// 3 - 通过进程ID获取进程句柄
hProcess := OpenProcess(PROCESS_ALL_ACCESS, True, ProcID);
if hProcess <> 0 then
begin
// 4 - 获取路径(这个函数在psapi中)
if GetModuleFileNameEx(hProcess, 0, sBuf, SizeOf(sBuf) ) <> 0 then
Edit1.text := StrPas(sBuf);
end;
GetModuleFileNameEx函数在Win98下总是返回0,而WinXP正常,why呀?!!
解决方案 »
- 如何在tprinter中指定纸张的大小?
- 急求教:我在使用TIDCLIENTTCP控件做通讯客户端时,连接SERVER总是报#10065错误??
- 我用delphi調用計算器,但我怎樣在程序中取得該結果呢。
- ★★Delphi 2004-03专家榜★★
- 大散分(200),并问一个小问题!
- 好莫名其妙的问题,高手们来看看。delphi(ado)+sql server2000
- delphi菜鸟!!!有人认为delphi是rad工具中"rad"是什么意思啊!在线等待
- 如果数据库中含有时间列的话,如何向数据库中添加数据
- 软件试用,提意见有分!
- 请问换页符的ASCII码是多少?
- SQL语句的问题,急!
- 怎样查找文本中的字符
Requirements
Client: Requires Windows XP, Windows 2000 Professional, or Windows NT Workstation 4.0.
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0)/ Process32First/Process32Next可以得到系统所有进程的信息,其中PROCESSENTRY32中的szExeFile就含路径(在win2k以上它不含路径)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;implementationuses tlhelp32;
{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
p:PROCESSENTRY32;
h:tHANDLE;
begin
Memo1.Clear;
h:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
p.dwSize:=sizeof(p);
Process32First(h,p);
repeat
Memo1.Lines.add(format('%.8x %s',[p.th32ProcessID,p.szExeFile]));
until not Process32Next(h,p);
CloseHandle(h);
end;end.
如果你已有进程的ID,只要和p.th32ProcessID比较一下就可