Скачать MetaTrader 5

Программно открыть "Новый ордер" (F9)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Roman Starinskij
1870
Roman Starinskij  

День добрый. Прошу подсказать, как программно вызвать открытия окна нового ордера (горячая клавиша - F9)? Это делеается через user34.dll? Каую функцию использовать, каой код клавиши F9?

Где можно почитать про работу с WinApi функцией?

Спасибо. 

Sergey Dzyublik
5136
Sergey Dzyublik  

Вот файл - почитайте его внимательно там много интересного. (Об WinApi поищите темы на 4-ке  как https://www.mql5.com/ru/forum/152533  и https://www.mql5.com/ru/forum/125202)

Не проверял но попробуйте:

int hwnd = int(ChartGetInteger(ChartID(), CHART_WINDOW_HANDLE));
PostMessageW(hwnd, WM_COMMAND, 33458, 0);
Файлы:
Roman Starinskij
1870
Roman Starinskij  
ALXIMIKS:

Вот файл - почитайте его внимательно там много интересного. (Об WinApi поищите темы на 4-ке  как https://www.mql5.com/ru/forum/152533  и https://www.mql5.com/ru/forum/125202)

Не проверял но попробуйте:

Не срабатывает... Пробовал со стандартной библиотекой - тоже. Подскажи, как решить?
Sergey Dzyublik
5136
Sergey Dzyublik  

да, проверил - не работает ни так, ни через родительский хендл.

Ну всегда есть путь через симуляцию нажатия клавиши F9

    keybd_event (VK_F9, 0x45, KEYEVENTF_EXTENDEDKEY|0, 0); 
    keybd_event (VK_F9, 0x45, KEYEVENTF_EXTENDEDKEY|KEYEVENTF_KEYUP, 0); 

 Но это будет срабатывать только если терминал - активное окно в момент нажатия.

Roman Starinskij
1870
Roman Starinskij  
ALXIMIKS:

да, проверил - не работает ни так, ни через родительский хендл.

Ну всегда есть путь через симуляцию нажатия клавиши F9

 Но это будет срабатывать только если терминал - активное окно в момент нажатия.

Большое спасибо! Все заработало. :)

Где можно изучить работу с DLL`лами? 

Ihor Herasko
11349
Ihor Herasko  
WePlexus:

Где можно изучить работу с DLL`лами? 

Наверное, имелось в виду - WinAPI? Если да, то это ресурс MSDN нужно изучать. Вот, к примеру, так описывается keybd_event - http://msdn.microsoft.com/en-us/library/windows/desktop/ms646304(v=vs.85).aspx.

keybd_event function (Windows)
  • msdn.microsoft.com
Synthesizes a keystroke. The system can use such a synthesized keystroke to generate a WM_KEYUP or WM_KEYDOWN message. The keyboard driver's interrupt handler calls the keybd_event function. Note This function has been superseded. Use SendInput instead. Syntax Parameters bVk [in] A virtual-key code. The code must be a value in the range 1...
Eugeniy Lugovoy
1994
Eugeniy Lugovoy  
Да, в принципе можно торгового робота написать без использования MQL. Приложение на С/С++ да WinApi. Только придется еще изучить и внутренние сообщения терминала, но это мелочи.
Комбинатор
16290
Комбинатор  
elugovoy:
Да, в принципе можно торгового робота написать без использования MQL. Приложение на С/С++ да WinApi. Только придется еще изучить и внутренние сообщения терминала, но это мелочи.
Можно, но это будет ненадежная неповоротливая монструозная хрень.
Eugeniy Lugovoy
1994
Eugeniy Lugovoy  
TheXpert:
Можно, но это будет ненадежная неповоротливая монструозная хрень.

Ненадежная... возможно.

Монструозная (первый раз прочитал почему-то как мЕнструозная) это вряд ли, если не писать прямо на ассемблере. Модульная разработка и никаких монстров ))

Andrey Khatimlianskii
57542
Andrey Khatimlianskii  
WePlexus:

День добрый. Прошу подсказать, как программно вызвать открытия окна нового ордера (горячая клавиша - F9)? Это делеается через user34.dll? Каую функцию использовать, каой код клавиши F9?

#import "user32.dll"
        int GetAncestor(int, int);
        int PostMessageW(int, int, int, int);
#import

void OnStart()
{
        int handle_mt = GetAncestor( WindowHandle(Symbol(),Period()), 2 );
        PostMessageW( handle_mt, WM_COMMAND, 35431, 0 );

Но там действительно огромное количество тонкостей.

Roman Starinskij
1870
Roman Starinskij  
Всем всем спасибо! Механизм запущен, все работает!
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий