Ru-Board.club
← Вернуться в раздел «Программы»

» StrokesPlus - жесты мыши для Windows

Автор: shadow_member
Дата сообщения: 20.02.2015 08:47
PREVED
Точно, этот глобальный жест нормально крутит в ТС и в Firefox.
Автор: slava10779
Дата сообщения: 20.02.2015 11:12
Я же писал, что в глобальных все и так работает. Вобщем, решил проблему. Нашел ответ в теме. Нужно создать задачу с ПОВЫШЕННЫМИ привилегиями в Планировщике. Не мешало бы в шапке это разместить. Теперь другое. При переносе курсора в другую панель Total commander, жесты почему то работают с первой панелью, пока не щелкнешь мышью. Но ведь стандартная прокрутка колесом работает и без щелчка. Как добавить в данном случае фокус окна под курсором. Пробовал добавить щелчек в код, тогда когда окно в фокусе, начинает открывать архивы и запускать файлы. В Total Commander настроено открывать по одному щелчку.
Автор: PREVED
Дата сообщения: 20.02.2015 12:59
shadow_member

Цитата:
Точно, этот глобальный жест нормально крутит в ТС и в Firefox.


Жест прописанный только для TC (НЕ глобальный) у меня тоже работает.

В параметрах для обнаружения окна TC (в S+) задано:
Owner Class Name: TTOTAL_CMD
Parent Class Name: TTOTAL_CMD
File name: TOTALCMD.EXE

p.s. Но у меня меня Win7 и отключен UAC(контроль учетных записей), наверное в этом дело.

Добавлено:
slava10779

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


Тремя постами выше мой скрипт.
В нем строчка acActivateWindow(acGetWindowByPoint(acGetMouseLocationX(), acGetMouseLocationY()),0,0) как раз призвана активировать нужную панель под курсором (без имитации клика).
Автор: slava10779
Дата сообщения: 20.02.2015 13:42
Эта строчка активирует окно, а не панель. А окно у нас Total Commander полностью. О том что решил проблему с отдельными окнами я выше написал, осталось решить проблему с панелями. У меня Windows 8.1 x64, UAC отключен.
Автор: PREVED
Дата сообщения: 20.02.2015 13:59
slava10779
Панели в TC являются дочерними окнами основного окна приложения. Можете поставить бесплатную утилиту InqSoft Window Scanner и убедится в этом сами. У окон панелей даже класс свой отдельный - TMyListBox ( в версии TC 7.50, по-крайней мере).
Команда acGetWindowByPoint - активирует именно дочернее окно под курсором (а не главное родительское), например панель (либо другой элемент интерфейса, смотря где жест делать).


Автор: slava10779
Дата сообщения: 20.02.2015 14:05
Блин, заработало!!!! Присмотрелся и увидел что ваш код от моего отличается. У меня acActivateOwnerWindow было. Вот это Owner и попутало все карты. На вид коды похожи. Огромное спасибо за помощь!

Добавлено:
Ну и последнее на сегодня...
acMouseMove(gex, gey) -- Возвращаем указатель мыши на место начала жеста. А как написать чтобы курсор остался в конце жеста а лучше вобще на месте?
Автор: PREVED
Дата сообщения: 20.02.2015 14:48
Вот и разобрались.


На будущее:

1.
acActivateWindow(acGetWindowByPoint(acGetMouseLocationX(), acGetMouseLocationY()),0,0)

Активирует дочернее окно программы под курсором. Зависит от строения интерфейса программы. Окном может быть и отдельное текстовое поле, и заголовок (внутри главного окна) и т.п.

2.
acActivateWindow(acGetParentWindowByPoint(acGetMouseLocationX(), acGetMouseLocationY()),0,0)

Активирует родительское окно, но не главное, а только то, которому принадлежит элемент(окно-дочка) под курсором. Например, есть текстовое поле входящее в состав панели(секции настроек, к примеру). Данная команда, выполненная над текстовым полем, активирует панель.

3.
acActivateWindow(acGetOwnerWindowByPoint(acGetMouseLocationX(), acGetMouseLocationY()),0,0)

Активирует главное окно приложения (родительское окно самого верхнего уровня).

Автор: PREVED
Дата сообщения: 21.02.2015 17:10
Всем
Возращаясь к старому вопросу от beome (за апрель 14 года)

