Баг, фича или барабашка?

 

Необходимо заставить советника в текущем чарте отобразить выбранный символ и таймфрейм.

Т.к. сопутствующая логика малоинтересна в текущем контексте вырезал необходимый код (общеизвестный кстати) в скрипт

#import "user32.dll"
        int  GetDlgItem(int hDlg, int nIDDlgItem);
        int  PostMessageA(int hWnd,int Msg,int wParam,int lParam);
        bool SetWindowTextW(int hWnd, string lpString);
#import

#define WM_KEYDOWN                      0x0100

//--- Virtual Keys, Standard Set
#define VK_ENTER                        0x0D
#define VK_SPACE                        0x20

int start() {
//----
        SetSymbolOnChart("AUDUSD", 30);
//----  
        return(0);
}
//+------------------------------------------------------------------+

void SetSymbolOnChart(string smbl, string tf) {
        int hwnd = WindowHandle(Symbol(), Period());
        PostMessageA(hwnd, WM_KEYDOWN, VK_SPACE, 0);
        GetDlgItem(hwnd, 0x45A);
        SetWindowTextW(hwnd, smbl + "," + tf);
        PostMessageA(hwnd, WM_KEYDOWN, VK_ENTER, 0);
}

Так вот, суть моего недоумения в неадекватном поведении терминала на потуги скрипта, а именно моде менять символ в чарте только при повторном дропе скрипта на чарт.

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


Прошу знающих людей прояснить :

1. Почему скрипт отказывается устанавливать символ и таймфрейм?

2. Почему со второй попытки (повторного дропа скрипта) смена таки происходит, а при повторном вызове нет?


З.Ы. Про задержки не надо, слип и ожидание по таймеру результата не дают.

З.Ы.Ы. Версия MT 4 билд 610 - если это поможет

 

Что это?

SetWindowTextW(hwnd, smbl, ",", tf);
 
stringo:

Что это?

Это у нас отсылка сообщения в диалоговое окно, согласно MSDN в UNICODE.

Кстати, если использовать в ANSI варианте, то в диалоговое окно попадает только первый символ сообщения.

 

попробуйте, я не шарю в этой теме. может поможет.а это что?

'SetWindowTextW' - wrong parameters count symbol.mq4 25 9

 
SetWindowTextW(hwnd, smbl+","+tf);
только так код компилится
 
у меня он открывает окно поиска
 

Ага, запятые лишние были, там стринг должен был собраться.

Из живого кода выдирал кусками, и правил на ходу =)

Поправил первый пост.

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

Тему можно закрывать, разобрался.

Кстати, в скрипте скорее всего работать не будет.

 

ну дык выложите решение, мне тоже интересно.


Я же Вам пытался помочь - мне теперь стало интересно что было не так.

Причина обращения: