Активность окна инструмента - как определить на winapi ?

 

задача состоит в том, чтобы игнорировать работу мыши в неактивных окнах инструментов..

первое что пришло на ум это сравнить Symbol() и название инструмента в титуле окна терминала, которое заключено в квадратные скобки..

однако извлечь этот текст так и не удалось..

пробовал так..

int hWindow = WindowHandle(Symbol(),Period()); // хендл активного инструмента

int hParent = GetAncestor(hWindow, 2); // хендл основного окна терминала

string s;

GetWindowTextA(hParent, s, GetWindowTextLengthA(hParent) );

Print(s);// пусто

хотя GetWindowTextLengthA(hParent) возвращает значение похожее на количество символов в титуле..


какие еще варианты ?

 
пробовал не работает.. возвращает пустую строку..
 
keekkenen >>:
пробовал не работает.. возвращает пустую строку..

тут глючок небольшой имеется... железно зашито в dll имя окна метатрейдера :/
а если программа называется как-нибудь по-другому, то getactiveWndname ни чего не возвращает... и ни как не узнать :(

А что делать, всё таки, если платформа называется не Метатрейдер, а Телетрейдер? Библиотека dll к сож. не работает. ... не распознает. Посоветуете? 

скопировать файл C:Program FilesMetaTrader 4profilesconfiguration.ini от "правильного" МТ в 
C:Program FilesTeletrader 4profilesconfiguration.ini

 
это тоже не помогает..
 
keekkenen писал(а) >>

задача состоит в том, чтобы игнорировать работу мыши в неактивных окнах инструментов..

первое что пришло на ум это сравнить Symbol() и название инструмента в титуле окна терминала, которое заключено в квадратные скобки..

однако извлечь этот текст так и не удалось..

пробовал так..

int hWindow = WindowHandle(Symbol(),Period()); // хендл активного инструмента

int hParent = GetAncestor(hWindow, 2); // хендл основного окна терминала

string s;

GetWindowTextA(hParent, s, GetWindowTextLengthA(hParent) );

Print(s);// пусто

хотя GetWindowTextLengthA(hParent) возвращает значение похожее на количество символов в титуле..

какие еще варианты ?

Кто или что должно игнорировать работу мыши?

 
keekkenen >>:
это тоже не помогает..

блин ну тогда не знаю медицина бессильна ((

у меня все работает

может запрет импорта библиотеки не убрали?

 

импорт dll разрешен..


должны быть и другие варианты..

 

спасибо за участие.. сам нашел..

 
keekkenen писал(а) >>

спасибо за участие.. сам нашел..

А поделиться ответом можно?

Кстати, если открыто два одинаковых окна (например EURUSD,H1) - что, тогда в обих окнах мышь останется активной?

 
Erics >>:

Кстати, если открыто два одинаковых окна (например EURUSD,H1) - что, тогда в обих окнах мышь останется активной?

вполне возможно, что активность мыши можно сделать и в нескольких окнах..

#import "user32.dll"
int      GetParent(int h);
int      GetTopWindow(int h);
#import

bool isActive(){
   int hCurrWindow = WindowHandle(Symbol(),Period());    //хедл текущего окна графика
   int hNextParent = GetParent(hCurrWindow);
   hNextParent = GetParent(hNextParent);                 //хендп родительского окно для всех графиков
   int hNextActiveWindow = GetTopWindow(hNextParent);
   hNextActiveWindow = GetTopWindow(hNextActiveWindow);  //хедл текущего окна графика
   if (hCurrWindow==hNextActiveWindow) return(true);
   else return(false); 
}
Причина обращения: