Найти внутренне окна/контролы приложения - VB
Формулировка задачи:
Народ помогите чутка, какими функциями добратся до дочерних окон/контролов (в том числе скрытых) приложения?
Пробовал функцию FindWindowEx но она не чего не возвращает.
Некоторые нужные мне окна имеют класс Static и постоянно изменяют своё имя.
Чего добился на данный момент так ток этого
Чёт типо продвинутого менеджера окон но он не выводит внутрение окна программ
Если же взять прогу anvirrus_mainpage то в ней можно как в Sry++ посмотреть все окна выделенного процесса.
Листинг программы
- Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
- Private Declare Function GetWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
- Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
- Const GW_HWNDFIRST = 0
- Const GW_HWNDLAST = 1
- Const GW_HWNDNEXT = 2
- Const GW_HWNDPREV = 3
- Const GW_OWNER = 4
- Const GW_CHILD = 5
- Dim ZhWnd As Long
- Dim ThWnd As Long
- Dim StrBYF As String
- Dim Strviv As String
- Private Sub Form_Load()
- Timer1.Interval = 50
- Timer1.Enabled = False
- StrBYF = Space(255)
- ZhWnd = FindWindow(vbNullString, "Program Manager") 'МегаФон Интернет
- End Sub
- Private Sub Timer1_Timer()
- ZhWnd = GetWindow(ZhWnd, GW_HWNDPREV)
- ThWnd = GetWindowText(ZhWnd, StrBYF, 255)
- Strviv = Left(StrBYF, ThWnd)
- 'If Strviv <> vbNullString Then
- Text1.Text = Text1.Text + Strviv + " " + CStr(ZhWnd) + vbCrLf
- 'End If
- End Sub
- Private Sub Command1_Click()
- Timer1.Enabled = True
- End Sub
- Private Sub Command2_Click()
- Timer1.Enabled = False
- End Sub
Решение задачи: «Найти внутренне окна/контролы приложения»
textual
Листинг программы
- Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long ' âîçâðГ*Г№Г*ГҐГІ äåñêðèïòîð îêГ*Г*, Г±ГўГїГ§Г*Г*Г*îãî Г± Г¤Г*Г*Г*ûì îêГ*îì. Èìåþòñÿ ââèäó îòГ*îøåГ*ГЁГї ìåæäó äî÷åðГ*ГҐ - ðîäèòåëüñêèìè îêГ*Г*ìè èëè îòГ*îøåГ*ГЁГї ìåæäó äî÷åðГ*èìè îêГ*Г*ìè Г±Г*ìîãî ðîäèòåëüñêîãî îêГ*Г*
- Const GW_HWNDNEXT = 2: Const GW_CHILD = 5
- Private Declare Function GetDesktopWindow Lib "user32" () As Long
- Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
- Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
- Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
- Private Const WM_GETTEXT = &HD: Private Const WM_GETTEXTLENGTH = &HE
- Dim HenTek&
- Private Sub Form_Load()
- Call ÑêГ*Г*ГЋГЄГ®Г*
- End Sub
- Public Sub ÑêГ*Г*ГЋГЄГ®Г*()
- Dim strCaption As String
- Dim hwnd&
- hwnd = GetDesktopWindow()
- hwnd = GetWindow(hwnd&, GW_CHILD)
- Do
- dummy& = GetWindowTextLength(hwnd)
- If dummy <> 0 Then
- strCaption = String(dummy + 1, " ")
- dummy = GetWindowText(hwnd, strCaption, dummy + 1)
- sSave = strCaption: If Asc(Right(strCaption, 1)) = 0 Then sSave = Left(strCaption, Len(strCaption) - 1) 'îòñåêГ*ГҐГ¬ ГЄГ®Г*ГҐГ·Г*ûé "ГЄГўГ*äðГ*ГІ"
- List1.AddItem Str(hwnd) + " - " + sSave:
- If sSave <> "" Then HenTek = hwnd: Call ÏîèñêÄåòåé 'ищем детей в окнах с заголовками
- 'If hwnd = ÈñêîìûéÕåГ*äë Then HenTek = hwnd: Call ÏîèñêÄåòåé ' ищем по хендлу
- End If: hwnd = GetWindow(hwnd, GW_HWNDNEXT)
- Loop While hwnd <> 0
- End Sub
- Public Sub ÏîèñêÄåòåé()
- Dim buff$
- Dim nextwin As Long ' ïîëó÷èì äåñêðèïòîð ñëåäóþùåãî îêГ*Г* Гў Z-order
- List2.AddItem Str(HenTek) + " - äåòè ----------------------------":
- nextwin = GetWindow(HenTek, GW_CHILD) 'ïîëó÷Г*ГҐГ¬ äåñêðèïòîð äî÷åðГ*ГҐГЈГ® îêГ*Г*
- Do
- If nextwin <> 0 Then ' Г*ГҐ èñïîëüçóéòå ГґГ«Г*æêè, åñëè Г*ГЁГЄГ*êîãî ГІГ*êîãî îêГ*Г* Г*ГҐ Г±ГіГ№ГҐГ±ГІГўГіГҐГІ
- buff = Space$(50): SendMessage nextwin, &HD, 40, ByVal buff: List2.AddItem Str(nextwin) + " " + Trim(buff):
- 'If ×òî - òîÈñêîìîå Then Äåéñòâèÿ:
- End If: nextwin = GetWindow(nextwin, GW_HWNDNEXT) 'ïîëó÷Г*ГҐГ¬ äåñêðèïòîð ñëåäóþùåãî îêГ*Г*
- Loop While nextwin <> 0
- End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д