powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вычислить окно, не зная его caption\title\etc...
2 сообщений из 2, страница 1 из 1
Вычислить окно, не зная его caption\title\etc...
    #33328209
kroost
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется понажимать програмно кнопочки в чужом окне (FindWindow и т.д.). Да вот не знаю его примет.
Надо бы пробежаться по всем окнам (типа For Each...) и поймать его caption.
Пробовал следующий код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Private Sub Form_Load()
     Me.AutoRedraw = True
     'call the Enumwindows-function
     EnumWindows AddressOf EnumWindowsProc, ByVal  0 &
     
End Sub

Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
    Dim sSave As String, Ret As Long
    Ret = GetWindowTextLength(hwnd)
    sSave = Space(Ret)
    GetWindowText hwnd, sSave, Ret +  1 
    Form1.Print Str$(hwnd) + " " + sSave
    'continue enumeration
    EnumWindowsProc = True
End Function

Почему-то на
EnumWindows AddressOf EnumWindowsProc, ByVal 0&
выдаёт ошибку компиляции (неправильное использование AddressOf)
Может что не так пишу, или есть другие решения?
Спасибо.
...
Рейтинг: 0 / 0
Вычислить окно, не зная его caption\title\etc...
    #33328351
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй вот так.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
Option Explicit

Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function Module32First Lib "kernel32" (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long
Private Declare Function Module32Next Lib "kernel32" (ByVal hSnapshot As Long, uProcess As MODULEENTRY32) As Long
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long

Private Type MODULEENTRY32
  dwSize As Long
  th32ModuleID As Long
  th32ProcessID As Long
  GlblcntUsage As Long
  ProccntUsage As Long
  modBaseAddr As Long
  modBaseSize As Long
  hModule As Long
  szModule As String *  256 
  szExePath As String *  260 
End Type

Private Const PROCESS_ALL_ACCESS = &H1F0FFF

Sub Main()
    EnumWindows AddressOf EnumWindowsProc, ByVal  0 &
End Sub

Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
    Dim uProcess As MODULEENTRY32, hSnapshot As Long, n  As Long
    Dim lngHwndProcess As Long, strProcessName  As String

    GetWindowThreadProcessId hwnd, lngHwndProcess ' получаем ID процесса
    
    hSnapshot = CreateToolhelp32Snapshot( 8 , lngHwndProcess)
    uProcess.dwSize = Len(uProcess)
    n = Module32First(hSnapshot, uProcess)

    Do While n
        strProcessName = UCase$(Left(uProcess.szModule, InStr(uProcess.szModule, Chr( 0 )) -  1 ))
        
        If strProcessName Like "*.EXE*" Then
            
            Debug.Print strProcessName
        
        End If
        n = Module32Next(hSnapshot, uProcess)
    Loop
    
    EnumWindowsProc = True
End Function
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вычислить окно, не зная его caption\title\etc...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]