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

 

Да не надо ничего выделять. WM_GETTEXT прекрасно читает из чужих процессов.

kosuhin, первый вариант твоего кода (на 3-й странице) неправильный. А второй вроде нормальный, должен работать. Проверь какое значение возвращает SendMessage. Это должно быть количество скопированных сиволов. А также проверь длину строки в самом Edit с помощью WM_GETTEXTLENGTH

 

Meat:

Да не надо ничего выделять. WM_GETTEXT прекрасно читает из чужих процессов.

kosuhin, первый вариант твоего кода (на 3-й странице) неправильный. А второй вроде нормальный, должен работать. Проверь какое значение возвращает SendMessage. Это должно быть количество скопированных сиволов. А также проверь длину строки в самом Edit с помощью WM_GETTEXTLENGTH

Спасибо! Все разобрался в чем было дело. Действительно читает без проблем. Вопрос снят, всем большое спасибо!
 

На всякий случай хочу объяснить в чем была трабла.

Ранее работая с этим исходником я присоединил вот этот файл

#include <winuser32.mqh>

Потом сделал вот так импорт:

#import "user32.dll"
 int SendMessageA ( int hWnd, int Msg, int wParam, string lParam );
#import

когда понадобилась эта функция.

В итоге получил SendMessageA с такими параметрами ( int hWnd, int Msg, int wParam, string lParam ); и ту что находится вот тут winuser32.mqh, она имеет вот такие параметры SendMessageA(int hWnd,int Msg,int wParam,int lParam); в итоге как ни странно никакой ошибки не было, не в компиляторе, не в терминале, но функция SendMessageA возвращала пустое поле, господа будьте внимательны!

Отдельное спасибо Meat, его утверждения заставили меня докопаться до сути проблемы и были направлены в правильную сторону!

Вот такой вот казус.

 

У меня тоже случались похожие траблы из-за несоответствия типов во включаемых файлах. Действительно не сразу и догадаешься в чём ошибка. Надо просто запомнить: если одна и та же функция импортируется несколько раз, то приоритетным является самый первый импорт, остальные игнорируются. Поэтому в данном случае нужно в коде сначала сделать #import, а уже потом #include

 
Meat:

У меня тоже случались похожие траблы из-за несоответствия типов во включаемых файлах. Действительно не сразу и догадаешься в чём ошибка. Надо просто запомнить: если одна и та же функция импортируется несколько раз, то приоритетным является самый первый импорт, остальные игнорируются. Поэтому в данном случае нужно в коде сначала сделать #import, а уже потом #include

Все приходит с опытом )) Виновата конечно моя усталость и невнимательность. Теперь и я буду знать куда копать если что.

А вообще я и не догадывался что при двойном импорте не возникнет ошибки в компиляторе.

Возникает такой вопрос, что делать если эта функция понадобится дважды и с разными типами.

 
kosuhin:

Все приходит с опытом )) Виновата конечно моя усталость и невнимательность. Теперь и я буду знать куда копать если что.

А вообще я и не догадывался что при двойном импорте не возникнет ошибки в компиляторе.

Возникает такой вопрос, что делать если эта функция понадобится дважды и с разными типами.

Сделать две библиотеки с разными параметрами при импорте.
 

А для некоторых функций, в частности SendMessage, можно использовать варианты с окончанием A или W. Например для передачи строковых параметров использовать первый вариант с lParam типа string, а для передачи целых значений или массива - второй вариант с типом int, либо int [].

 
kosuhin:

На всякий случай хочу объяснить в чем была трабла.

Ранее работая с этим исходником я присоединил вот этот файл

Потом сделал вот так импорт:

когда понадобилась эта функция.

В итоге получил SendMessageA с такими параметрами ( int hWnd, int Msg, int wParam, string lParam ); и ту что находится вот тут winuser32.mqh, она имеет вот такие параметры SendMessageA(int hWnd,int Msg,int wParam,int lParam); в итоге как ни странно никакой ошибки не было, не в компиляторе, не в терминале, но функция SendMessageA возвращала пустое поле, господа будьте внимательны!

Отдельное спасибо Meat, его утверждения заставили меня докопаться до сути проблемы и были направлены в правильную сторону!

Вот такой вот казус.

Внимательно прочитал весь топик. Пытаюсь считать значение Bid Price из ComboBox. Пытаюсь проверять что возвращает SendMessageA. В результате пустая строка. Подскажите пожалуйста что я не правильно делаю?

 

#define WM_GETTEXT        0x000D 
#define WM_GETTEXTLENGTH  0x000E

#import "user32.dll"
int FindWindowW(string lpClassName,string lpWindowName);
int SendMessageA(int hWnd,int Msg,int wParam,string lParam);
#import

int start()
  {   
   string a = "        ";
   SendMessageA(0x0305E2,WM_GETTEXT,7,a);  
   Comment("\n Bid ",a,
           "\n Length ",SendMessageA(0x0305E2,WM_GETTEXT,7,a),
           "\n Text Length ",SendMessageA(0x0305E2,WM_GETTEXTLENGTH,7,a));
   return(0);     
  }
 
AM2:

Внимательно прочитал весь топик. Пытаюсь считать значение Bid Price из ComboBox. Пытаюсь проверять что возвращает SendMessageA. В результате пустая строка. Подскажите пожалуйста что я не правильно делаю?

 

 

1. SendMessageW

2. Не уверен, что будет записано в буфер a. 

 

P. S. Попробовал. Получилось следующим образом:

#define WM_GETTEXT        0x000D 
#define WM_GETTEXTLENGTH  0x000E

#import "user32.dll"
int FindWindowW(string lpClassName,string lpWindowName);
int SendMessageA(int hWnd,int Msg,int wParam,char& lParam[]);
#import

int start()
  {   
  
   char a[24];
   ArrayInitialize(a, 0);
   
   SendMessageA(0x0306B6,WM_GETTEXT,24,a);
   
   string str = CharArrayToString(a);
     
   Comment("\n Bid ",str,
           "\n Length ",SendMessageA(0x0306B6,WM_GETTEXT,24,a),
           "\n Text Length ",SendMessageA(0x0306B6,WM_GETTEXTLENGTH,24,a));
   return(0);     
  }
 
Scriptong:

1. SendMessageW

2. Не уверен, что будет записано в буфер a. 

 

P. S. Попробовал. Получилось следующим образом:

 

Так можно считать текст с Edit а мне нужно с СomboBox выделенный текст. Подошло бы что то вроде: string Text = comboBox1.SelectedItem.ToString();
Причина обращения: