Wykrycie uruchomionego programu w WinXP ?!

0

Witam.
Problemik jak w temacie, mam taki kod na win9x działa bez problemu może ktoś wie którą z funkcji trzeba zmienić aby zadziałało na XP?

function TFmain.CheckAp(exepath : string) : boolean;
var
  pe: TProcessEntry32;
  h: THandle;
  test,running: boolean;
  path : string;
begin
  result := False;
  running := False;
  h := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  try
    pe.dwSize := SizeOf(TProcessEntry32);
    test := Process32First(h,pe);
    while test do
      begin
        path := lowercase(pe.szExeFile);
        if path = lowercase(exepath) then
          begin
            running := true;
            Break;
          end;
        test := Process32Next(h,pe);
      end;
  finally
    CloseHandle(h);
    if running = true then result := True;
  end;
end;
0

POwinno byc wszystko OK zarowno na XP jak i 9x. Tutaj masz podobny programik http://4programmers.net/Forum/viewtopic.html?id=45211 i jak widzisz postepowanie w obu przypadkach jest identyczne.
Ten sposob powinien dzialac - bo jest standardem jesli chodzi o szukanie nazw odpalonych programow.

0

Dzięki za odpowiedź snaj, jednak jak wiesz w przyrodzie od powinno do dziala jest ...... . Nie stety na XP nie wykrywa uruchomionego procesu, sprawdzałem to co podałeś mi w tamtym poście lecz nic nie znalazłem, ale z tego co widziałem to Dexterowi też nie zadziałało. Masz moze jeszcze jakieś pomysły ? Lub kto inny, HELP !!!

0

Na 2000 (i chyba też XP) w pe.szExeFile pamiętana jest tylko nazwa pliku (bez ścieżki) !
Powninieneś użyć GetModuleFileNameEx (moduł PsAPI).

//dopisek
Rozwiązanie (na Win 2000 i Win Meeeeee działa OK):

uses
  ......, TLHelp32, PsAPI, ..........;

function GetProcessFileName(const pID: DWORD): string;
var
  hProc: HWND;
  buffer: array[0..1023] of Char;
  snap: THandle;
  pe32: TProcessEntry32;
begin
  Result := '';

  if (Win32Platform = VER_PLATFORM_WIN32_NT) and (Win32MajorVersion > 3) then
  begin
    hProc := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False, pID);
    if hProc <> 0 then
    begin
      FillChar(buffer, SizeOf(buffer), 0);
      GetModuleFileNameEx(hProc, 0, buffer, SizeOf(buffer));
      Result := buffer;
    end;
    CloseHandle(hProc);
  end
  else
  begin
    snap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    pe32.dwSize := SizeOf(TProcessEntry32);
    if integer(Process32First(snap, pe32)) <> 0 then
      repeat
        if integer(pID) = integer(pe32.th32ProcessID) then
        begin
          Result := pe32.szExeFile;
          Break;
        end;
      until integer(Process32Next(snap, pe32)) = 0;
    CloseHandle(snap);
  end;
end;


function CheckApp(const FileName: string): boolean;
var
  snap: THandle;
  pe32: TProcessEntry32;
begin
  Result := False;

  snap := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  pe32.dwSize := SizeOf(TProcessEntry32);
  if integer(Process32First(snap, pe32)) <> 0 then
    repeat
      if UpperCase(FileName) = UpperCase(GetProcessFileName(pe32.th32ProcessID)) then
      begin
        Result := True;
        Break;
      end;
    until integer(Process32Next(snap, pe32)) = 0;
  CloseHandle(snap);
end;
0

Właśnie doszedłem do tego że w WinXP wynikiem ....szExeFile jest sama nazwa pliku, ale to co podałeś Jack jest po prostu super. Przy mojej wiedzy pracowałbym nad tym pewnie z 3 lata. Co tu duzo gadać stałeś sie moim prywatnym Bogiem [angel] , serdeczne dzieki !!!

1 użytkowników online, w tym zalogowanych: 0, gości: 1