Цитата:
Здравствуйте, подскажите пожалуйста, можно ли в определенном приложении полностью отключать некоторые жесты, чтобы они даже не рисовались. Задача - сохранить работу Firegestures в Firefox без задержек, но добавить дополнительные жесты, которые Firegestures не отрабатывает, например косые вниз/вверх.


Выяснилось, что данная возможность предусмотрена в S+ начиная с версии 2.8.1.0.

На вкладке Configure Actions cоздаем отдельное приложение (Add App). Задаем в свойствах Firefox.exe.
Создаем в нем новое действие(Action) или, иначе говоря новый жест .

Исходим из того, что этот жест у нас должен выполнять сам Firefox (расширением Firegestures или др. подобным). Значит нам нужно сделать так, чтобы S+ пропускал распознавание этого жеста над окном Firefox и давал его выполнить самому браузеру.

Для этого задаем в качестве скрипта (Lua Script):
acRelayGesture()

Теперь S+ будет "пропускать" данный жест в Firefox (давая его выполнить самому браузеру), даже несмотря на возможное наличие аналогичного жеста в S+, действующего глобально для всех программ. Таким образом, S+ может дополнять встроенные в браузер жесты.




slava10779

Цитата:
Ну и последнее на сегодня...
acMouseMove(gex, gey) -- Возвращаем указатель мыши на место начала жеста. А как написать чтобы курсор остался в конце жеста а лучше вобще на месте?


- Может я чего-то не понимаю, но курсор и так остается в конце жеста после его выполнения.

- Чтобы курсор не дергался, единственный вариант - использовать жест без отрисовки фигуры. Например: Кнопка Активации Strokes Plus + Средняя Кнопка мыши + Колесо прокрутки вниз

Как это выглядит эта настройка:

Автор: slava10779
Дата сообщения: 21.02.2015 17:22
Это из другой оперы уже вопрос был. Там просто клик нужен был и я не знал как его сделать под текущим положением курсора, а не по координатам. С этим проехали. СВЕЖИЙ ВОПРОС. Как сделать чтобы действие выполнялось с файлом с которого начинается жест, а не на котором заканчивается? Это в Total Commander.
Автор: Fintrum
Дата сообщения: 21.02.2015 18:10

Цитата:
или Ctrl+Mouse Wheel Up\Down?

Спасибо большое.

Цитата:
Возращаясь к старому вопросу от beome (за апрель 14 года)

Спасибо большое, но работает через раз, а у Вас? Остается виден сам синий жест? Это было бы идеально, ведь Firegestures закрывает Flash без проблем и моментально.
Автор: PREVED
Дата сообщения: 21.02.2015 20:00
slava10779

Цитата:
СВЕЖИЙ ВОПРОС. Как сделать чтобы действие выполнялось с файлом с которого начинается жест, а не на котором заканчивается? Это в Total Commander.


Добавить действие в скрипт после выполнения действия. Чтобы работало, придется имитировать клик по начальным координатам для выбора файла(См. настройки TC - включенная опция открытия файлов и папок одиночным кликом исключается. Возможно можно обойти через acPostMessage, но не факт).


Вот пример жеста для Total Commander. Работает над любой панелью(включая неактивную). Жест вызывает свойства файла, над которым начинался выполняться жест независимо от положения курсора самого TC и от сложности начертания самого жеста.


1. Добавить жест для Приложения Total Commander. Скрипт:

Код: TCProperties = 1
Автор: shadow_member
Дата сообщения: 21.02.2015 20:11
Кажется, уловил причину глюков StrokesPlus на Win81, обычно это происходит на жестах, использующих буквенные горячие клавиши, например, Ctrl + W и т.п. Достаточно выбрать Rus язык ввода, как такие жесты перестают работать, хотя S+ по-прежнему активен, другие жесты работают. При возврате на Eng все жесты снова работают.
Часто, но точной закономерности не уловил, при выборе Rus происходит и деактивация S+.
StrokesPlus в этой же конфигурации на Win7 такого бага не преподносит, т.к. на Win7 четко работает механизм автоматического переключения языка ввода в зависимости от текущего приложения. А вот на Win81 этой четкости добиться не могу.
Добавлено:
Или научить S+ переходить на Eng при выполнении жестов, или уходить от горячих клавиш с буквами. Вот чудо-программа.
Автор: Fintrum
Дата сообщения: 21.02.2015 20:20
shadow_member
Установите галочку в Панель управления\Язык\Дополнительные параметры\Переключение методов ввода\Позволить выбирать метода ввода для каждого приложения.
Автор: shadow_member
Дата сообщения: 21.02.2015 20:27
Fintrum
Такой баг (если это баг) я замечаю с момента установки Win81, поэтому все эти настройки прошел не раз- не помогает. На Win7 это работает отлично.
Ad:
Да, и английский стоит первым.
Автор: Fintrum
Дата сообщения: 21.02.2015 20:46
shadow_member
Это известная проблема, и она присутствует во многих программах, связанных с сочетаниями клавиш, нужно выставлять английский первым языком, чтобы её минимизировать.

