flock() Сочетания клавиш с Caps/Num/Scroll-локами

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

Re: Сочетания клавиш с Caps/Num/Scroll-локами

Postby John Doe » Sun 12 Sep, 2010 13:29

Latest post of the previous page:

Усложнение текста статьи, неудобства в использовании...

1. Предлагаю все эти биты спрятать внутри функции.
Проще всего сделать через добавочные значения Nkey:


2. NState предлагаю сделать опциональным. По умолчанию "-1" (получить состояние клавиши).

3. "Обвязку" неплохо бы пояснить немного подробнее.
Возможно ли её убрать внутрь функции?

User avatar
John Doe
Бюрократ
Posts: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

Сочетания клавиш с Caps/Num/Scroll-локами

Postby John Doe » Tue 05 Jul, 2016 23:30

John Doe wrote:Source of the post 3. "Обвязку" неплохо бы пояснить немного подробнее.
Возможно ли её убрать внутрь функции?
А ответ на вопрос был чуть выше:
zg wrote:Source of the post макросы не работают как ожидалось. потому как при физически нажатом капслоке программно его состояние не меняется. поэтому макросы должны быть примерно такими:
[HKEY_CURRENT_USER\Software\Far\KeyMacros\Shell\CtrlCapsLock]
"Sequence"="CtrlShiftTab %a=flock(1,-1)&1; $while((flock(1,-1)&1)==%a) sleep(50) flock(1,2) $end"

Во-первых есть (и всегда была) возможность проверить удерживается ли в данный момент клавиша: bit.band(mf.flock(key),0xff80)==0xff80
Во-вторых, изменение состояния можно произвести в отдельном потоке, не задерживая макрос (far.Timer)
Или (ещё лучше) отложить это изменение до тех пор, пока из буфера не будут прочитаны события отпускания соответствующих клавиш.
Такое сейчас можно организовать и макросом (Event { group="ConsoleInput";[...]), но будет сильно удобнее, если эта кухня будет скрыта в фаре, или в самом плагине luamacro.

User avatar
John Doe
Бюрократ
Posts: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

Сочетания клавиш с Caps/Num/Scroll-локами

Postby John Doe » Wed 06 Jul, 2016 15:29

Хотя.. судя по всему есть более простой способ: просто предварительно поместить в буфер событие отпускания.
Т.е. тут будет вот так просто:

Code: Select all

         keybd_event(vkKey, 0, ExKey | KEYEVENTF_KEYUP, 0);
         keybd_event(vkKey, 0, ExKey, 0);
         keybd_event(vkKey, 0, ExKey | KEYEVENTF_KEYUP, 0);
         

Грязный хак, но ничем не хуже чем было.


Return to “Обсуждение макросов”

Who is online

Users browsing this forum: No registered users and 1 guest