Fintrum Цитата: Здравствуйте, подскажите пожалуйста, возможно ли добавить "жест" на ПКМ + СКМ, чтобы пока зажаты эти клавиши посылалась зажатая ЛКМ, при отпускании ПКМ + СКМ, отпускалась и ЛКМ? Т.е. чтобы получить функциональность зажатой левой кнопки мыши и возможность выделять текст или перемещать файлы, а не просто однократный щелчок.
Да, можно так сделать. Ниже рабочий вариант. Важное уточнение. В качестве модификатора (помимо СКМ) придется задействовать и колесо мыши (вращение вверх или вниз - не важно, по выбору пользователя). Без использования колеса в S+ нет возможности выполнять жест ДО отжатия кнопки мыши, используемой для выполнения жестов S+. Поэтому в данном случае для нас подходит только вариант с колесом.
1. Исходим из того, что кнопка мыши для начала выполнения жестов в S+ настроена - правая (Preferences - Stroke button - Right). Модификатор жеста "вращение колеса" лучше сделать - колесо вниз (имхо, так удобнее). В настройках программы (Preferences) также должна быть включена опция Fire Recognition on Mouse Wheel Scroll.
2. Настраиваем Жест (Action):
Modifier check - Either
Mouse/ Key modifiers - Middle button, Scroll down
Код жеста:
LMBpressed = 1
acRunProgram("C:\\Windows\\nircmd.exe","sendmouse left down",0,1)
acDelay(4000)
acRunProgram("C:\\Windows\\nircmd.exe","sendmouse left up",0,1) Примечание 1: acDelay(4000) - задержка в 4 секунды, за которые нужно успеть выполнить драг-н-дроп (через 4 секунды левая кнопка мыши отожмется). Меняем задержку под себя.
Примечание 2: Что касается использования. После того, как жест был инициализирован/выполнен (после того как были зажаты последовательно - ПКМ, СКМ и прокручено колесо вниз) держать кнопки нажатыми НЕ требуется, можно отпустить их все и двигать курсор мыши куда потребуется - жест все-равно будет выполнен.
3. Настраиваем глобальный скрипт (Global Lua). Добавляем внутрь функции
function sp_before_action(gnm, gsx, gsy, gex, gey, gwd, gapp, gact) следующий код:
LMBpressed = 0 Примечание. Не забываем о том, что в самом конце функции function sp_before_action должна стоять строчка со словом
end p.s. Используется утилита nircmd. К сожалению, мне не удалось добиться нормальной работы с помощью одних только встроенных функций S+. Стандартная функция S+
acMouseClick (предназначенная для имитации нажатий кнопок мыши) в данном случае вызывает нестабильную работу StrokesPlus и дает эффект "залипания" кнопок, поэтому я остановился на варианте nircmd. Можно заменить на любую другую утилиту, умеющую имитировать нажатия кнопок мыши.
Я подозреваю, что есть возможность реализации через WinAPI (функция acSendMessage), но не разобрался т.к., по всей видимости, нужно вешать хук на клики мыши (программирование). Испытывал в проводнике Windows, имитируя перетаскивание файлов с помощью жеста. В простом варианте способа через WinAPI обведение рамочкой файлов работает, а драг-н-дроп (тех же файлов) уже нет.