Получение hWnd через PID

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
gvozd1989
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2005 (Чт) 9:16
Откуда: Украина

Получение hWnd через PID

Сообщение gvozd1989 » 15.12.2005 (Чт) 15:10

Можно ли получить hWnd главного окна программы, либо всех окон программы, зная PID процесса?
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 15.12.2005 (Чт) 15:15

Нужно перебрать все окна, принадлежащие к данному процессу...
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 15.12.2005 (Чт) 15:18

Код: Выделить всё
Declare Function EnumThreadWindows Lib "user32" Alias "EnumThreadWindows" (ByVal dwThreadId As Long, ByVal lpfn As Long, ByVal lParam As Long) As Long

Кажись то, что нужно...
А я все практикую лечение травами...

gvozd1989
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2005 (Чт) 9:16
Откуда: Украина

Сообщение gvozd1989 » 15.12.2005 (Чт) 15:50

Но тут TreadID, а не ProcessID. Попробовал пример из API-Guide, но там в функцию передается hWnd, а мне он неизвестен.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 15.12.2005 (Чт) 15:54

gvozd1989 писал(а):Но тут TreadID, а не ProcessID.

Ну? PID характеризует процесс, а не трэд. Находишь процесс, находишь все его нити и для каждой нити находишь все его окна.
Lasciate ogni speranza, voi ch'entrate.

gvozd1989
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2005 (Чт) 9:16
Откуда: Украина

Сообщение gvozd1989 » 15.12.2005 (Чт) 16:06

А можно поподробнее, какими функциями находить нити, и что передавать в параметры в EnumThreadWindows?
Изображение

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 15.12.2005 (Чт) 16:48

GetWindowThreadProcessId
Вообщем глянь пример, все станет ясно...
Код: Выделить всё
'in a form
Private Sub Form_Load()
    'KPD-Team 2000
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    Dim ThreadID As Long, ProcessID As Long  ' receive id to thread and process of Form1
    ' Determine the thread which owns this window
    ThreadID = GetWindowThreadProcessId(Me.hWnd, ProcessID)
    ' Use the callback function to list all of the enumerated thrad windows
    EnumThreadWindows ThreadID, AddressOf EnumThreadWndProc, 0
    'Show the results
    Me.AutoRedraw = True
    Me.Print sClasses
End Sub
'In a module
Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Declare Function EnumThreadWindows Lib "user32" (ByVal dwThreadId As Long, ByVal lpfn As Long, ByVal lParam As Long) As Long
Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
'variable used to list all the classnames
Public sClasses As String
Public Function EnumThreadWndProc(ByVal hWnd As Long, ByVal lParam As Long) As Long
    Dim Ret As Long, sText As String
    'create a string-buffer
    sText = Space(255)
    'get the classname of the window handle
    Ret = GetClassName(hWnd, sText, 255)
    'cut off the unnecessary part of Chr$(0)'s
    sText = Left$(sText, Ret)
    'add this classname to the list of classnames
    sClasses = sClasses + sText + vbCrLf
    'continue the enumeration
    EnumThreadWndProc = 1
End Function
А я все практикую лечение травами...

gvozd1989
Новичок
Новичок
 
Сообщения: 38
Зарегистрирован: 13.01.2005 (Чт) 9:16
Откуда: Украина

Сообщение gvozd1989 » 15.12.2005 (Чт) 17:28

Пример я смотрел, но в том-то и дело, что в
Код: Выделить всё
ThreadID = GetWindowThreadProcessId(Me.hWnd, ProcessID)

передается hWnd.
Изображение


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

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

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

    TopList  
cron