怎样获取运行程序的文件名 已知 Handle(再现等待)(50分)

  • 主题发起人 主题发起人 ftop1
  • 开始时间 开始时间
F

ftop1

Unregistered / Unconfirmed
GUEST, unregistred user!
看来还要显示可执行文件的名称

("`-''-/").___..--''"`-._
`6_ 6 ) `-. ( ).`-.__.`)
(_Y_.)' ._ ) `._ `. ``-..-'
_..`--'_..-_/ /--'_.' ,'
(il),-'' (li),' ((!.-'
 
var
hCurrentWindow: HWnd;
szText: array[0..254] of char;
begin
memo1.Lines.Clear;
hCurrentWindow := GetWindow(Handle, GW_HWNDFIRST);
while hCurrentWindow <> 0 do
begin
if GetWindowText(hCurrentWindow, @szText, 255)>0 then
Memo1.Lines.Add(StrPas(@szText));
hCurrentWindow:=GetWindow(hCurrentWindow, GW_HWNDNEXT);
end;
 
已知 运行程序的 handle
 
在重复一下 是想要exe文件名 不是想要标题
在线等待
 
做个记号等我装完delphi5
 
要得到进程和 主窗口 handle之间的关系:

85. 获得进程列表,并终止 Excel 进程
procedure TForm1.Button1Click(Sender: TObject);
var
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
Ret : BOOL;
ProcessID : integer;
s:string;
begin
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
Ret:=Process32First(FSnapshotHandle,FProcessEntry32);
Memo1.clear;
while Ret do
begin
Memo1.lines.add(FProcessEntry32.szExeFile);
s:=ExtractFileName(FProcessEntry32.szExeFile);
if s='EXCEL.EXE' then
begin
ProcessID:=FProcessEntry32.th32ProcessID;
TerminateProcess(OpenProcess(PROCESS_TERMINATE,false,ProcessID),1);
s:='';
end;
Ret:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;

 
以上要用到单元tlhelp32

这么快!
 
呵呵终于凑出来了.
要加上psapi单元.

function GetProcessfilename(hand:thandle):string;
var
aThreadID: DWORD;
aProcessID:dword;
aProcHandle: DWORD;
chararr:array[0..127] of char;
xx:hmodule;
yy:dword;
begin
if hand<>0 then
begin
aThreadID := GetWindowThreadProcessId(hand,@aProcessID);

if aProcessID<>0 then
aProcHandle := OpenProcess(PROCESS_ALL_ACCESS, False, aProcessID);

if aProcHandle<>0 then
getmodulebasename(aprochandle,xx,chararr,127);
getmodulefilename(xx,chararr,127);
result:=chararr;
end;
end;
 
多人接受答案了。
 
后退
顶部