请问如何在 Win2000下列出当前运行的所有程序的完整路径,而不仅仅是文件名?
解决方案 »
- ComboBox的选项问题!!
- 动态创建控件,并产生控件的事件 比如程序动态生成的TComboBox,如何生成这个控件的事件
- 挑選符合條件的最接近的數據!
- 软件文档怎么写。请高手帮我。谢谢
- 报表的Detail行本来是根据记录数自动伸缩的,我想固定其高度,应该怎样实现?
- 救救菜鸟~请问怎样在Delghi6中将所做的程序隐藏到工具栏中啊
- 如何实现这样的结果?
- 关于socket中ctNonBlocking与ctBlocking的问题求教
- 求排列组合算法(不好意思,基础工夫不行):有10个字符,怎么求出他们所有的组合,不是求有多少个组合:)
- 急!如何在DELPHI编的程序中运行一个文件
- 从Mouse.CursorPos转为某控件中的坐标 有什么好的方法?
- 你需要什么
然后用GetModuleHandle获得模块句柄
GetModuleName来获得进程全路径
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}function get(id:int64):string;
var lppe:TProcessEntry32;
mo:tmoduleentry32;
lm:thandle;
found :boolean;
found1:boolean;
Hand:THandle;
ttt_t:int64;
begin
result:='';
ttt_t:=id;
Hand:=CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
if hand>0 then
lppe.dwSize:= sizeof(PROCESSENTRY32);
found:=Process32First(Hand,lppe);
while found do
begin
if ttt_t=lppe.th32ProcessID then
begin
lm := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,lppe.th32ProcessID);
if lm>0 then
mo.dwSize:= sizeof(MODULEENTRY32);
found1:= module32First(lm,mo);
if found1 then
result:=mo.szExePath
else
result:='';
end;
found:= Process32next(Hand,lppe);
end;
closehandle(hand);
end;
procedure TForm1.Button1Click(Sender: TObject);
var hand:thandle;
lppe:PROCESSENTRY32;
found:boolean;
v_v:string;
tempdir:array[0..100]of char;
begin
memo1.Lines.BeginUpdate ;
getwindowsdirectory(tempdir,100);
Hand:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if hand>0 then
lppe.dwSize:= sizeof(PROCESSENTRY32);
found:=Process32First(Hand,lppe);
while found do
begin
v_v:=get(lppe.th32ProcessID);
if length(v_v)>10 then
memo1.lines.Add(v_v)
else
memo1.lines.Add(string(tempdir)+'\'+strpas(lppe.szExeFile));
found:=Process32next(Hand,lppe);
end;
closehandle(hand);
memo1.Lines.EndUpdate ;
end;end.