Работа с User32.DLL

 
Добрый день!

Уже где только не искал и не читал, все бестолку. Я реализовал своего рода контроль за деятельностью МТ4 платформы на ВПС.  
Получается что-то на подобии пульта управления роботами на разных впс со своего домашнего компьютера. 

Реализовал отключение включение авто-торговли. Сначала через keybd_event(). Но оказывается, данная функция работает только если я зашел на ВПС-сервер, и тогда я реализовал следущий код:

void Key() // Включение и выключение.
  {
   /* --- Old Version:
    keybd_event(VK_CONTROL,0,0,0);
    Sleep(1);
    keybd_event(KEY_CODE,0,0,0);
    Sleep(1);
    keybd_event(KEY_CODE,0,2,0);
    Sleep(1);
    keybd_event(VK_CONTROL,0,2,0);
    */
//---New Version:
   int main = GetAncestor(WindowHandle(Symbol(), Period()), 2/*GA_ROOT*/);
   PostMessageA(main, WM_COMMAND,  MT4_WMCMD_EXPERTS, 0);
  }
Функция PostMessageA - решила данную задачу, но список ее команд не велик.
Моя же задача, которую я не могу решить - это отключение советника через программный код. Задача решена через keybd_event() : 

void TernOffEndOnAllTimesNext()
  {
   keybd_event(F7,0,0,0);
//3TimeTab
   keybd_event(TAB,0,0,0);
   Sleep(1000);
   keybd_event(TAB,0,0,0);
   Sleep(100);
   keybd_event(TAB,0,0,0);
   Sleep(1000);
   keybd_event(Space,0,0,0);
   keybd_event(Space,0,2,0);
   keybd_event(Enter,0,0,0);
   Sleep(100);
  }
Но как я уже описывал ранее, если я не нахожусь фактически на ВПС, функция keybd_event() - не выполняется. Поэтому вопрос к опытным программистам: 
Есть ли возможность сделать так, что-бы уже написанные функции работали (например через передачу фокуса клавиатуры коду), или есть иной способ работы при котором можно отключать советник.

Сразу скажу : отключаю и включаю EX4 файл.

Спасибо всем, кто сможет подсказать.
С уважением к вам, Сергей.


 

Пробуйте не эмуляцию нажатия клавиш клавиатуры, а прямое нажатие кнопки "Автоторговля".

Что-то вроде этого. Если этот код (32851) уже устарел, то через Spy++ можно найти новый код для WM_COMMAND.

Как программно нажать на кнопку Авто-торговля
Как программно нажать на кнопку Авто-торговля
  • 2013.06.30
  • [Удален]
  • www.mql5.com
В мкл4 я думаю данной фишкой пользовались все - когда нужно отключить все советники на счете в один миг - и включить например когда произойдет событие(зацикленный вариант).
 
Ihor Herasko #:

Пробуйте не эмуляцию нажатия клавиш клавиатуры, а прямое нажатие кнопки "Автоторговля".

Что-то вроде этого. Если этот код (32851) уже устарел, то через Spy++ можно найти новый код для WM_COMMAND.


Благодарю за ответ, обязательно посмотрю через SPY++. 
Кнопка полного выключения - у меня работает, мне нужно нажимать : F7, TAB и Enter.
Но опять же, что бы я не сидел на самой ВПС.
 

Какая интересная тема!

Скажите, а где можно взять толковое описание на русском языке функицй библиотеки User32.DLL?

Форум трейдеров - MQL5 community
Форум трейдеров - MQL5 community
  • www.mql5.com
MQL5: форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
 
Vitaly Murlenko #:

Какая интересная тема!

Скажите, а где можно взять толковое описание на русском языке функицй библиотеки User32.DLL?

Информации очень мало и она находится сегрегировано друг от друга. Сам ищу, но пока нет точной информации, из того что нашел: 

https://www.mql5.com/ru/forum/110207

https://github.com/suvorovkonstantin/MQL4/blob/master/include/WinUser32.mqh#L339

