Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Программы » StrokesPlus и StrokesPlus.net - жесты мыши для Windows

Модерирует : gyra, Maz

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Открыть новую тему     Написать ответ в эту тему

PREVED



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
   

StrokesPlus (S+) - бесплатная программа с огромными возможностями, позволяющая управлять операционной системой и приложениями при помощи жестов мыши (включая кнопки мыши), а также горячих клавиш. Имеет гибкие настройки, поддерживает выполнение действий, основанных на скриптовом языке Lua. В отличие от аналогичной программы StrokeIt, позволяет настраивать срабатывание жестов внутри дочерних окон (в пределах одного приложения - родительского окна). При определенной настройке и после привыкания резко повышает продуктивность работы, упрощая управляемость компьютером. Имеет 64-битную версию. Среди программ подобного назначения имеет самые большие возможности.
 
Официальный сайт: http://www.strokesplus.com/
Справка (англ.): http://www.strokesplus.com/help/
Форум на официальном сайте (англ.): http://www.strokesplus.com/forum/
 
Скачать:
Версия 32-бит
Портабельная версия(ZIP): http://www.strokesplus.com/files/StrokesPlus_2.8.6.4_x86.zip
Установщик: http://www.strokesplus.com/files/StrokesPlusSetup_2.8.6.4_x86.exe
Установщик (с цифровой подписью для UAC в Windows Vista/7/8/10): http://www.strokesplus.com/files/StrokesPlusSetup_2.8.6.4_x86_Signed.exe
 
Версия 64-бит
Портабельная версия(ZIP): http://www.strokesplus.com/files/StrokesPlus_2.8.6.4_x64.zip
Установщик: http://www.strokesplus.com/files/StrokesPlusSetup_2.8.6.4_x64.exe
Установщик (с цифровой подписью для UAC в Windows Vista/7/8/10): http://www.strokesplus.com/files/StrokesPlusSetup_2.8.6.4_x64_Signed.exe
 
Русификатор: в процессе разработки (степень готовности - высокая)  
 
Важно! Решение проблем с автозапуском и ограниченной функциональностью StrokesPlus в среде Windows 8.1
Важно! Решение проблемы с некорректной работой жестов, связанных с передачей горячих клавиш в русской раскладке в среде Windows 8.1 (и выше)
 


Скриншот:




 


