API , читаем тип Edit из другого приложения ( проблема ) - страница 3

 
getch >>:

Посмотрите реализацию, например, StatementClose, которая пашет без проблем.

возможно... потому что вызов браузера идет из под мт4 и он его как родного воспринимает

а следоватеьно работать будет

--

можно поизголятся и открыть браузер до запуска мт4

а потом этим кодом попытаться его прикрыть

если получится будет интересно...

--

я же вызвал два разных приложения независимо

и кодом подтвердил что не работает

--

да и в общем если у Мирософта в документации написанно то я склонен верить

а если работает то

( как там говорят если на клетке с тигром написанно лев не верь глазам своим )

:-)

 
jartmailru >>:

http://blogs.msdn.com/oldnewthing/archive/2003/08/21/54675.aspx

Видите, какие интересные перцы-

если в том же процессе- то они сами шлют WM_GETTEXT.

А если из другого процесса- то они будут доставать текст,

прикрепленный к окну через специальное хранилище,

и- как видите- для имен окошек это проходит, а для edit'ов- нет.

Спасибо за разъяснение нюанса!

Действительно, применял только для имен окон, поэтому код и работал для других приложений. Edit-ы не трогал.

 
YuraZ >>:

можно поизголятся и открыть браузер до запуска мт4

а потом этим кодом попытаться его прикрыть

если получится будет интересно...

Имена окон других процессов считываются без проблем вышеназванным способом. Поэтому самостоятельное открытие браузера не повлияет на работоспособность кода - будет работать. Но вот с Edit-ами - нет.

 
getch >>:

Спасибо за разъяснение нюанса!

Действительно, применял только для имен окон, поэтому код и работал для других приложений. Edit-ы не трогал.

Не за что :-).

Помог- и сам в чем-то разобрался :-).
 

Причем заметьте, WM_GETTEXT прекрасно работает.

А вот попытка достать текст из ListView при помощи LV_GETITEMTEXT

потребует нахождения в адресном пространстве приложения.

 

Народ выручайте! Напишите пожалуйста работающий пример кода на MQL4 для чтения Edit - чужого приложения с помощью SendMessageA . Два дня уже ковыряю и толку никакого.

Я так понял это не работает, что и как нужно исправить. В поиске ничего не нашел. Заранее спасибо!

#define WM_GETTEXT 0x000D
#import "user32.dll"
int SendMessageA ( int h, int cmd , int len , string p );
#import

void start() 
{
string p1 = " ";

SendMessageA ( 0x050A90, WM_GETTEXT, 8 , p1 );

Print( p1 );

} 
 
jartmailru:

Привожу работающий код:

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
    wchar_t a[] = L"                          ";
    SendMessage((HWND)0x00040E86, WM_GETTEXT, sizeof(a), (LPARAM)a);
    return 0;
}
Немного юникодовый, но у меня с 2006-ого всё юникодовое :-)

Никак не пойму как это в MQL реализовать, хочется без внешних DLL, помогите пожалуйста рабочим примером.
 
kosuhin:

Никак не пойму как это в MQL реализовать, хочется без внешних DLL, помогите пожалуйста рабочим примером.
Без внешних DLL - никак.
 

Diamant:
Без внешних DLL - никак.

Видимо я все же неправильно выразил ход мыслей и то что требуется, я имел ввиду не использовать самописную DLL, те библиотеки что в винде уже есть их конечно можно и нужно использовать, других вариантов нет. Хочется реализовать с помощью библиотеки user32.dll и не делать свою.

Точнее у меня получает только первый символ получить и все.

А почему без внешней (самописной) никак ? В чем разница ? Уточните пожалуйста в чем суть проблемы.

И если уже действительно никак нельзя, то напишите пожалуйста пример функции на C++ для DLL в которую я передам дескриптор окна а она мне вернет текст поля Edit.

 
Интересно, все на выходных отдыхают или никто действительно не знает.