Trang 1 trên 1

Lấy đường dẫn file exe từ tiêu đề của cửa sổ

Đã gửi: T.Tư 03/12/2008 9:58 pm
gửi bởi NoBi
Thủ thuật: Lấy đường dẫn file exe từ tiêu đề của cửa sổ
Tác giả: Sưu tầm
Mô tả: Lấy đường dẫn file exe từ tiêu đề của cửa sổ để biết được chương trình đang chạy có đường dẫn từ đâu.


Mã: Chọn hết

  1. Option Explicit
  2. Const PROCESS_QUERY_INFORMATION = 1024
  3. Const PROCESS_VM_READ = 16
  4. Const MAX_PATH As Integer = 260
  5.  
  6. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  7. Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
  8. Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
  9. Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
  10. 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
  11. Private Declare Function GetModuleFileNameEx Lib "PSAPI.DLL" Alias "GetModuleFileNameExA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal ModuleName As String, ByVal nSize As Long) As Long
  12.  
  13.  
  14. Private Sub Command1_Click()
  15.   Dim Ret As String
  16.     Dim whwnd As Long
  17.     Dim hMod As Long
  18.     Dim theProcess As Long
  19.     Dim lngCBSize2 As Long
  20.     Dim lngModules(1 To 1) As Long
  21.     Dim lngReturn As Long
  22.     Dim strModuleName As String
  23.     Dim lngSize As Long
  24.     Dim strProcessName As String
  25.    
  26.     'Lay tieu de cua so
  27.     Ret = InputBox("Nhap tieu de cua so vao day:")
  28.     If Ret = "" Then Exit Sub
  29.    
  30.     whwnd = FindWindow(vbNullString, Ret)
  31.     If whwnd  0 Then
  32.         hMod = GetWindowThreadProcessId(whwnd, theProcess)
  33.         If hMod  0 Then
  34.             'Get a handle to the Process and Open
  35.             Dim lngHwndProcess As Long
  36.             lngHwndProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, theProcess)
  37.             If lngHwndProcess  0 Then
  38.                     'Get an array of the module handles for the specified process
  39.                     lngReturn = EnumProcessModules(lngHwndProcess, lngModules(1), 1, lngCBSize2)
  40.                     'If the Module Array is retrieved, Get the ModuleFileName
  41.                      If lngReturn  0 Then
  42.                         'Buffer with spaces first to allocate memory for byte array
  43.                             strModuleName = Space(MAX_PATH)
  44.                             'Must be set prior to calling API
  45.                             lngSize = 500
  46.                             'Get Process Name
  47.                             lngReturn = GetModuleFileNameEx(lngHwndProcess, lngModules(1), strModuleName, lngSize)
  48.                             If lngReturn > 0 Then
  49.                                 'Remove trailing spaces
  50.                                 strProcessName = Left(strModuleName, lngReturn)
  51.                             End If
  52.                     End If
  53.              End If
  54.              'Close the handle to this process
  55.              lngReturn = CloseHandle(lngHwndProcess)
  56.         End If 'process finded
  57.     End If 'window finded
  58.     If Len(strProcessName) > 0 Then
  59.         'Hien thi ket qua
  60.         MsgBox "Found: " & strProcessName
  61.     End If
  62. End Sub

Re: Lấy đường dẫn file exe từ tiêu đề của cửa sổ

Đã gửi: T.Tư 10/12/2008 7:36 pm
gửi bởi truongphu
Khảo sát các tiến trình đang chạy cũng cho ta biết đường dẫn...

Mã: Chọn hết

  1.   Set colItems = GetObject("winmgmts:\root\CIMV2").ExecQuery("SELECT * FROM Win32_Process")
  2.    For Each objItem In colItems
  3.       a = a & vbCrLf & "----------------------------------------------------------"
  4.       a = a & vbCrLf & "Caption: " & objItem.Caption
  5.       a = a & vbCrLf & "CommandLine: " & objItem.CommandLine
  6.       a = a & vbCrLf & "ExecutablePath: " & objItem.ExecutablePath
  7.       a = a & vbCrLf & "Handle: " & objItem.Handle
  8.       a = a & vbCrLf & "HandleCount: " & objItem.HandleCount
  9.       a = a & vbCrLf & "ParentProcessId: " & objItem.ParentProcessId
  10.       a = a & vbCrLf & "Priority: " & objItem.Priority
  11.       a = a & vbCrLf & "ProcessId: " & objItem.ProcessId
  12.       a = a & vbCrLf & "ThreadCount: " & objItem.ThreadCount
  13.    Next
  14. Text1 = a