GetModuleFilenameEx no funciona en Win9X, hay una manera mucho más sencilla usando sólo GetModuleFilename.
La manera fácil es obtener el handle del módulo usando sólo el nombre, que es lo que te devuelve Process32First/Next y luego llamar a GetModuleFilename, como en la siguiente función:
Function GetProcessFilename(ByVal ModuleName As String) As String
Dim sPath$, lPath&
Dim hModule&, r&
lPath = MAX_PATH
sPath = String$(MAX_PATH, 0)
hModule = GetModuleHandle(ModuleName)
r = GetModuleFileName(hModule, sPath, lPath)
If r Then
GetProcessFilename = Left$(sPath, r)
End If
End Function
Y te ahorras mucho código.
Saludos.