/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Process-lokation?
Fra : Nikolaj Rasmussen


Dato : 12-08-04 15:26

Hej,
Jeg bruger CreateToolhelp32Snapshot til at hente aktive processer, men
modtager som sagt kun filnavnet på de enkelte.
Nogle der ved om det er muligt at få lokationen på den fil.

Er temmelig afgørende om f.eks a.exe er kaldt fra d:\ eller e:\ i dette
tilfælde.

En evt løsning kunne måske være at finde ud af det, hvis jeg kunne få en
liste over låste filer i windows.

mvh
Nikolaj Rasmussen



 
 
Carsten (16-08-2004)
Kommentar
Fra : Carsten


Dato : 16-08-04 06:39

Nikolaj Rasmussen wrote:
> Hej,
> Jeg bruger CreateToolhelp32Snapshot til at hente aktive processer, men
> modtager som sagt kun filnavnet på de enkelte.
> Nogle der ved om det er muligt at få lokationen på den fil.
>
> Er temmelig afgørende om f.eks a.exe er kaldt fra d:\ eller e:\ i dette
> tilfælde.
>
> En evt løsning kunne måske være at finde ud af det, hvis jeg kunne få en
> liste over låste filer i windows.
>
> mvh
> Nikolaj Rasmussen
>
>
Her er noget kode som jeg bruger for at se om en proces køre allerede.
(noget kode jeg har fået af en kammerat)
listen som der hentes er med fuld sti.
NB. Koden kan give problemer med NT version 4.
Mvh
Carsten


procedure CreateWin9xProcessList(List: TstringList);
var
hSnapShot: THandle;
ProcInfo: TProcessEntry32;
begin
if List = nil then Exit;
hSnapShot := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnapShot <> THandle(-1)) then
begin
ProcInfo.dwSize := SizeOf(ProcInfo);
if (Process32First(hSnapshot, ProcInfo)) then
begin
List.Add(ProcInfo.szExeFile);
while (Process32Next(hSnapShot, ProcInfo)) do
List.Add(ProcInfo.szExeFile);
end;
CloseHandle(hSnapShot);
end;
end;

procedure CreateWinNTProcessList(List: TstringList);
var
PIDArray: array [0..1023] of DWORD;
cb: DWORD;
I: Integer;
ProcCount: Integer;
hMod: HMODULE;
hProcess: THandle;
ModuleName: array [0..300] of Char;
begin
if List = nil then Exit;
EnumProcesses(@PIDArray, SizeOf(PIDArray), cb);
ProcCount := cb div SizeOf(DWORD);
for I := 0 to ProcCount - 1 do
begin
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or
PROCESS_VM_READ,
False,
PIDArray[I]);
if (hProcess <> 0) then
begin
EnumProcessModules(hProcess, @hMod, SizeOf(hMod), cb);
GetModuleFilenameEx(hProcess, hMod, ModuleName, SizeOf(ModuleName));
List.Add(ModuleName);
CloseHandle(hProcess);
end;
end;
end;

procedure GetProcessList(var List: TstringList);
var
ovi: TOSVersionInfo;
begin
if List = nil then Exit;
ovi.dwOSVersionInfoSize := SizeOf(TOSVersionInfo);
GetVersionEx(ovi);
case ovi.dwPlatformId of
VER_PLATFORM_WIN32_WINDOWS: CreateWin9xProcessList(List);
VER_PLATFORM_WIN32_NT: CreateWinNTProcessList(List);
end
end;

function EXE_Running(FileName: string; bFullpath: Boolean): integer;
var
i: Integer;
MyProcList: TstringList;
begin
MyProcList := TStringList.Create;
try
GetProcessList(MyProcList);
Result := 0;
if MyProcList = nil then Exit;
for i := 0 to MyProcList.Count - 1 do
begin
if not bFullpath then
begin
if CompareText(ExtractFileName(MyProcList.Strings[i]),
FileName) = 0 then
Result := succ(Result);
end
else if CompareText(MyProcList.strings[i], FileName) = 0 then
Result := succ(Result);
{if Result then Break;}
end;
finally
MyProcList.Free;
end;
end;

Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409079
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste