Как найти имя .exe файла по hWnd окна

Ответы на вопросы, чаще всего задаваемые в форумах VBStreets. Для тех, кому лень искать.
RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Как найти имя .exe файла по hWnd окна

Сообщение RayShade » 25.05.2004 (Вт) 10:59

Option Explicit



Const TH32CS_SNAPPROCESS As Long = 2&

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 threadID As Long, processID As Long, hSnapshot As Long

Dim uProcess As PROCESSENTRY32, rProcessFound As Long

Dim i As Integer, szExename As String



threadID = GetWindowThreadProcessId(hwnd, processID)



If threadID = 0 Or processID = 0 Then Exit Function



hSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPPROCESS, 0&)



If hSnapshot = -1 Then Exit Function



uProcess.dwSize = Len(uProcess)



rProcessFound = ProcessFirst(hSnapshot, uProcess)



Do While rProcessFound

If uProcess.th32ProcessID = processID Then

i = InStr(1, uProcess.szexeFile, Chr(0))

If i > 0 Then szExename = Left$(uProcess.szexeFile, i - 1)

Exit Do

Else

rProcessFound = ProcessNext(hSnapshot, uProcess)

End If

Loop



Call CloseHandle(hSnapshot)

GetExeFromHandle = szExename



End Function

Вернуться в Популярные вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

    TopList