Jaki proces trzyma plik

Odpowiedz Nowy wątek
2008-02-21 23:42
Kamil2
0

Jak sprawdzić, jaki proces "trzyma" dany plik ?

Chodzi o to, że mamy plik: muzyka.mp3 który jest odtwarzany przez Winampa. Jak to sprawdzić ?

Dzięki

Pozostało 580 znaków

2008-02-22 14:08
Kamil2
0

Nie sądze, aby nikt nie wiedział, na pewno jest sposób na to... jak to sprawdzić ?

Pozostało 580 znaków

2008-02-22 14:21
0

ściągnij sobie wholockme


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2008-02-22 14:42
Kamil2
0

Ściągnąłem, ale nie ma w nim źródeł.

Parametry wydawać temu programowi widzę, że można, ale czy pozostaje mi tylko taki sposób ?

Pozostało 580 znaków

2008-02-22 14:52
0

pozostaje Ci jeszcze grzebanie w googlu i/lub na MSDNie


- Ciemna druga strona jest.
- Nie marudź Yoda, tylko jedz tego tosta.
Google NIE GRYZIE!
Pomogłem - kliknij

Pozostało 580 znaków

2008-02-26 12:48
Kamil2
0

Widzę, że nikt nie ma pomysłu...

To może z innej strony. Czy jest w Windows jakiś program (coś jak cmd.exe), któremu wydam rozkaz pobrania odniesienia do procesu pliku ?

Może systemowy Menedżer Procesów ma taką opcję. Oczywiście wszystko odbywać się ma po cichu, bez okien.

Pozostało 580 znaków

2008-02-26 23:56
0

to moze ja troche podpowiem

najpierw klaska do przechowywania danych

  TApp = class
    fPID: Integer;
    fPArentPID: Integer;
    fPIDName: string;
    fThread: Integer;
    fDLLName: TStringList;
    fDLLPath: TStringList;
    fDescription: string;
  end;

oczywiscie u Ciebie moze wygladac inaczej.
Teraz robimy snapshoot procesow i enumerujemy kazdy w celu pobrania aplikacji
Zapiujemy do stringlisty obiekty (podajemy jako klucz np PID lub co Ci wyodniej)

function TForm2.GetApps(AppName: string): TStringList;
var fHandle: THandle;
  fModHandle: THandle;
  fProcess: TProcessEntry32;
  fModule: TMODULEENTRY32;
  App: TApp;
  i: Integer;
  IsDLL: Boolean;
  IsProcess: Boolean;
  fDesc: string;
  sPath: string;
begin
  IsDLL := False;
  IsProcess := False;

  Result := TStringList.Create();
  Result.Clear();
  fDesc := 'DLL Name: %s'#13#10 +
           'DLL Path: %s'#13#10 +
           'ModuleId: %d'#13#10;

  fHandle := CreateToolHelp32SnapShot(TH32CS_SNAPALL, GetCurrentProcessId);
  fProcess.dwSize := SizeOf(fProcess);

  IsProcess := Process32First(fHandle, fProcess);

  while IsProcess do
  begin
    App := TApp.Create();
    App.fDLLName := TStringList.Create();
    App.fDLLPath := TStringList.Create();
    IsDLL := Module32First(fHandle, fModule);
    while IsDLL do
    begin
      if Edit1.Text <> '' then
        sPath := fModule.szModule
      else
        sPath := ExtractFileExt(fModule.szModule); 
      if SameText(sPath, Edit1.Text + '.dll') then
      begin
        App.fPID := fProcess.th32ProcessID;
        App.fPIDName := fProcess.szExeFile;
        App.fDLLName.Add(fModule.szModule);
        App.fDLLPath.Add(fModule.szExePath);
        App.fDescription := App.fDescription +
          Format(fDesc, [fModule.szModule, fModule.szExePath, fModule.th32ModuleID]);
      end;
      IsDLL := Module32Next(fHandle, fModule)
    end;
    if App.fDLLName.Count > 0 then
      Result.AddObject(IntToStr(App.fPID), App);
    IsProcess := Process32Next(fHandle, fProcess);
  end;
  CloseHandle(fHandle);
  Result.Count;
end;

PS. Pamietaj pozniej o zwolnieniu obiektow ze stringlisty


Tomasz Andrzejewski
Delphi (XE3-XE7) framework engineer @ InterLan
MCP: Microsoft SQL Server 2008, Implementation and Maintenance

Pozostało 580 znaków

2008-02-27 22:35
Kamil2
0

W porządku, Dziękuję.

Jednak to nie rozwiązuje do końca problemu, bo to tylko moduły (biblioteki) załadowane przez aplikację, a nie wszystkie pliki z jakich korzysta w sensie (używa/odtwarza/edytuje/podgląda (zdjęcie)).

Ale już coraz bliżej :)

Pozostało 580 znaków

2008-02-28 23:47
0

fModule.szExePath

w tych klasach <ort>napewno </ort>jest cos co Ci pomoze


Tomasz Andrzejewski
Delphi (XE3-XE7) framework engineer @ InterLan
MCP: Microsoft SQL Server 2008, Implementation and Maintenance

Pozostało 580 znaków

2008-03-01 20:28
Kamil2
0

crowa, pomóż.

Coś w tym kodzie jest nie tak.
Wskazuję, na te miejsca, gdzie prawdopodobnie jest źle:

function TForm2.GetApps(AppName: string): TStringList;

Zmienna AppName nigdy nie została wykorzystana w kodzie, więc nie wiem po co jest i gdzie jej użyć.

IsDLL := Module32First(fHandle, fModule);

Tutaj powinno chyba być (fModHandle, fModule), ale i tak nie działa poprawnie, bo nie pokazuje modułów od wskazanego procesu.

Przed:

IsDLL := Module32First(fHandle, fModule);

...powinno jeszcze chyba być:

fModHandle   := CreateToolHelp32SnapShot(TH32CS_SNAPMODULE, fProcess.th32ProcessID);

może ktoś mi poprawić ten kod ?

Pozostało 580 znaków

2008-03-01 23:27
ŁF
0

i tak Ci to niewiele da. moduły to są załadowane biblioteki różnorakiego rodzaju. owszem, są to otwarte pliki, ale jedynie mała ich część.


Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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