Как зная HWND окна, получить полный путь к Exe файлу процесс

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Как зная HWND окна, получить полный путь к Exe файлу процесс

Сообщение Memfivosfey » 26.05.2007 (Сб) 15:38

Прежде, хочу сразу заверить, что искал ответ и очень долго, 3 дня :), и даже нашёл кусок кода, который находит по HWND имя Exe файла. Но мне необходимо именно полный путь, тоесть Диск:\Папка\файл.exe
Помогите пожалуйста, а то уже замучился :)
В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Re: Как зная HWND окна, получить полный путь к Exe файлу про

Сообщение GSerg » 26.05.2007 (Сб) 15:49

Memfivosfey писал(а):Прежде, хочу сразу заверить, что искал ответ и очень долго, 3 дня :), и даже нашёл кусок кода, который находит по HWND имя Exe файла. Но мне необходимо именно полный путь, тоесть Диск:\Папка\файл.exe
Помогите пожалуйста, а то уже замучился :)

Забанить бы тебя за наглое враньё. На пару недель.

Поиск по "HWND exe" сразу даёт http://bbs.vbstreets.ru/viewtopic.php?t=24758
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Memfivosfey
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 17.02.2005 (Чт) 14:55

Сообщение Memfivosfey » 26.05.2007 (Сб) 16:01

Хочу заметить, что никогда не вру. Принципиально. Поэтому, с твоей стороны имело бы смысл извиниться.
В подтверждение, вот код котрый я нашёл.

Код: Выделить всё

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
    ' 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 Command1_Click()
'    'снимите комментарий, если вы добавили модуль из предыдущего примера
'    'MsgBox GetExeFromHandle(FindWindowWild("*Mi??OSoFt In[s-u]ernet*", False))
'    MsgBox GetExeFromHandle(Me.hwnd)
'End Sub

В программировании нет не решаемых проблемм, есть проблеммы на которые
мы не можем найти решение...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.05.2007 (Сб) 20:28

Ale-Top, ты вопрос читал хоть?
Хотя бы заголовок?
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 27.05.2007 (Вс) 6:21

Ale-Top продолжает доказывать свою малоадекватность.
Сижу с попкорном.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.05.2007 (Вс) 11:38

Безусловно, изводить две страницы кода на то, для чего есть готовая стандартная функция -- это нестереотипное мышление...
Сижу с дошираком.
Последний раз редактировалось tyomitch 27.05.2007 (Вс) 11:49, всего редактировалось 1 раз.
Изображение

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 27.05.2007 (Вс) 11:42

А потом пришел лесник и всех разогнал...


Вернуться в Visual Basic 1–6

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 32

    TopList