home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 June / Chip_1999-06_cd.bin / zkuste / VBasic / Data / Priklady / procesy.bas < prev    next >
BASIC Source File  |  1999-04-02  |  3KB  |  86 lines

  1. Attribute VB_Name = "Module1"
  2. #Const Win9598 = 1
  3.  
  4. '#If Win9598 Then
  5.   Private Type PROCESSENTRY32
  6.     dwSize As Long
  7.     cntUsage As Long
  8.     th32ProcessID As Long
  9.     th32DefaultHeapID As Long
  10.     th32ModuleID As Long
  11.     cntThreads As Long
  12.     th32ParentProcessID As Long
  13.     pcPriClassBase As Long
  14.     dwFlags As Long
  15.     szExeFile As String * 260
  16.   End Type
  17.  
  18.   Private Const CLngNull = 0
  19.   Private Const TH32CS_SNAPPROCESS = &H2&
  20.  
  21.   Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
  22.   Private Declare Function Process32First Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
  23.   Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
  24. '#Else
  25.   Private Const PROCESS_QUERY_INFORMATION = 1024
  26.   Private Const PROCESS_VM_READ = 16
  27.   Private Const MAX_PATH = 260
  28.  
  29.   Private Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
  30.   Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
  31.   Private Declare Function EnumProcesses Lib "psapi.dll" (ByRef lpidProcess As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
  32.   Private Declare Function GetModuleFileNameExA Lib "psapi.dll" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
  33.   Private Declare Function EnumProcessModules Lib "psapi.dll" (ByVal hProcess As Long, ByRef lphModule As Long, ByVal cb As Long, ByRef cbNeeded As Long) As Long
  34. '#End If
  35.  
  36. Public Sub ProcesToDebug95()
  37.     Dim lngOut As Long, strName As String, lngSnap As Long, proc As PROCESSENTRY32
  38.  
  39.     lngSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)
  40.  
  41.     If lngSnap <> CLngNull Then
  42.       proc.dwSize = Len(proc)
  43.  
  44.       lngOut = Process32First(lngSnap, proc)
  45.       Do While lngOut
  46.         strName = Left(proc.szExeFile, Len(proc.szExeFile) - 1)
  47.         Debug.Print strName
  48.         lngOut = Process32Next(lngSnap, proc)
  49.       Loop
  50.     End If
  51. End Sub
  52.  
  53. Public Sub ProcesToDebugNT()
  54.     Dim cb As Long, cbNeeded As Long, NumElements As Long, ProcessIDs() As Long
  55.     Dim cbNeeded2 As Long, NumElements2 As Long, Modules(1 To 200) As Long
  56.     Dim lRet As Long, ModuleName As String, nSize As Long, hProcess As Long, i As Long
  57.  
  58.     'Napln pole obsahujici ID pro kazdy proces
  59.     cb = 8
  60.     cbNeeded = 96
  61.     Do While cb <= cbNeeded
  62.       cb = cb * 2
  63.       ReDim ProcessIDs(cb / 4) As Long
  64.       lRet = EnumProcesses(ProcessIDs(1), cb, cbNeeded)
  65.     Loop
  66.  
  67.     NumElements = cbNeeded / 4
  68.       
  69.     For i = 1 To NumElements
  70.       'Zjisti handler procesu
  71.       hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, ProcessIDs(i))
  72.       If hProcess <> 0 Then
  73.         'Zjisti pole handleru pro specifikovany proces
  74.         lRet = EnumProcessModules(hProcess, Modules(1), 200, cbNeeded2)
  75.         If lRet <> 0 Then   'Dej ModuleFileName
  76.           ModuleName = Space(MAX_PATH)
  77.           nSize = 500
  78.           lRet = GetModuleFileNameExA(hProcess, Modules(1), ModuleName, nSize)
  79.           Debug.Print Left(ModuleName, lRet)
  80.         End If
  81.       End If
  82.       'Close the handle to the process
  83.       lRet = CloseHandle(hProcess)
  84.     Next i
  85. End Sub
  86.