Эмуляция нажатия какой-нибудь одной кнопки клавиатуры получается без проблем. Ниже рабочий скрипт эмуляции нажатия на кнопку F3.
Мне нужно эмулировать нажатие двух кнопок ALT+R (в ручном режиме использование этих горячих клавиш приводит к каскадному выравниванию подокон в главном окне). Для этого я использую код:
Этот код не работает. Где ошибка? Может быть существует специальная функция для каскадного выравнивания окон?
Спасибо за помощь.
Почему не срабатывает программное нажатие на две клавиши?
Эмуляция нажатия какой-нибудь одной кнопки клавиатуры получается без проблем. Ниже рабочий скрипт эмуляции нажатия на кнопку F3.
Мне нужно эмулировать нажатие двух кнопок ALT+R (в ручном режиме использование этих горячих клавиш приводит к каскадному выравниванию подокон в главном окне). Для этого я использую код:
Этот код не работает. Где ошибка? Может быть существует специальная функция для каскадного выравнивания окон?
Спасибо за помощь.
https://www.mql5.com/ru/forum/450216#comment_48017754
Не оно?
![Упорядочить окна графиков вертикально программно. Упорядочить окна графиков вертикально программно.](https://c.mql5.com/36/82/uporyadochit-okna-grafikov-vertikalno.jpg)
- 2023.07.05
- www.mql5.com
Спасибо. Код с Вашей поправкой по данной ссылке действительно работает в МТ5, но отказывается работать в МТ4. В МТ4 не происходит ничего. Как быть?
С SendMessageA всё работает (кроме мозаики, как я выше писал) и на МТ4, и на МТ5, проверил. spy++ у меня есть, но я не знаю, как найти значение. Может быть, пару слов на эту тему... Кстати, я в первом посте ошибся, мне нужен не каскад, а мозаика, если принять интерпретацию расположения окон по Вашей модели (той, что по Вашей ссылке).
Ну из меня помощник, так себе. Сам всё делаю методом научного тыка.
Я хз что там в четвёрке, тем более, что она 32 битная, а у меня spy++ только для 64 битных приложений.
Всё чем мог...
Ну из меня помощник, так себе. Сам всё делаю методом научного тыка.
Я хз что там в четвёрке, тем более, что она 32 битная, а у меня spy++ только для 64 битных приложений.
Всё чем мог...
Вы могли бы рассказать, как с помощью spy++ находить значение 3-го параметра SendMessageW. Помогите, пожалуйста.
Эмуляция нажатия какой-нибудь одной кнопки клавиатуры получается без проблем. Ниже рабочий скрипт эмуляции нажатия на кнопку F3.
Мне нужно эмулировать нажатие двух кнопок ALT+R (в ручном режиме использование этих горячих клавиш приводит к каскадному выравниванию подокон в главном окне). Для этого я использую код:
Этот код не работает. Где ошибка? Может быть существует специальная функция для каскадного выравнивания окон?
Спасибо за помощь.
Держите:
#define _WIN64 // Only for a 64-bit terminal! #include <WinDef.mqh> #define VK_MENU 0x12 // клавиша ALT #define VK_R 0x52 // клавиша R #define INPUT_MOUSE 0 #define INPUT_KEYBOARD 1 #define INPUT_HARDWARE 2 #define KEYEVENTF_KEYUP 0x0002 struct MOUSEINPUT pack( sizeof( PVOID ) ) { LONG dx; LONG dy; DWORD mouseData; DWORD dwFlags; DWORD time; ULONG_PTR dwExtraInfo; }; struct KEYBDINPUT pack( sizeof( PVOID ) ) { WORD wVk; WORD wScan; DWORD dwFlags; DWORD time; ULONG_PTR dwExtraInfo; }; struct HARDWAREINPUT { DWORD uMsg; WORD wParamL; WORD wParamH; }; struct INPUT pack( sizeof( PVOID ) ) { DWORD type; #ifdef _WIN64 uint pad; #endif union __inputs { MOUSEINPUT mi; KEYBDINPUT ki; HARDWAREINPUT hi; } inp; }; #import "user32.dll" UINT SendInput( UINT nInputs, INPUT& pInputs[], int cbSize ); #import //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { INPUT inputs[4]; inputs[0].type = INPUT_KEYBOARD; inputs[0].inp.ki.wVk = VK_MENU; inputs[0].inp.ki.wScan = 0; inputs[0].inp.ki.dwFlags = 0; inputs[0].inp.ki.time = 0; inputs[0].inp.ki.dwExtraInfo = 0; inputs[1].type = INPUT_KEYBOARD; inputs[1].inp.ki.wVk = VK_R; inputs[1].inp.ki.wScan = 0; inputs[1].inp.ki.dwFlags = 0; inputs[1].inp.ki.time = 0; inputs[1].inp.ki.dwExtraInfo = 0; inputs[2].type = INPUT_KEYBOARD; inputs[2].inp.ki.wVk = VK_R; inputs[2].inp.ki.wScan = 0; inputs[2].inp.ki.dwFlags = KEYEVENTF_KEYUP; inputs[2].inp.ki.time = 0; inputs[2].inp.ki.dwExtraInfo = 0; inputs[3].type = INPUT_KEYBOARD; inputs[3].inp.ki.wVk = VK_MENU; inputs[3].inp.ki.wScan = 0; inputs[3].inp.ki.dwFlags = KEYEVENTF_KEYUP; inputs[3].inp.ki.time = 0; inputs[3].inp.ki.dwExtraInfo = 0; SendInput( 4, inputs, sizeof( INPUT ) ); } //+------------------------------------------------------------------+
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Эмуляция нажатия какой-нибудь одной кнопки клавиатуры получается без проблем. Ниже рабочий скрипт эмуляции нажатия на кнопку F3.
Мне нужно эмулировать нажатие двух кнопок ALT+R (в ручном режиме использование этих горячих клавиш приводит к каскадному выравниванию подокон в главном окне). Для этого я использую код:
Этот код не работает. Где ошибка? Может быть существует специальная функция для каскадного выравнивания окон?
Спасибо за помощь.