Еще есть способ использовать вместо буквенных сочетаний виртуальные коды команд.
https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
Автор: PREVED
Дата сообщения: 21.02.2015 21:05
shadow_member

А если отправлять горячую клавишу минуя раскладку?
acSendKeys("^{VKEY 87}")
(передает Ctrl+W)

Список виртуальных кодов (для того чтобы работало в S+, код нужно перевести из шестнадцатеричного счисления в десятичное): https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731(v=vs.85).aspx
Автор: Fintrum
Дата сообщения: 21.02.2015 21:32
PREVED
Похоже это не решение, отправляет Ctrl+Ц, но вот что странно, во многих программах нет этой проблемы, например, в Firefox или Notepad++, а в Paint.NET есть. Но что еще более странно, в других программах, связанных с сочетаниями клавиш, проблема в Firefox и Notepad++ есть, т.е. нельзя сказать, что эти приложения поддерживают сочетания на всех языках.
Автор: slava10779
Дата сообщения: 21.02.2015 21:43
PREVED, если не сложно напиши код полностью, я скопирую. Я ума не приложу как его вставить в функцию function sp_after_action.
Автор: PREVED
Дата сообщения: 21.02.2015 23:01
shadow_member

Цитата:
Часто, но точной закономерности не уловил, при выборе Rus происходит и деактивация S+.


В настройках S+ параметр "Ignore Key" лучше сменить, чтобы он не пересекался с любой из клавиш, которые используются в комбинации для переключения раскладки. Возможно, проблема уйдет.


Цитата:
Или научить S+ переходить на Eng при выполнении жестов, или уходить от горячих клавиш с буквами. Вот чудо-программа.


Да, можно научить S+ принудительно включать английскую раскладку перед выполнением действия (любого жеста). Код я подсмотрел на официальном форуме (хвала Робу Ларкину) и немного модифицировал под русский язык и нашу задачу. Протестировал на Notepad и Firefox под Windows 7 - работает. Просьба потестировать в Windows 8.1 !


1. Добавляем код в скрипт Global Lua, а именно во внутрь функции function sp_before_action(gnm, gsx, gsy, gex, gey, gwd, gapp, gact) вставляем:

Код: aliencore = alien.core
user32 = aliencore.load("user32.dll")
gGetKeyboardLayout = user32.GetKeyboardLayout
gGetKeyboardLayout:types{ ret = 'long', abi = 'stdcall', 'long'}
function aGetKeyboardLayout(threadID)
    return gGetKeyboardLayout(threadID)
end
gGetWindowThreadProcessId = user32.GetWindowThreadProcessId
gGetWindowThreadProcessId:types{ ret = 'long', abi = 'stdcall', 'long', 'pointer'}
function aGetWindowThreadProcessId(hwnd)
    local threadID = 0
    threadID = gGetWindowThreadProcessId(hwnd, threadID)
    return threadID
end
Автор: Fintrum
Дата сообщения: 21.02.2015 23:27
PREVED
Ого, спасибо большое, на 8.1 работает отлично, еще один твик в копилку.
Автор: PREVED
Дата сообщения: 21.02.2015 23:32




slava10779

1. Вот так должна выглядеть функция function sp_after_action на вкладке Global Lua:




2. Чтобы работало обязательно включаем в Preferences настройку Allow After Action Script.
Автор: Fintrum
Дата сообщения: 21.02.2015 23:36
PREVED
А что насчет acRelayGesture()? У Вас Firegestures жест срабатывает моментально и стабильно?
Автор: PREVED
Дата сообщения: 22.02.2015 00:35
Fintrum

Цитата:
А что насчет acRelayGesture()? У Вас Firegestures жест срабатывает моментально и стабильно?


