Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Closing an other '.exe'
Message
General information
Forum:
Visual FoxPro
Category:
Windows API functions
Miscellaneous
Thread ID:
00761170
Message ID:
00761487
Views:
29
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
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform