得到进程Handle后可这样子:
//uses JwaPsApi; // 如果没有这个单元文件,可以到jedi那里下一个。
//var Process: Cardinal;
//var Modules: array[0..255] of Cardinal;
//var NeededSize: Cardinal;
if EnumProcessModules(Process, @Modules, SizeOf(Modules), NeededSize) then
begin
for I := 0 to NeededSize div SizeOf(Cardinal) do
begin
if GetModuleFileNameEx(Process, Modules[I], @FileName, SizeOf(FileName)) <> 0 then
Memo1.Lines.Add(FileName);
end;
end;
//似乎一般情况下数组里的最后一个才是应用程序的文件名
//uses JwaPsApi; // 如果没有这个单元文件,可以到jedi那里下一个。
//var Process: Cardinal;
//var Modules: array[0..255] of Cardinal;
//var NeededSize: Cardinal;
if EnumProcessModules(Process, @Modules, SizeOf(Modules), NeededSize) then
begin
for I := 0 to NeededSize div SizeOf(Cardinal) do
begin
if GetModuleFileNameEx(Process, Modules[I], @FileName, SizeOf(FileName)) <> 0 then
Memo1.Lines.Add(FileName);
end;
end;
//似乎一般情况下数组里的最后一个才是应用程序的文件名
解决方案 »
- 咨询批量输入数据问题
- 如何修改windows的右键菜单
- deiphi和SQL server通信问题
- 一个导出数据库的问题,请大家帮帮忙
- 程序调用了realplay,打包时应该怎么办?
- dbgrid或者dbgrideh 或者TStringGrid如何实现分组效果
- 有没有搞错,我的专家分少了100多分,有没有管!!!!!
- 快要辞职了,送分,周末可能到红叶谷,送分,国庆快到了,送分
- 将VC的代码转换为Delphi。不够再加
- 一个急待解决的问题!谢谢各位。
- 請問*.bok文件用什么軟件打開
- 两个表的结构一模一样,我如何把查询到的一些记录直接"复制"到另一表中?insert into table1 values (select * from table2 where ..),不
win9x下我还没发现什么好办法可以得到它的路径及文件名
var
pcBuffer: PChar;
iHandle, iLen : Integer;
GetLongPathName: function (ShortPathName: PChar; LongPathName: PChar;
cchBuffer: Integer): Integer stdcall;
begin
Result := ShortName;
iHandle := GetModuleHandle('kernel32.dll');
if (iHandle <> 0) then begin
@GetLongPathName := GetProcAddress(iHandle, 'GetLongPathNameA');
if Assigned(GetLongPathName) then begin
pcBuffer := StrAlloc(MAX_PATH + 1);
iLen := GetLongPathName(PChar(ShortName), pcBuffer, MAX_PATH);
// 如果 result = 0 : 转换失败
// 如果 result > MAX_PATH ==> 转换失败, 缓冲区不够大
if (iLen > 0) and (iLen <= MAX_PATH) then begin
Result := StrPas(pcBuffer);
end; // 如果 (iLen <= MAX_PATH) 那么
StrDispose(pcBuffer);
end; // 如果 Assigned(GetLongPathName) 那么
FreeLibrary(iHandle);
end; // 如果 (iHandle <> 0) 那么
end;