Const MAX_MODULE_NAmeInfo = 255Const MAX_PATH = 260Const TH32CS_SNAPMODULE = &H8Private Type MODULEENTRY32 dwSize As Long th32ModuleID As Long th32ProcessID As Long GlblcntUsage As Long ProccntUsage As Long modBaseAddr As Long modBaseSize As Long hModule As Long szModule As String * 256 szExePath As String * MAX_PATHEnd TypePrivate Declare Function CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal _ dest As Any, ByVal source As Any, ByVal bytes As Long) As LongPrivate Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias _ "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) _ As LongPrivate Declare Function Module32First Lib "kernel32" (ByVal hSnapshot As Long, _ lpmeInfo As MODULEENTRY32) As LongPrivate Declare Function Module32Next Lib "kernel32" (ByVal hSnapshot As Long, _ lpmeInfo As MODULEENTRY32) As LongPrivate Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long' Return the list of DLLs and OCXes that a process uses' if argument if omitted, the current process is used'' names are stored starting at element 1 in the result array' thus UBound(result) gives the number of modules' in general, the first element is the name of the EXE file.' NOTES: works only on Win 9x and 2000 (not on NT)Function GetProcessModules(Optional ByVal processID As Long = -1) As String() Dim meInfo As MODULEENTRY32 Dim success As Long Dim hSnapshot As Long ReDim res(0) As String Dim count As Long ' provide a default argument, if missing If processID = -1 Then processID = GetCurrentProcessId ' get information about the given process hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPMODULE, processID) ' exit now if process ID is invalid If hSnapshot = 0 Then GoTo ExitProc ' prepare the structure for receiving info meInfo.dwSize = Len(meInfo) ' get info on the first module success = Module32First(hSnapshot, meInfo) Do While success ' consider only modules belonging to the specified process If meInfo.th32ProcessID = processID Then count = count + 1 ' make room in the array, if needed If count > UBound(res) Then ReDim Preserve res(count + 100) As String End If ' store the result res(count) = Left$(meInfo.szExePath, InStr(meInfo.szExePath & _ vbNullChar, vbNullChar) - 1) End If ' continue the search success = Module32Next(hSnapshot, meInfo) Loop ' close the snapshot CloseHandle hSnapshot ExitProc: ' trim out elements in excess ReDim Preserve res(0 To count) As String GetProcessModules = resEnd Function


GM Creates Open Source uProtocol and Invites Automakers to Adopt It: Revolutionizing Automotive Software Development.
General Motors (GM) recently announced its entry into the Eclipse Foundation. The Eclipse Foundation is a prominent open-source software foundation. In addition, GMC announced its contribution of “uProtocol” to facilitate