作ってみましたがよくわからん・・・
参考:
http://www.dev.pei.jp/programming/sdk/sdk69.html
#uselib "advapi32.dll"
#func OpenSCManager "OpenSCManagerA" sptr, sptr, sptr
#func EnumServicesStatusEx "EnumServicesStatusExA" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
#func CloseServiceHandle "CloseServiceHandle" sptr
#uselib "kernel32.dll"
#func OpenProcess "OpenProcess" sptr, sptr, sptr
#func CloseHandle "CloseHandle" sptr
#uselib "psapi.dll"
#func EnumProcessModules "EnumProcessModules" sptr, sptr, sptr, sptr
#func GetModuleBaseName "GetModuleBaseNameA" sptr, sptr, sptr, sptr
#define SC_MANAGER_ENUMERATE_SERVICE	$00000004
#define SC_ENUM_PROCESS_INFO	$00000000
#define SERVICE_WIN32	$00000030
#define SERVICE_ACTIVE	$00000001
#define SERVICE_STATE_ALL	$00000003
#define PROCESS_QUERY_INFORMATION	$00000400
#define PROCESS_VM_READ	$00000010
	dim enumServiceStatus, 9, 1024
	needed = 0
	returned = 0
	resumeHandle = 0
	dim module, 1024
	sdim name, 1024
	buf = "" : notesel buf
	
	OpenSCManager 0, 0, SC_MANAGER_ENUMERATE_SERVICE : scmHandle = stat
	if scmHandle=0 { dialog "failed OpenSCManager" : end }
	
	EnumServicesStatusEx scmHandle, SC_ENUM_PROCESS_INFO, SERVICE_WIN32, SERVICE_ACTIVE, varptr(enumServiceStatus), 4*9*1024, varptr(needed), varptr(returned), varptr(resumeHandle), 0
	if stat=0 { dialog "failed EnumServiceStatusEx" : end }
	repeat returned
		OpenProcess PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, 0, enumServiceStatus(7, cnt) : handle = stat
		if handle!=0 {
			EnumProcessModules handle, varptr(module), 4*1024, varptr(needed)
			if stat {
				GetModuleBaseName handle, module, varptr(name), 1024
				if stat>0 { noteadd name }
			}
			CloseHandle handle
		} 
	loop
	
	CloseServiceHandle scmHandle
	mes buf