Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Closing an other '.exe'
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Fonctions Windows API
Divers
Thread ID:
00761170
Message ID:
00761487
Vues:
28
All links to http://www.news2news.com/vfp -- this is my code.

If you have a process handle m.hProcess use EnumProcessModules to retrieve handles to modules for this process. And for each module handle use either GetModuleFileNameEx or GetModuleBaseName functions:
DECLARE INTEGER EnumProcessModules IN psapi;
	INTEGER hProcess, STRING @ lphModule,;
	INTEGER cb, INTEGER @ cbNeeded

DECLARE INTEGER GetModuleFileNameEx IN psapi;
	INTEGER hProcess, INTEGER hModule,;
	STRING ModuleName, INTEGER nSize

DECLARE INTEGER GetModuleBaseName IN psapi;
	INTEGER hProcess, INTEGER hModule,;
	STRING @ lpBaseName, INTEGER nSize

lnBufSize = 4096  && should be large enough
lcModBuf = Repli(Chr(0), lnBufSize)
lnModBufRet = 0

IF EnumProcessModules(hProcess, @lcModBuf,;
	lnBufSize, @lnModBufRet) <> 0
	FOR lnModNo=1 TO lnModBufRet/DWORD
		hModule = buf2dword(SUBSTR(lcModBuf,;
			(lnModNo-1)*DWORD+1, DWORD))

		lcFilename = SPACE(250)
		lnBufSize = GetModuleFileNameEx(hProcess, hModule,;
			@lcFilename, Len(lcFilename))
		lcFilename = Left(lcFilename, lnBufSize)
					
		lcBasename = SPACE(250)
		lnBufSize = GetModuleBaseName(hProcess, hModule,;
			@lcBasename, Len(lcBasename))
		lcBasename = Left (lcBasename, lnBufSize)

		? lcBasename + ' | ' + lcFilename
	ENDFOR
ENDIF

FUNCTION  buf2dword (lcBuffer)
RETURN Asc(SUBSTR(lcBuffer, 1,1)) + ;
    Asc(SUBSTR(lcBuffer, 2,1)) * 256 +;
    Asc(SUBSTR(lcBuffer, 3,1)) * 65536 +;
    Asc(SUBSTR(lcBuffer, 4,1)) * 16777216
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform