На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
Дорогие друзья! Поздравляем вас с днём Победы!
msm.ru
Модераторы: SCINER, B.V.
  
    > Как узнать полный путь к исполняемому файлу программы , зная её hWnd
      ExpandedWrap disabled
        Option Explicit
         
        Private Const TH32CS_SNAPPROCESS As Long = 2&
        Private Const MAX_PATH As Long = 260
         
        Private Type PROCESSENTRY32
           dwSize As Long
           cntUsage As Long
           th32ProcessID As Long
           th32DefaultHeapID As Long
           th32ModuleID As Long
           cntThreads As Long
           th32ParentProcessID As Long
           pcPriClassBase As Long
           dwflags As Long
           szexeFile As String * MAX_PATH
        End Type
         
        Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
        Private Declare Function CreateToolhelpSnapshot Lib "Kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlgas As Long, ByVal lProcessID As Long) As Long
        Private Declare Function ProcessFirst Lib "Kernel32" Alias "Process32First" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
        Private Declare Function ProcessNext Lib "Kernel32" Alias "Process32Next" (ByVal hSnapshot As Long, uProcess As PROCESSENTRY32) As Long
        Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)
         
        Public Function GetExeFromHandle(hwnd As Long) As String
         
          Dim i As Integer, szExename As String
          Dim threadID As Long, processID As Long, hSnapshot As Long
          Dim uProcess As PROCESSENTRY32, rProcessFound As Long
         
          ' Get ID for window thread
          threadID = GetWindowThreadProcessId(hwnd, processID)
          ' Check if valid
          If threadID = 0 Or processID = 0 Then Exit Function
          ' Create snapshot of current processes
          hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)
          ' Check if snapshot is valid
          If hSnapshot = -1 Then Exit Function
          'Initialize uProcess with correct size
          uProcess.dwSize = Len(uProcess)
          'Start looping through processes
          rProcessFound = ProcessFirst(hSnapshot, uProcess)
         
          Do While rProcessFound
            If uProcess.th32ProcessID = processID Then
              'Found it, now get name of exefile
              i = InStr(1, uProcess.szexeFile, Chr(0))
              If i > 0 Then szExename = Left$(uProcess.szexeFile, i - 1)
              Exit Do
            Else
              'Wrong ID, so continue looping
              rProcessFound = ProcessNext(hSnapshot, uProcess)
            End If
          Loop
         
          Call CloseHandle(hSnapshot)
          GetExeFromHandle = szExename
         
        End Function
         
        Private Sub Form_Load()
           Me.Caption = GetExeFromHandle(Me.hwnd)
        End Sub
      Сообщение отредактировано: SCINER -
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0210 ]   [ 16 queries used ]   [ Generated: 13.05.24, 12:41 GMT ]