К сожалению, срабатывает не всегда. Возможно есть какой-то разлад между настройками чувствительности жестов в S+ и в браузере. А может просто функция в программе не доработанная... Проверял на простом жесте "Вниз-Вправо" в Firefox и Opera 12 - стабильного срабатывания (чтобы всегда работало) нет.


Есть альтернативный вариант - имитация физического выполнения жеста средствами S+. Как следствие, даже несмотря на то, что жест рисуется S+, он выполняется все-таки в браузере (самим браузером).

Вот пример простого жеста на действие Закрыть вкладку (Вниз-Вправо).


Код: acConsumePhysicalInput(1)
acMouseMove(gsx, gsy) --двигаем в курсор в начало выполненного жеста S+
acDelay(50)
acMouseClick(gsx,gsy,0,1,0) --зажимаем правую кнопку мыши
acDelay(100)
acMouseMove(gsx, gsy+300) --рисуем 300 пикселей вертикально вниз
acDelay(100)
acMouseMove(gsx+300, acGetMouseLocationY()) --рисуем 300 пикселей вправо
acDelay(5)
acMouseClick(acGetMouseLocationX(), acGetMouseLocationY(), 0,0,1) --отпускаем правую кнопку мыши
acDelay(5)
acMouseMove(gex,gey) --двигаем курсор в конец жеста S+ (поведение как у родных жестов в браузере)
acDelay(50)
acConsumePhysicalInput(0)
Автор: Fintrum
Дата сообщения: 22.02.2015 00:54
PREVED

Цитата:
К сожалению, срабатывает не всегда.

Ясно, жаль, а Вы не писали автору реквесты? И насчёт проблемы с неанглийской раскладкой?


Цитата:
Есть альтернативный вариант

А вот это интересно и работает, спасибо.
Автор: PREVED
Дата сообщения: 22.02.2015 01:04
Fintrum

Цитата:
Ясно, жаль, а Вы не писали автору реквесты? И насчёт проблемы с неанглийской раскладкой?


К сожалению, автор забросил программу примерно год назад (по личным причинам). О чем официально уведомил и выложил исходный код.


Цитата:
А вот это интересно и работает, спасибо.



Значит все-таки в расширении дело.
Автор: Fintrum
Дата сообщения: 22.02.2015 01:24
PREVED
Вот это новость, спасибо, не знал. Хорошо, что последняя версия стабильная, я еще читал на его форуме, что автор собирал идеи для 3 версии и думал он так долго готовит нечто большое.
Автор: slava10779
Дата сообщения: 22.02.2015 08:11
PREVED, вот моя очередность действий:
1. Настройку Allow After Action Script включил.
2. ДОБАВЛЯЮ ДЕЙСТВИЕ ДЛЯ Total Commander
3. в поле Lua скрипта пишу:
function sp_after_action(gnm, gsx, gsy, gex, gey, gwd, gapp, gact)
if TCProperties == 1 then
acMouseClick(gsx, gsy, 2, 1, 1)
acSendKeys("%{ENTER}")
TCProperties = 0
end
end
РЕЗУЛЬТАТ-НЕ работает, никаких действий вобще нет.
Автор: Fintrum
Дата сообщения: 22.02.2015 08:30
slava10779
А Вы точно добавляете скрипт в Global Lua вкладку, а не в обычное Lua Script поле жеста? В обычное нужно добавить только "TCProperties = 1".
Автор: slava10779
Дата сообщения: 22.02.2015 08:38
Fintrum, уже сделал как вы написали... Теперь работает. Я просто не понял куда что писать. Спасибо за помощь. А записанное в скрипт TCProperties - это произвольная переменная, которая должна совпадать с записанной в глобальном скрипте или она откуда то берется?
Автор: PREVED
Дата сообщения: 22.02.2015 10:58
slava10779

Цитата:
А записанное в скрипт TCProperties - это произвольная переменная, которая должна совпадать с записанной в глобальном скрипте или она откуда то берется?


TCProperties - пользовательская переменная, поэтому название любое. Главное чтобы название переменной совпадало в Глобальном LUA и в жесте.
Внутрь функции function sp_after_action... по аналогии вы можете добавлять несколько условий if, т.е. несколько жестов срабатывающих над файлами в TC (с разными действиями).

Страницы: 123456789

Предыдущая тема: Программа для скрытого захвата звука с микрофона


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.