research по теме кодов к PostMessageA - Попробуйте перехватывать сообщения при нажатии кнопок в программе PostMessageA.
research по теме кодов к PostMessageA - Попробуйте перехватывать сообщения при нажатии кнопок в программе PostMessageA.
  • 2008.08.05
  • Mikhail Chistyakov
  • www.mql5.com
Провел тут небольшое исследование на тему кодов к функции PostMessageA. Как работать с PostMessageA - обсуждалось ранее в других ветках. Спрашиваю не из простого любопытства - вдруг придется что нибудь еще
 
Vitaly Murlenko #:

Какая интересная тема!

Скажите, а где можно взять толковое описание на русском языке функицй библиотеки User32.DLL?

в первую очередь первоисточник:

https://learn.microsoft.com/en-us/windows/win32/apiindex/windows-api-list

там можно найти страницу перевода или перевести прямо в броузере..

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

---

Любезно подготовленные директивы импорта (но не все) см в include/WinAPI

там смотришь имя функции, ищешь его в гугле, выбираешь ссылку ведущую в microsoft.com

Windows API index - Win32 apps
Windows API index - Win32 apps
  • 2023.03.15
  • GrantMeStrength
  • learn.microsoft.com
A list of the reference content for the Windows API.
 

ну есть полный список функций-команд в WinUser32.mqh в поставке мкл5

а для остановки торговли можно програмно прожимать отжимать кнопку автоторговли в мт4 это

void ExpertEnabled(bool Switch) // TRUE - включить эксперт, FALSE - отключить эксперт.
  {
   if(Switch == IsExpertEnabled()) return;
   int HandlWindow=WindowHandle(Symbol(),Period()); // Системный дескриптор окна.
   int HandlMT4=GetAncestor(HandlWindow,2); // Системный дескриптор окна МТ4.
   SendMessageA(HandlMT4,WM_COMMAND,33020,0);
  }

а в мт5 уже немного другой код кнопки

void ExpertEnabled(bool Switch) // TRUE - включить эксперт, FALSE - отключить эксперт.
  {
   if(Switch == TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))  return;
   int HandlWindow=ChartGetInteger(0,CHART_WINDOW_HANDLE); // Системный дескриптор окна.
   int HandlMT5=GetAncestor(HandlWindow,2); // Системный дескриптор окна МТ5.
   SendMessageW(HandlMT5,WM_COMMAND,32851,0);
  }
 
Aleksey Semenov #:

ну есть полный список функций-команд в WinUser32.mqh в поставке мкл5

а для остановки торговли можно програмно прожимать отжимать кнопку автоторговли в мт4 это

а в мт5 уже немного другой код кнопки

У меня работает включение / выключение авто торговли. 

Мне нужно - включить / выключить, отдельный советник.
 
Sergei Melnikov #:
У меня работает включение / выключение авто торговли. 

Мне нужно - включить / выключить, отдельный советник.

Если исходника нет, то придется открывать окно параметров и убирать галку автоторговли. А это уже заморочливо.

Как вариант, можно при отключении применить шаблон к графику. В шаблоне не должно быть советника. Потом, когда потребуется включить советник, применить шаблон, в котором советник есть. Преимущество такого подхода - никаких DLL.

 
Ihor Herasko #:

Если исходника нет, то придется открывать окно параметров и убирать галку автоторговли. А это уже заморочливо.

Как вариант, можно при отключении применить шаблон к графику. В шаблоне не должно быть советника. Потом, когда потребуется включить советник, применить шаблон, в котором советник есть. Преимущество такого подхода - никаких DLL.

Пробовал, не вариант, при "неактивной впс" , обновление шаблона и снятие эксперта происходит лишь на управляемом графике.

 
Sergei Melnikov #:

Пробовал, не вариант, при "неактивной впс" , обновление шаблона и снятие эксперта происходит лишь на управляемом графике.

Так и должно быть если ChartID поставить 0

bool  ChartApplyTemplate( 
   long          chart_id,     // идентификатор графика 
   const string  filename      // имя файла с шаблоном 
   );
Да и ChartRedraw() не мешает применить после применения шаблона.