Pobieranie ścieżki pliku EXE danego okna

dział ogólny

Pobieranie ścieżki pliku EXE danego okna

Nowy postprzez beherit » wtorek, 30 października 2012, 21:52

Przesiadłem się z C++Builder 2010 na XE3 i mam pewien problem z funkcją pobierającą ścieżkę do pliku EXE danego okna. Wcześniej robiłem to pobierając uchyt do okna, następnie jego PID i wywołując poniższą funkcję:
Kod: Zaznacz cały
UnicodeString GetPathOfProces(DWORD PID)
{
  HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,PID);
  MODULEENTRY32 me32;
  Module32First(hSnapshot,&me32);
  CloseHandle(hSnapshot);
  return me32.szExePath;
}
//---------------------------------------------------------------------------

Niestety nie działa to na XE3, nie zwraca mi poprawnie ścieżki. Zamiast powyższej funkcji próbowałem użyć GetWindowModuleFileName ale efekt ten sam. Pytanie - jak uzyskać ścieżkę do pliku EXE mając jedynie uchwyt do okna?
Obrazek
Avatar użytkownika
beherit
Homos antropiczny
Homos antropiczny
 
Posty: 62
Dołączył(a): poniedziałek, 16 lutego 2009, 19:55
Lokalizacja: Jarocin
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 10
Kompilator: C++Builder XE5
Gadu Gadu: 0
    Windows 7Firefox

Re: Pobieranie ścieżki pliku EXE danego okna

Nowy postprzez Cyfrowy Baron » wtorek, 30 października 2012, 22:08

Długo poczekasz na odpowiedź, bo mało kto korzysta z tej nowej wersji środowiska.

beherit napisał(a):Niestety nie działa to na XE3, nie zwraca mi poprawnie ścieżki.


A co zwraca?

Sprawdziłeś czy PID ma prawidłowy numer?
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
PodziÄ™kowaÅ‚ : 12
OtrzymaÅ‚ podziÄ™kowaÅ„: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    WindowsChrome

Re: Pobieranie ścieżki pliku EXE danego okna

Nowy postprzez beherit » wtorek, 30 października 2012, 22:15

PID jest prawidłowy, zwracane są "chińskie znaczki". Zmieniłem trochę prockę i teraz zwraca mi pusty ciąg znaków:
Kod: Zaznacz cały
MODULEENTRY32 me32;
  me32.dwSize = sizeof(me32);
  HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, PID);
  Module32First(processesSnapshot, &me32);
  CloseHandle(processesSnapshot);
  return me32.szExePath;

W sumie nie wiem czy to wina XE3, być moze wcześniej tez to nie działało i dopiero teraz się skapnąłem :P
Obrazek
Avatar użytkownika
beherit
Homos antropiczny
Homos antropiczny
 
Posty: 62
Dołączył(a): poniedziałek, 16 lutego 2009, 19:55
Lokalizacja: Jarocin
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 10
Kompilator: C++Builder XE5
Gadu Gadu: 0
    Windows 7Firefox

Re: Pobieranie ścieżki pliku EXE danego okna

Nowy postprzez beherit » wtorek, 30 października 2012, 22:40

Poradziłem sobie jakoś, wklejam poprawiony kod:

Kod: Zaznacz cały
UnicodeString GetPathOfProces(DWORD dwProcessId)
{
  MODULEENTRY32 lpModuleEntry = {0};
  HANDLE hSnapShot = CreateToolhelp32Snapshot( TH32CS_SNAPMODULE, dwProcessId );
  if(!hSnapShot) return NULL;
  lpModuleEntry.dwSize = sizeof(lpModuleEntry);
  if(Module32First(hSnapShot, &lpModuleEntry))
  {
   CloseHandle(hSnapShot);
   return lpModuleEntry.szExePath;
  }
  CloseHandle(hSnapShot);
  return NULL;
}
//---------------------------------------------------------------------------
Obrazek
Avatar użytkownika
beherit
Homos antropiczny
Homos antropiczny
 
Posty: 62
Dołączył(a): poniedziałek, 16 lutego 2009, 19:55
Lokalizacja: Jarocin
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: Windows 10
Kompilator: C++Builder XE5
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości