Считывание текстовых полей другой программы

Psychoman

Здраствуйте. У меня вопрос как с помощью api можна считать текстовые поля другой программы. Насколько я понял, мне надо найти код сообщений программы которая мне нужна, а дальше как-то все туманно. В общем задача такова, нужно автоматичным образом выбрать нужное поле и считать текстовые поле. Например, запустить аську/скайп тыкнуть на нужный контакт и считать последнее сообщение. Ну и вопрос, скажите, куда плыть?)Спасибо за ответ.
4 ответа

Psychoman

начни с FindWindow() ну а там уже по течению)


Psychoman

Насколько я понял мне надо разобраться с библиотекой UI Automation, как-то оно все дико непросто =(


Psychoman

тебе надо разобраться с winapi


Psychoman

Появился следующий вопрос, как можна динамически( когда при выполнение проги я ввожу данные в текстовое поле ), считать написанное. Вот примерно то,что мне удалось выковырять до этого момента
#include <Windows.h>
#include <vector>
#include <iostream>
#include <string>
#include <conio.h> 
using namespace std;
 
 
int main() 
{
    HWND hWnd;
    vector<HWND> a;
    hWnd = FindWindow( NULL, "SomeList" );
    vector<string> phrases;
    char p[100];
    if( !hWnd )
    {
        cout << "Window hasn't been found " << endl;
        _getch();
        exit( 1 );
    }
    
    hWnd = GetWindow(hWnd, GW_CHILD);
    while (hWnd !=0)
    {
         hWnd = GetWindow(hWnd, GW_HWNDNEXT);
         GetClassName( hWnd, p, 10 );
         string k( p );
         if( k == "Edit" )
             a.push_back( hWnd );
         GetWindowText(hWnd,p,100);
          cout << p << endl;
    }
    phrases.resize( a.size() );
 
    for( auto i = a.begin();i != a.end();i++ )
    {
        int index = 0;
        GetWindowText( *i,p, 10 );
        string n( p );
        if( n.size() != 0 )
        {
            phrases[index] =  n;
            index++;
        }
    }
    _getch();
    return 0;
}
Как вариант, еще кроме динамического считывание текстового поля, считать поля при нажатии клавиши. У меня появилась идея сделать это с помощью сообщений, но как можете подсказать?)