Этот форум переведен в режим чтения, просим обсуждать вопросы на форумах MQL4.community и MQL5.community
Как изменить название окна терминала ?К списку тем | 1 2 |
|
Long
01.09.2006 02:21
Столкнулся с проблемой - тот ли терминал разворачиваю или не тот ( их уже два.. :) )
Так вот свернутый в панель - он показывает номер счета: и ... ( три точки). Как можно сделать,чтоб там было написано то, что мне нужно ? Где-то я видел ( то ли в ини каком-то , то ли где-то), но потерял .. Подскажите пожалуйста |
|
Jhonny
05.09.2006 23:11
Если Вы общались немного с языками програмирования то я думаю отсюда все будет ясно
program Project1;
uses
windows;
begin
setwindowtext(findwindow('Metaquotes::Metatrader::4.00',nil),'My text');
end.
|
|
Long
06.09.2006 00:21
К сожалению, настолько глубоко - не общался :) .. ( не въехал, куда это вставлять - уж точно)
можно поподробней ? |
|
Jhonny
06.09.2006 06:33
Это код программы написанный на Delphi. Если Вы установите Delphi то можно этот код откомпилировать и получите исполняемый файл *.exe. После того как Вы запустите эту получившуюся программу то один из запущенных терминалов(а точнее тот который был запущен позже) поменяет заголовок своего окна.
По этой ссылке я выложил уже откомпилированный http://fxfilecheng.narod.ru/wintext.rar PS Никогда не качайте исполняемые файлы если Вы не знаете что там. Я б на Вашем месте попросил у друзей Delphi и откомпилировал бы сам. Во-первых сам бы разобрался что к чему, во-вторых безопасно (ну это конечно если Вы во-первых разобрались ;) ). |
|
Jhonny
06.09.2006 14:53
Чето я сразу не сообразил стандартными средствами сделать чтоб не мучаться с экзешником
вот скрипт который это делает тока надо в библиотеке WinUser32.mqh добавить строку куданибудь сюда ..... //---- windows int GetForegroundWindow(); ......
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#include <WinUser32.mqh>
#property show_inputs
extern string Newname="My text";
int start()
{
int h=GetForegroundWindow();
while (true)
{Sleep(500);
SetWindowTextA(h,Newname); }
return(0);
}
|
|
Long
06.09.2006 16:09
А как же окна от разных дилеров-то по -разному называются ? Разве не в .ini в каких-то эти названия окна прописываются ?
Вот там к примеру Al_Pari Metatrader, StrategybuilderFX4 и так далее ..- как они-то выводят свои названия ? |
|
Jhonny
06.09.2006 16:16
А вы не думали что это название может быть внутри исполняемого кода без всякого там ини файла. По моему даже гдето на сайте сказано что при покупке ПО компания может закомпилировать логотип и название компании в терминал, что-то Вы совсем нехотите ничего сделать сами.
Вот готовый код скрипта бросить на график и все, что Вам еще надо. #property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
#import "user32.dll"
int GetForegroundWindow();
int SetWindowTextA(int hWnd,string lpString);
#property show_inputs
extern string Newname="My text";
int start()
{int h=GetForegroundWindow();
while (true)
{Sleep(500);
SetWindowTextA(h,Newname); }
return(0);
}
|
|
kombat
06.09.2006 17:17
Как вариант простого юзера... :)
В папку терминала поместить или изменить свою иконку (файл terminal.ico). Тогда можно ориентироваться в свёрнутых окнах по значку. Например так: |
|
Long
07.09.2006 01:07
Вот именно ! (Комбат сразу смекнул, .. что простые юзеры еще есть ! :) их не может не быть)
Короче, по порядку -- Спасибо : за скрипт за иконки Иконки - оказались - именно тем решением которое - можно применить Почему - потому что - первое, что видно в панели - это именно иконка. Если скриптом - написать там - "AlPari" - то на панели - будет видно - Alpari, но! - если окон ( в т.ч. и терминалов) открыто несколько - то останется (из надписи) - только Alp.., Al.. и т.д. (как видно и на рисунке Комбата) . А вот иконку - будет видно всегда (!) и всю. Так что - побеждает вариант Комбата ( простота - залог удачи) Теперь -"внутри исполняемого кода без всякого там ини файла" Вот - не думали .. А пробовали - Заменяем терминал.exe (берем к примеру его из папки, из которой запустившись он дает окно с названием "№счета Metatrader") - и запущенный из папки StrategyBuilderFX 4, к примеру - он дает в названии - "№счета StrategyBuilderFX 4 Metatrader Демосчет - [USDJPY Daily]" Из чего я сделал вывод - в исполняемом файле - только "Metatrader" (закомпилирован), а вот StrategyBuilderFX 4 - он ( этот исполняемый файл) - где-то в папке считАл Вот где ? - Я и хочу найти.. (чтоб прописать один раз - а не накладывать скрипт каждый.. раз) |
|
Jhonny
07.09.2006 06:48
Ну чтож, главное что Вы нашли то что Вам надо. Kombat проникся Вашей проблемой, а я Вашим вопросом, за это ему и лавры :)
PS На счет накладывания скрипта каждый раз, есть такое дело как конфигурационный файл там можно сделать чтоб скрипт накладывался при запуске терминала :) ну да ладно. PSS В ходе обсуждения сабжа возник вопрос разработчикам. Если Вы заметили то в первом варианте на Delphi я ищу хендл окна терминала через функцию FindWindow там в качестве второго параметра у меня стоит nil, что я думал означает любую строку(в конкретном случае), а использовать эту функцию в MQL4 у меня не получилось потому что NULL пустая строка и скрипт выдавал постоянно хендл=0. Так вот вопрос как можно в MQL4 используя функцию FindWindow найти окно только зная его класс? |
3589 |
Renat
07.09.2006 10:20
Это делается через EnumWindows и проверку класса окна:
//+------------------------------------------------------------------+
//| Функции проверки окон |
//+------------------------------------------------------------------+
BOOL CALLBACK MainEnumWindowsProc(HWND hwnd,LPARAM lParam)
{
char tmp[256]="";
//---- пропустим пустые или левые окна
::GetClassName(hwnd,tmp,sizeof(tmp)-1);
if(strcmp(tmp,"MetaQuotes::MetaTrader::4.00")!=0) return(TRUE);
//---- нашли окно МТ, можно в него что-то послать
....
//----
return(FALSE);
}
//+------------------------------------------------------------------+
//| Поиск окна МТ |
//+------------------------------------------------------------------+
...
//----
if(EnumWindows(MainEnumWindowsProc,-1))
{
//--- нашли
}
//----
#import "user32.dll"
int GetParent(int hWnd);
....
int handle=WindowHandle(Symbol(),Period());
if(handle!=0)
{
handle=GetParent(handle);
//--- вот и главное окно терминала
}
|
К списку тем
| 1 2
Скачай MetaTrader 5 (300 Кб, веб-установщик) — новый терминал для финансовых рынков
