Не получается сменить название окна терминала, выводится только первый символ из всей строки которую я передаю, в чем проблема?
Дело в:
SetWindowTextA
Нужно заменить на
SetWindowsTextW
Но такой способ долго держать окно со своим названием не будет. Потребуется постоянно следить за изменением имени. Да, в данном случае решение через таймер, но, на мой взгляд, избыточное.
SetWindowsTextW работает, теперь я пытаюсь получить предыдущий заголовок перед заменой функцией GetWindowTextW, но показывает пустую строку
#import "user32.dll" int GetForegroundWindow(); int SetWindowTextW(int hWnd,string lpString); string GetWindowTextW(int hWnd2,string lpString2, int co); #import string title; string title_2 = GetWindowTextW(h,title,100); int OnInit() { Comment("\n\n\n>"+title+"|"+title_2+"|"); return(INIT_SUCCEEDED); }
SetWindowsTextW работает, теперь я пытаюсь получить предыдущий заголовок перед заменой функцией GetWindowTextW, но показывает пустую строку
Нужно распределить память для принимающей строки (она не должна быть пустой). GetWindowTextW не делает этого автоматически. Например, так:
string title = " "; int symbolsCnt = GetWindowTextW(h,title,StringLen(title));
Все равно пусто, функция GetWindowTextW оставляет title таким же (не переписывает его)
#import "user32.dll" int GetForegroundWindow(); int SetWindowTextW(int hWnd,string lpString); int GetWindowTextW(int hWnd2,string lpString2, int co); #import int h = GetForegroundWindow(); string title = " "; int symbolsCnt = GetWindowTextW(h,title,StringLen(title)); int OnInit() { Comment("\n\n\n>"+title+"|"+symbolsCnt); }
Все равно пусто, функция GetWindowTextW оставляет title таким же (не переписывает его)
В этом случае не так уж все и просто. Нельзя давать в GetWindowTextW ссылку на строку MQL4. Нужно передать указатель на массив символов, а массив символов преобразовывать в строку:
#define SYMBOLS_UCHARS 50 ushort title[SYMBOLS_UCHARS]; int symbolsCnt = GetWindowTextW(hSymbol, title, SYMBOLS_UCHARS); string windowName = ShortArrayToString(title); Print("Имя окна символа: ", windowName);
Соответственно, объявление GetWindowTextW должно быть таким:
int GetWindowTextW(int hWnd2, ushort &lpString[], int co);
А почему после изменения названия окна стандартное название возвращается? Метаквоты сделали так, что оно периодически проверяется? Тратят ресурсы на такую фигню?
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Не получается сменить название окна терминала, выводится только первый символ из всей строки которую я передаю, в чем проблема?