View Full Version : Trovare nome eseguibile da handle a finestra
Ho visto ke per trovare a partire da un handle di una finestra il nome dell'eseguibile ke l'ha creata bisogna usare le funzioni della libreria psapi...
Il problema è ke la libreria nn è inclusa in windows e nn so come fare ad includerla(uso vc++ 6.0).....Potete dirmi come fare a includerla nel progetto?Una volta inclusa il mio programma è portabile oppure necessita ke la libreria sia presente sui pc dove eseguo il programma?Ma soprattuto Psapi è l'unico modo per trovare il nome dell'eseguibile avendo l'handle di una finestra(tipo ricavato da EnumWindows)?Grazie.....
Ho visto ke per trovare a partire da un handle di una finestra il nome dell'eseguibile ke l'ha creata bisogna usare le funzioni della libreria psapi...
Il problema è ke la libreria nn è inclusa in windows e nn so come fare ad includerla(uso vc++ 6.0).....Potete dirmi come fare a includerla nel progetto?Una volta inclusa il mio programma è portabile oppure necessita ke la libreria sia presente sui pc dove eseguo il programma?Ma soprattuto Psapi è l'unico modo per trovare il nome dell'eseguibile avendo l'handle di una finestra(tipo ricavato da EnumWindows)?Grazie.....Ecco una funzione per ottenere il nome dell'eseguibile a partire da un handle di finestra:
#define STRICT
#include <windows.h>
#include <psapi.h>
BOOL GetExeFromWindow (HWND hWnd, LPSTR lpszFileName, DWORD dwSize)
{
DWORD dwProcessId, dwModules, dwRet;
HANDLE hProcess;
HMODULE hModule;
if (hWnd == NULL || GetWindowThreadProcessId (hWnd, &dwProcessId) == 0)
return FALSE;
hProcess = OpenProcess (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwProcessId);
if (hProcess == NULL)
return FALSE;
if (EnumProcessModules (hProcess, &hModule, sizeof (hModule), &dwModules) == FALSE)
{
CloseHandle (hProcess);
return FALSE;
}
dwRet = GetModuleFileNameEx (hProcess, hModule, lpszFileName, dwSize);
CloseHandle (hProcess);
return dwRet > 0;
}
Linkare con psapi.lib
La libreria PSAPI, se non sbaglio, è utilizzabile solo da NT 4 in poi. Comunque vedere <qui> (http://msdn2.microsoft.com/en-us/library/ms684884.aspx) su MSDN.
Per poter avere informazioni sui processi anche sui Win 9x, c'è da usare la libreria "Tool Help".
Ma per includere psapi.dll nel progetto mi dovrebbe serivire il .lib e il .h ma dove li trovo?Ci sono in qualke cartella di windows oppure li posso scaricare da qualke parte?
Ma per includere psapi.dll nel progetto mi dovrebbe serivire il .lib e il .h ma dove li trovo?Ci sono in qualke cartella di windows oppure li posso scaricare da qualke parte?Il VC++ 6 non è certo recentissimo ma credo che psapi.h e psapi.lib li abbia (purtroppo non ho possibilità di verificare). E comunque lo verifichi tu in un attimo: vai sotto la root del vc++, e fai dir psapi.* /s
Poi basta andare nelle proprietà del progetto e nella sezione dedicata al Linker specificare come input la libreria psapi.lib.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.