Ай-нэ-нэ код какой-то. Зачем два "!" ? :)
В мт5 версии в обработчике нажатий клавиш спользуется код
bool SHIFT = !!TerminalInfoInteger(TERMINAL_KEYSTATE_SHIFT);
чтобы получить разные события на X и на Shift-X. Всё работает корректно.
При переносе решения в мт4 иногда работает корректно, но иногда код который отрабатывается при нажатии SHIFT-X начинает отрабатываться и без прижатия Shift, но только когда нажата Х. Т.е. такое ощущение, что мт4 продолжает считать, что Shift нажат. Кто с подобным сталкивался и как решал? Я пока перенес вызов кода на другую клавишу без шифта, но это несколько меняет логику работы пользователя.
Странная конструкция...
Попробуйте так:
//+------------------------------------------------------------------+ //| Возвращает состояние клавиши Ctrl | //+------------------------------------------------------------------+ bool IsCtrlKeyPressed(void) { return(::TerminalInfoInteger(TERMINAL_KEYSTATE_CONTROL)<0); } //+------------------------------------------------------------------+ //| Возвращает состояние клавиши Shift | //+------------------------------------------------------------------+ bool IsShiftKeyPressed(void) { return(::TerminalInfoInteger(TERMINAL_KEYSTATE_SHIFT)<0); } //+------------------------------------------------------------------+
Оказывается надо было следовать RTFM:
Вызов TerminalInfoInteger(TERMINAL_KEYSTATE_XXX) возвращает такой же код состояния клавиши, как и функция GetKeyState() из MSDN.
![GetKeyState function (winuser.h) - Win32 apps GetKeyState function (winuser.h) - Win32 apps](https://c.mql5.com/36/79/getkeystate-function-winuser-h.png)
- 2022.08.04
- jwmsft
- learn.microsoft.com
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В мт5 версии в обработчике нажатий клавиш спользуется код
bool SHIFT = !!TerminalInfoInteger(TERMINAL_KEYSTATE_SHIFT);
чтобы получить разные события на X и на Shift-X. Всё работает корректно.
При переносе решения в мт4 иногда работает корректно, но иногда код который отрабатывается при нажатии SHIFT-X начинает отрабатываться и без прижатия Shift, но только когда нажата Х. Т.е. такое ощущение, что мт4 продолжает считать, что Shift нажат. Кто с подобным сталкивался и как решал? Я пока перенес вызов кода на другую клавишу без шифта, но это несколько меняет логику работы пользователя.