Готовые скрипты:
 
  • Скрипт для переключения между окнами в Windоws при зажатой клавише мыши и вращении колеса(скроллинге) - для Windows 7, Windows XP
     
  • Скрипт для разблокирования родительского окна(окна, блокированного окном дочерним) в любых приложениях - must have
     
  • Скрипт для принудительного сворачивания ЛЮБЫХ окон, в т.ч. окон, которые невозможно свернуть штатными средствами
     
  • Настройка S+ для переключения вкладок посредством скроллинга(колеса мыши) в браузере Opera 12.x(и в более ранних версиях) без появления списка вкладок.
     
  • Настройка S+ для переключения между двумя последними активными вкладками в браузере Opera 12.x(и в более ранних версиях) с помощью жеста мыши
     
  • Жесты для управления окнами и приложениями в Windows: закрыть окно, закрыть приложение(корректно), принудительно закрыть приложение(убить процесс)
     


    StrokesPlus.net - преемник для StrokesPlus. Есть портабельная версия. Требуется предустановленный VC 2015 Runtime.
    На английском. Бесплатно. https://www.strokesplus.net/

  • Всего записей: 1962 | Зарегистр. 10-03-2006 | Отправлено: 15:42 16-06-2013 | Исправлено: shadow_member, 19:32 20-01-2020
    Edmanz

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    404NF Спасибо огромное!
     
    PREVED
    Цитата:
    acShellExecute("", "taskkill.exe", "/im program.exe", "", 0)  
     (где program.exe - имя экзешника программы)  

    Прописал так закрытие четырех процессов:
     
    acShellExecute("", "taskkill.exe", "/im TheBat.exe", "", 0)
    acShellExecute("", "taskkill.exe", "/im ActualMultipleMonitorsCenter.exe", "", 0)
    acShellExecute("", "taskkill.exe", "/im googledrivesync.exe", "", 0)
    acShellExecute("", "taskkill.exe", "/im synchredible.exe", "", 0)
     
    Но срабатывает по одному. Один жест - один процесс. Причем последняя прога вообще упёртая, ни в какую не глохнет.
    Можно ли в одном жесте всю пачку процессов заказать на закрытие?

    Всего записей: 18 | Зарегистр. 26-03-2015 | Отправлено: 14:22 04-10-2015 | Исправлено: Edmanz, 14:24 04-10-2015
    404NF

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Edmanz
    У меня спокойно завершает несколько приложений подобным списком.
     
    Добавлено:
    Кстати, у меня в ходе экспериментов с поиском выделенного текста возник вопрос: почему когда используешь стандартный код из образцов с сайта S+ то переменная s может принимать любые значения, а если модифицировать код под поиск не в браузере по-умолчанию, то скрипт работает корректно только если переменной присвоить одно слово (без пробелов) и как это поправить?
    Вот два вариант кода:
    Стандартный  
    acSendKeys("{DELAY=50}^c")
    acDelay(50)
    local s = acGetClipboardText()
    s = 'https://www.google.com/search?hl=en&output=search&q='..s
    acShellExecute("open","rundll32.exe",  
                   "url.dll,FileProtocolHandler "..s, nil, 1)
    Модифицированный
    acSendKeys("{DELAY=50}^c")
    acDelay(50)
    local s = acGetClipboardText()
    s = 'https://www.google.com/search?hl=en&output=search&q='..s
    acShellExecute("open","D:\\PROG\\INET\\Palemoon portable\\Palemoon-Portable.exe",  
                   s, nil, 1)

    Всего записей: 250 | Зарегистр. 21-09-2013 | Отправлено: 20:29 04-10-2015
    404NF

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Решение подсказал Роб на форуме программы: нужно добавить команду, которая заменяет пробелы в поисковом запросе спецсимволом %20, означающим пробел в URL.
     
    acSendKeys("{DELAY=50}^c")
    acDelay(50)
    local s = acGetClipboardText()
    s = s:gsub(" ", "%%20")
    s = 'https://www.google.com/search?hl=en&output=search&q='..s
    acShellExecute("open","D:\\PROG\\INET\\Palemoon portable\\Palemoon-Portable.exe",  
                   s, nil, 1)

    Всего записей: 250 | Зарегистр. 21-09-2013 | Отправлено: 22:37 06-10-2015
    artemiantonov

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет, подскажите, возможен ли жест закрытия всех вкладок, кроме активной и закрытия вкладок справа, знаю что есть расширение для chrome, но жесты нужны для браузера edge (spartan) или ie.

    Всего записей: 2 | Зарегистр. 28-07-2015 | Отправлено: 19:31 08-12-2015
    PREVED



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    artemiantonov
     
    А в новом IE(edge) можно делать эти операции горячими клавишами? Что-то сильно сомневаюсь, сюда по примитивизму этого нового браузера от microsoft.  Если да, то элементарно - пишем в s+ жест который имитирует нажатие определенных клавиш. Даже если таких функций нет в Edge, можно написать жест который будет закрывать вкладку слева или справа (или определенное кол-во вкладок, например три штуки справа). Закрыть ВСЕ справа не получится, т.к. S+ не узнает где граница последней справки (по причине того, что в самом браузере изначально нету такой функции).

    Всего записей: 1962 | Зарегистр. 10-03-2006 | Отправлено: 16:32 09-12-2015
    Fintrum

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    PREVED
    Здравствуйте, подскажите пожалуйста, возможно ли добавить "жест" на ПКМ + СКМ, чтобы пока зажаты эти клавиши посылалась зажатая ЛКМ, при отпускании ПКМ + СКМ, отпускалась и ЛКМ? Т.е. чтобы получить функциональность зажатой левой кнопки мыши и возможность выделять текст или перемещать файлы, а не просто однократный щелчок.

    Всего записей: 216 | Зарегистр. 01-01-2015 | Отправлено: 23:18 13-12-2015
    OODASDV

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Не работает данная команда,с блокнотом пробовал всё нормально с остальными не хочет,запускает вторую копию программы постоянно и т.д.
     
    local swnd = acFindWindow("CCleaner")
    if swnd > 0 then
        acRestoreWindow(swnd)
        acActivateWindow(swnd)
    else
        acRunProgram("C:\\Users\\User\\Desktop\\CCleaner\\CCleaner.exe", "", "", 9)
    end
     
    Есть ли возможность при запуске окно программы оставалось поверх всех окон?Возможно специальная команда или скрипт,без использования стороннего ПО.

    Всего записей: 23 | Зарегистр. 10-09-2014 | Отправлено: 21:48 15-12-2015
    PREVED



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    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 обведение рамочкой файлов работает, а драг-н-дроп (тех же файлов) уже нет.

    Всего записей: 1962 | Зарегистр. 10-03-2006 | Отправлено: 19:37 16-12-2015 | Исправлено: PREVED, 19:51 16-12-2015
    PREVED



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    OODASDV

    Цитата:
    Не работает данная команда,с блокнотом пробовал всё нормально с остальными не хочет,запускает вторую копию программы постоянно и т.д.
     
    local swnd = acFindWindow("CCleaner")
    if swnd > 0 then
        acRestoreWindow(swnd)
        acActivateWindow(swnd)
    else
        acRunProgram("C:\\Users\\User\\Desktop\\CCleaner\\CCleaner.exe", "", "", 9)
    end

     
     
    В S+ есть разные варианты нахождения окон. Можно попробовать:
     
     
    По заголовку окна: acFindWindow(nil, "CCleaner")
     
    По классу окна программы: acFindWindow("ИмяКлассаОкна", nil)  
     
    Нахождение окна(окна самого верхнего уровня) программы по имени ее процесса:
    local swnd = acGetWindowFromProcessID(acGetProcessIDFromPattern("ccleaner.*"))
     
     

    Цитата:
    Есть ли возможность при запуске окно программы оставалось поверх всех окон?Возможно специальная команда или скрипт,без использования стороннего ПО.

     
    Да, для текущего (активного) окна:  
    acSetTopmost(swnd, nil, nil)
     
    где swnd - переменная, из нашего примера выше

    Всего записей: 1962 | Зарегистр. 10-03-2006 | Отправлено: 01:10 18-12-2015 | Исправлено: PREVED, 01:20 18-12-2015
    404NF

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fintrum
    Ваша задача хоть и кажется бессмысленной, но теоретически интересна. Я вчера уперся в залипание и сдался. Вариант, придуманный PREVED, это не совсем то, что просили, да и с использованием сторонних программ все можно решить куда проще. Для всякого дела нужен свой инструмент и для переназначения клавиш лучшее решение - autohotkey. Кода на три строки  
     
    RButton & MButton::click down
    RButton & MButton up::click up
    $RButton::RButton
     
    Делает ровно то, о чем просили. В скомпилированном виде этот скрипт будет меньше мегабайта, ну и в памяти пару мегабайт отъест. Зато никаких оболочек ему вообще не нужно.

    Всего записей: 250 | Зарегистр. 21-09-2013 | Отправлено: 01:15 18-12-2015
    Fintrum

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    404NF
    Спасибо, но к сожалению, вариант с AHK мне не подходит, т.к. ЛКМ уже переназначена.
     
    PREVED

    Цитата:
    Да, можно так сделать. Ниже рабочий вариант. Важное уточнение.  

    Спасибо большое, сам бы я до такого не додумался.

    Цитата:
    В S+ есть разные варианты нахождения окон. Можно попробовать:
    По заголовку окна: acFindWindow(nil, "CCleaner")
    По классу окна программы: acFindWindow("ИмяКлассаОкна", nil)  
    Нахождение окна(окна самого верхнего уровня) программы по имени ее процесса:
    local swnd = acGetWindowFromProcessID(acGetProcessIDFromPattern("ccleaner.*"))

    1) А есть ли возможность, чтобы команда acRestoreWindow только восстанавливала свернутую программу, но не "сворачивало в окно", т.е. уменьшало её размер?
     
    2) И возможно ли на один жест повесить две зацикленные команды, выполняемые по очереди? Пример:
     
    - первое выполнение жеста посылает acMoveWindow(nil, gsx, gsy, 0, 200)
    - второе выполнение жеста посылает acMoveWindow(nil, gsx, gsy, 600, 300)
    - третье выполнение жеста опять посылает acMoveWindow(nil, gsx, gsy, 0, 200)
    - четвертое выполнение жеста опять посылает acMoveWindow(nil, gsx, gsy, 600, 300)
    - и т.д.
     
    3) Можно ли сделать, чтобы поиск программы по имени ее процесса, искал несколько программ подряд? Пример:
     
    - если запущен MPC-BE, то Активируем или Разворачиваем MPC-BE
    - если  запущен foobar2000, то Активируем или Разворачиваем foobar2000
    - если не запущено никакой из перечисленных программ, то запускаем MPC-BE

    Всего записей: 216 | Зарегистр. 01-01-2015 | Отправлено: 04:22 18-12-2015 | Исправлено: Fintrum, 10:23 18-12-2015
    404NF

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Спасибо, но к сожалению, вариант с AHK мне не подходит, т.к. ЛКМ уже переназначена

    А точно не подходит? То есть вы пробовали вариант с посылкой send click? Ведь nircmd делает то же самое и система клики принимает. На первый взгляд, они должны или обе давать эффект, или обе не давать эффекта.

    Всего записей: 250 | Зарегистр. 21-09-2013 | Отправлено: 17:08 18-12-2015
    PREVED



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fintrum

    Цитата:
    Спасибо большое, сам бы я до такого не додумался.

     
    Главный недостаток этого способа в том, что дается ограниченное время на выполнение драг-н-дропа. А также есть необходимость в вызове стороннего приложения (nircmd). В принципе, в процессе я придумал лишенный этих недостатков метод реализации. Но у этого нового метода другой недостаток - для осуществления драг-н-дропа нужно нажимать левую кнопку мыши (уже в конечной точке). А затем, перед тем, как сделать любой другой жест S+, нужно будет еще раз нажать правую кнопку мыши (вручную завершить жест драг-н-дропа).
     
     
     
     

    Цитата:
    1) А есть ли возможность, чтобы команда acRestoreWindow только восстанавливала свернутую программу, но не "сворачивало в окно", т.е. уменьшало её размер?  

     
    Есть встроенные в S+ команды acGetWindowTop, acGetWindowBottom, acGetWindowLeft и acGetWindowRight. С их помощью, в действии(жесте) можно сделать проверку на "развернутость" окна. Сделать такое условие, что если окно развернуто (условие выполняется, если верхняя и левая координаты окна, полученные с помощью acGetWindowTop и acGetWindowLeft равны нулю, и в сумме дают ноль) - тогда делать предварительное сворачивание окна. Тогда окно(развернутое) не будет изменяться в размере.
     
    Примерно так (на примере с Notepad):
     
    local checkWindow1 = acGetWindowFromProcessID(acGetProcessIDFromPattern("notepad.*"))
    local topWindow1 = acGetWindowTop(checkWindow1, nil, nil)+acGetWindowLeft(checkWindow1, nil, nil)
    if topWindow1 < 1 then  
       acMinimizeWindow(checkWindow1)
       acRestoreWindow(checkWindow1)
       acActivateWindow(checkWindow1)
    else
       acRestoreWindow(checkWindow1)
       acActivateWindow(checkWindow1)
    end

     
    Где checkWindow1 - переменная, содержащая идентификатор (хэндл) окна
    topWindow1 - переменная, содержащая сумму верхней и левой координат окна. У развернутых в максимальный размер окон сумма начальных координат будет равна 0.  
     
     

    Цитата:
    2) И возможно ли на один жест повесить две зацикленные команды, выполняемые по очереди? Пример:  

     
     
    Вот, пример трех разных действий с их последовательным переключением в цикле с помощью жеста:
     
    1. Код действия(жеста):
     
    if CycleVar1==0 then
    --- действие №1
       acMessageBox(1, 1, nil)
       CycleVar1=1
    elseif CycleVar1==1 then
    --- действие №2
       acMessageBox(2, 2, nil)
       CycleVar1=2
    elseif CycleVar1==2 then
    --- действие №3
       acMessageBox(3, 3, nil)
       CycleVar1=0
    end

     
    2. В глобальном скрипте lua нужно прописать объявление новой переменной, внутри function sp_init():
     
    CycleVar1 = 0
     
    3. После написания жеста перезагрузить конфиг или сам S+.
     

    Цитата:
    3) Можно ли сделать, чтобы поиск программы по имени ее процесса, искал несколько программ подряд? Пример:  
    - если запущен MPC-BE, то Активируем или Разворачиваем MPC-BE
    - если  запущен foobar2000, то Активируем или Разворачиваем foobar2000
    - если не запущено никакой из перечисленных программ, то запускаем MPC-BE

     
     
    В примере ниже два приложения - MS Word и Notepad
     
    local checkWindow1 = acGetWindowFromProcessID(acGetProcessIDFromPattern("winword.*"))
    local checkWindow2 = acGetWindowFromProcessID(acGetProcessIDFromPattern("notepad.*"))
     
    if checkWindow1>0 then
       acRestoreWindow(checkWindow1)
       acActivateWindow(checkWindow1)
    end
    if checkWindow2>0 then
       acRestoreWindow(checkWindow2)
       acActivateWindow(checkWindow2)
    end

     
    Внутрь каждого условия можно включить еще условие - например проверку "развернутости" окна, дабы исключить нежелательное восстановление окна из развернутого состояния).

    Всего записей: 1962 | Зарегистр. 10-03-2006 | Отправлено: 02:22 19-12-2015 | Исправлено: PREVED, 03:16 19-12-2015
    Fintrum

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    404NF

    Цитата:
    А точно не подходит? То есть вы пробовали вариант с посылкой send click? Ведь nircmd делает то же самое и система клики принимает. На первый взгляд, они должны или обе давать эффект, или обе не давать эффекта.

    Тогда ещё не пробовал, но да, Вы правы, и с nircmd не работает. Значит нельзя использовать функцию кнопки, если она переназначена.
     
    PREVED

    Цитата:
    Главный недостаток этого способа в том, что дается ограниченное время на выполнение драг-н-дропа. А также есть необходимость в вызове стороннего приложения (nircmd).

    Похоже, в моём случае, не получится использовать никакой вариант, потому что переназначена сама ЛКМ.

    Цитата:
    Есть встроенные в S+ команды acGetWindowTop, acGetWindowBottom, acGetWindowLeft и acGetWindowRight. С их помощью, в действии(жесте) можно сделать проверку на "развернутость" окна. Сделать такое условие, что если окно развернуто (условие выполняется, если верхняя и левая координаты окна, полученные с помощью acGetWindowTop и acGetWindowLeft равны нулю, и в сумме дают ноль) - тогда делать предварительное сворачивание окна. Тогда окно(развернутое) не будет изменяться в размере.  

    А здесь странная ситуация, код правильно работает с Notepad++, а вот Firefox, если он не свернут, то он сворачивается и при развороте вручную имеет окошечный вид, хотя и на весь экран. Правда я совершенно не понял логики скрипта, как я думаю должно выглядеть так как указано ниже, но естественно не работает.
     
    Если окно развернуто, то просто его активировать, а если нет, то разворачивать, но в свёрнутом виде он похоже не может получить координаты и понять, что окно свернуто:

    Код:
    local checkWindow1 = acGetWindowFromProcessID(acGetProcessIDFromPattern("notepad.*"))
    local topWindow1 = acGetWindowTop(checkWindow1, nil, nil)+acGetWindowLeft(checkWindow1, nil, nil)
    if topWindow1 < 1 then
       acActivateWindow(checkWindow1)
    else
       acRestoreWindow(checkWindow1)
    end

    А за 2 и 3 задачи спасибо большое, всё отличнейше работает.

    Всего записей: 216 | Зарегистр. 01-01-2015 | Отправлено: 08:21 19-12-2015
    OODASDV

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Спасибо.

    Всего записей: 23 | Зарегистр. 10-09-2014 | Отправлено: 18:50 21-12-2015
    slava10779

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте. Подскажите пожалуйста как можно реализовать переименование файла в TotalCommander по нажатию средней кнопки мыши. Имеется ввиду только действие как при нажатии пункта переименовать из меню правой кнопки в TotalCommander. При этом средняя кнопка является Stroke Button. В программе есть Lua Script function sp_middle_mouse_up(), но как и что в нем писать я не пойму. И подходит ли он вобще для данного случая.

    Всего записей: 294 | Зарегистр. 19-11-2014 | Отправлено: 19:38 23-12-2015 | Исправлено: slava10779, 19:41 23-12-2015
    PREVED



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Fintrum

    Цитата:
    А здесь странная ситуация, код правильно работает с Notepad++, а вот Firefox, если он не свернут, то он сворачивается и при развороте вручную имеет окошечный вид, хотя и на весь экран.

     
    У Firefox очень своеобразный интерфейс, который отрисовывается собственным движком браузера.  Управлять окнами Firefox-а и ему подобных приложений с помощью S+ может быть затруднительно. Заголовка окна у FF, как такового, вообще нет (он конечно есть, но реализован по-своему), что сбивает S+ с толку.  
     
    Можно попробовать:
     
    1)Искать окно FF по заголовку:  
    local checkWindow1 = acFindWindowByTitleRegex(".* - Mozilla Firefox.*")
     
    2)Команды свернуть/развернуть отправлять в Firefox через user32.dll. Нужно экспериментировать.
     
     

    Цитата:
    Правда я совершенно не понял логики скрипта, как я думаю должно выглядеть так как указано ниже, но естественно не работает.

     
    Логика простая. Мы отслеживаем два состояния окна - 1)свернуто 2)скрыто(находится в поднятом состоянии но при этом загорожено другими окнами или окном). При этом, само окно может быть развернуто во весь экран, либо иметь любой другой (отличающийся от развернутого) размер. Скрипт отрабатывает вызов окна из любой комбинации этих состояний. Что логично, ведь нам нужно затребовать окно на передний план, независимо от его состояния и, желательно, не меняя исходный размер окна.
    Команда acMinimizeWindow в скрипте нужна для того, чтобы развернутое (но загороженное) окно сохраняло свой размер, а именно, чтобы размер не сбивался командой acRestoreWinow при его вызове на передний план.
     

    Цитата:
    Если окно развернуто, то просто его активировать, а если нет, то разворачивать, но в свёрнутом виде он похоже не может получить координаты и понять, что окно свернуто

     
    Для нормальной работы нужно сочетание acRestoreWindow и acActivateWindow.

    Всего записей: 1962 | Зарегистр. 10-03-2006 | Отправлено: 13:34 24-12-2015
    slava10779

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    PREVED

    А мне можешь чего подсказать по моему вопросу?

    Всего записей: 294 | Зарегистр. 19-11-2014 | Отправлено: 14:22 24-12-2015
    PREVED



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    slava10779

    Цитата:
    Здравствуйте. Подскажите пожалуйста как можно реализовать переименование файла в TotalCommander по нажатию средней кнопки мыши. Имеется ввиду только действие как при нажатии пункта переименовать из меню правой кнопки в TotalCommander. При этом средняя кнопка является Stroke Button.

     
    В Global Lua, вставляем нижеприведенный код во внутрь функции function sp_after_release():
     
    if acGetClassName(acGetOwnerWindowByPoint(acGetMouseLocationX(), acGetMouseLocationY())) == "TTOTAL_CMD" then  
    acMouseClick(acGetMouseLocationX(), acGetMouseLocationY(), 2, 1, 1)  
    acSendKeys("{F_2}")
    end

     
    (не забываем про еще один end в конце, закрывающий саму функцию function sp_after_release()  )
     
     
    Работает с помощью нажатия средней кнопки мыши(если средняя кнопка является кнопкой инициализирующей жесты, т.е. Stroke Button в настройках S+) в комбинации с нажатием любой другой кнопки мыши. Например Средняя кнопка(клик) + клик левой кнопкой. Другой вариант: средняя кнопка мыши + прокрутка колесом(в любую сторону). Будет работать и так и так.
    Связанно это с тем, что S+ не отрабатывает в качестве жеста одиночное нажатие Stroke Button. А вот в связке с нажатием другой кнопки - пожалуйста.
     
     
     
    Примечания:
     
    1. Обратить внимание на имя класса окна тотал коммандера: TTOTAL_CMD. В зависимости от версии Total Commander, оно может отличаться. Я проверял на версии TC 7.50a.
     
    2. Если в самом TC выставлена настройка "Открывать файл/папку одиночным кликом", то работать не будет. Так как скрипт имитирует нажатием левой кнопки мыши для выбора нужного для переименования файла.
     
    3. Можно написать и отдельные жесты (с разными действиями) для TC на каждую из комбинаций средней кнопки мыши и нажатий других кнопок мыши. Например. СКМ+прокрутка колесом вниз - удалить файл. СКМ+прокрутка колесом вверх - копировать файл. И т.п. и т.д. Порядок обычный - на каждое действие свой жест с разными модификаторами.

    Всего записей: 1962 | Зарегистр. 10-03-2006 | Отправлено: 00:34 25-12-2015 | Исправлено: PREVED, 00:39 25-12-2015
    slava10779

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Если в самом TC выставлена настройка "Открывать файл/папку одиночным кликом", то работать не будет

    Это как раз и стало причиной неудобного переименования...  Обойти нельзя? Вместо нажатия левой поставить нажатие правой например. По правой файл выделяет у меня. Или нажатие средней... И как этот скрипт к модификатору привязать? В LUA Script писать что то нужно?

    Всего записей: 294 | Зарегистр. 19-11-2014 | Отправлено: 00:46 25-12-2015 | Исправлено: slava10779, 00:55 25-12-2015
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

    Компьютерный форум Ru.Board » Компьютеры » Программы » StrokesPlus и StrokesPlus.net - жесты мыши для Windows


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru