Вытащить данные из окна чужой программы

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

Вытащить данные из окна чужой программы

Сообщение KrisKelvin » 02.10.2016 (Вс) 8:01

есть программа, из которой нужно прочитать содержимое окошек
скрин программы на рисунке

Изображение

программа "WinSpy" отлично видит все окна и показывает содержимое нужных окошек, на примере окна помеченного красной стрелкой на "scr01.jpg" и "scr02.jpg"

Изображение

таким-же образом нужно выташить содержание окон помеченных зеленой кляксой на "scr03.jpg"

Изображение


прошу помощи растолковать мне на примере VB как добратся до этих окошек и выдрать данные окна в переменную для последующей обработки

заранее благодарен за советы и наглядные примеры для начинающего, (по возможности в формате VB6) !

pronto
Постоялец
Постоялец
 
Сообщения: 597
Зарегистрирован: 04.12.2005 (Вс) 6:20
Откуда: Владивосток

Re: Вытащить данные из окна чужой программы

Сообщение pronto » 03.10.2016 (Пн) 11:06

Функции в помощь: FindWindow, FindWindowEx, GetWindowText (или SendMessage с сообщениями WM_GETTEXT и WM_GETTEXTLENGTH)
O, sancta simplicitas!

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Вытащить данные из окна чужой программы

Сообщение ger_kar » 03.10.2016 (Пн) 11:58

Сначала нужно найти окно верхнего уровня через функцию FindWindow
А далее использую дескриптор полученный из первой функции использовать FindWindowEx для поиска вложенных окон.
Русскоязычное описание можно найти тут FindWindow, FindWindowEx
Декларация этих функций в VB:
Код: Выделить всё
Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long

После того как искомое окно будет найдено (будет получен дескриптор этого окна или по другому хендл) тогда используя полученный дескриптор с помощью функции GetWindowText можно получить текст.
Описание функции на русском GetWindowText
Декларация функции в VB
Код: Выделить всё
Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Бороться и искать, найти и перепрятать

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: Вытащить данные из окна чужой программы

Сообщение ger_kar » 03.10.2016 (Пн) 12:49

Вобщем я лажанулся, GetWindowText для получения текста из окна принадлежащего другому процессу не подходит, нужно юзать
pronto писал(а):(или SendMessage с сообщениями WM_GETTEXT и WM_GETTEXTLENGTH)

Вот пример получения текста из окна калькулятора

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

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
'
Private Const WM_GETTEXT As Long = &HD
Private Const WM_GETTEXTLENGTH As Long = &HE
'


Private Sub cmdStart_Click()
   
    Dim hTopWind    As Long
    Dim hWinEdit    As Long
    Dim lRetLen     As Long
    Dim sWinText    As String
   
    hTopWind = FindWindow("SciCalc", "Калькулятор")
    If hTopWind <> 0 Then
        hWinEdit = FindWindowEx(hTopWind, 0, "Edit", "")
        If hWinEdit <> 0 Then
            lRetLen = SendMessage(hWinEdit, WM_GETTEXTLENGTH, 0, ByVal 0&)
            If lRetLen <> 0 Then
                sWinText = Space(lRetLen + 1)
                lRetLen = SendMessage(hWinEdit, WM_GETTEXT, Len(sWinText), ByVal sWinText)
                If lRetLen <> 0 Then
                    sWinText = Left$(sWinText, lRetLen - 1)
                    Debug.Print Hex(hTopWind), Hex(hWinEdit), sWinText
                End If
            End If
        End If
    End If
   
End Sub
Бороться и искать, найти и перепрятать

KrisKelvin
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 02.10.2016 (Вс) 7:33

Re: Вытащить данные из окна чужой программы

Сообщение KrisKelvin » 10.10.2016 (Пн) 18:50

спасибо БОЛЬШОЕ !
проблема решена !!!


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 20

    TopList