Найти внутренне окна/контролы приложения - VB

Узнай цену своей работы

Формулировка задачи:

Народ помогите чутка, какими функциями добратся до дочерних окон/контролов (в том числе скрытых) приложения? Пробовал функцию FindWindowEx но она не чего не возвращает. Некоторые нужные мне окна имеют класс Static и постоянно изменяют своё имя. Чего добился на данный момент так ток этого
Листинг программы
  1. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  2. Private Declare Function GetWindow Lib "user32.dll" (ByVal hWnd As Long, ByVal wCmd As Long) As Long
  3. Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
  4.  
  5. Const GW_HWNDFIRST = 0
  6. Const GW_HWNDLAST = 1
  7. Const GW_HWNDNEXT = 2
  8. Const GW_HWNDPREV = 3
  9. Const GW_OWNER = 4
  10. Const GW_CHILD = 5
  11. Dim ZhWnd As Long
  12. Dim ThWnd As Long
  13. Dim StrBYF As String
  14. Dim Strviv As String
  15. Private Sub Form_Load()
  16. Timer1.Interval = 50
  17. Timer1.Enabled = False
  18. StrBYF = Space(255)
  19. ZhWnd = FindWindow(vbNullString, "Program Manager") 'МегаФон Интернет
  20. End Sub
  21. Private Sub Timer1_Timer()
  22. ZhWnd = GetWindow(ZhWnd, GW_HWNDPREV)
  23. ThWnd = GetWindowText(ZhWnd, StrBYF, 255)
  24. Strviv = Left(StrBYF, ThWnd)
  25. 'If Strviv <> vbNullString Then
  26. Text1.Text = Text1.Text + Strviv + " " + CStr(ZhWnd) + vbCrLf
  27. 'End If
  28.  
  29. End Sub
  30. Private Sub Command1_Click()
  31. Timer1.Enabled = True
  32. End Sub
  33. Private Sub Command2_Click()
  34. Timer1.Enabled = False
  35. End Sub
Чёт типо продвинутого менеджера окон но он не выводит внутрение окна программ Если же взять прогу anvirrus_mainpage то в ней можно как в Sry++ посмотреть все окна выделенного процесса.

Решение задачи: «Найти внутренне окна/контролы приложения»

textual
Листинг программы
  1. Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long ' âîçâðГ*Г№Г*ГҐГІ äåñêðèïòîð îêГ*Г*, Г±ГўГїГ§Г*Г*Г*îãî Г± Г¤Г*Г*Г*ûì îêГ*îì. Èìåþòñÿ ââèäó îòГ*îøåГ*ГЁГї ìåæäó äî÷åðГ*ГҐ - ðîäèòåëüñêèìè îêГ*Г*ìè èëè îòГ*îøåГ*ГЁГї ìåæäó äî÷åðГ*èìè îêГ*Г*ìè Г±Г*ìîãî ðîäèòåëüñêîãî îêГ*Г*
  2. Const GW_HWNDNEXT = 2: Const GW_CHILD = 5
  3. Private Declare Function GetDesktopWindow Lib "user32" () As Long
  4. Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
  5. Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
  6. 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
  7. Private Const WM_GETTEXT = &HD: Private Const WM_GETTEXTLENGTH = &HE
  8. Dim HenTek&
  9.  
  10. Private Sub Form_Load()
  11. Call ÑêГ*Г*ГЋГЄГ®Г*
  12. End Sub
  13.  
  14. Public Sub ÑêГ*Г*ГЋГЄГ®Г*()
  15. Dim strCaption As String
  16. Dim hwnd&
  17. hwnd = GetDesktopWindow()
  18. hwnd = GetWindow(hwnd&, GW_CHILD)
  19. Do
  20. dummy& = GetWindowTextLength(hwnd)
  21.   If dummy <> 0 Then
  22.        strCaption = String(dummy + 1, " ")
  23.          dummy = GetWindowText(hwnd, strCaption, dummy + 1)
  24.          sSave = strCaption: If Asc(Right(strCaption, 1)) = 0 Then sSave = Left(strCaption, Len(strCaption) - 1) 'îòñåêГ*ГҐГ¬ ГЄГ®Г*ГҐГ·Г*ûé "ГЄГўГ*äðГ*ГІ"
  25.         List1.AddItem Str(hwnd) + "  -  " + sSave:
  26.                If sSave <> "" Then HenTek = hwnd: Call ÏîèñêÄåòåé 'ищем детей в окнах с заголовками
  27.               'If hwnd = ÈñêîìûéÕåГ*äë Then HenTek = hwnd: Call ÏîèñêÄåòåé ' ищем по хендлу
  28.  End If: hwnd = GetWindow(hwnd, GW_HWNDNEXT)
  29. Loop While hwnd <> 0
  30. End Sub
  31.  
  32. Public Sub ÏîèñêÄåòåé()
  33. Dim buff$
  34. Dim nextwin As Long ' ïîëó÷èì äåñêðèïòîð ñëåäóþùåãî îêГ*Г* Гў Z-order
  35. List2.AddItem Str(HenTek) + " - äåòè ----------------------------":
  36. nextwin = GetWindow(HenTek, GW_CHILD)  'ïîëó÷Г*ГҐГ¬ äåñêðèïòîð äî÷åðГ*ГҐГЈГ® îêГ*Г*
  37. Do
  38.    If nextwin <> 0 Then   ' Г*ГҐ èñïîëüçóéòå ГґГ«Г*æêè, åñëè Г*ГЁГЄГ*êîãî ГІГ*êîãî îêГ*Г* Г*ГҐ Г±ГіГ№ГҐГ±ГІГўГіГҐГІ
  39.      buff = Space$(50): SendMessage nextwin, &HD, 40, ByVal buff: List2.AddItem Str(nextwin) + " " + Trim(buff):
  40.           'If Г—ГІГ® - òîÈñêîìîå Then Äåéñòâèÿ:
  41.   End If: nextwin = GetWindow(nextwin, GW_HWNDNEXT) 'ïîëó÷Г*ГҐГ¬ äåñêðèïòîð ñëåäóþùåãî îêГ*Г*
  42. Loop While nextwin <> 0
  43. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы