Page 1 of 1

Назначать макросы на Win

Posted: Sun 03 Jul, 2016 21:14
by John Doe
Не хватает возможности назначать макросы на клавиши Win|RWin (особенно в сочетаниях с модификаторами CAS).
Очевидно что фар распознаёт эти нажатия: lua:=mf.waitkey(), а раз так, то вероятно несложно разрешить и назначать на них макросы.

Или есть какие-то подводные камни?

Разрешить макросы на Win

Posted: Sun 03 Jul, 2016 21:22
by Shmuel
Да вроде такая возможность есть, и даже работает. С модификаторами. А вот без модификаторов макрос срабатывает, но ключ и системой обрабатывается, что уже нежелательно.

Разрешить макросы на Win

Posted: Sun 03 Jul, 2016 21:30
by John Doe
Shmuel wrote: и даже работает
Я правильно понимаю, что вот это должно работать:

Code: Select all

Macro{
  area="Common";
  key="CtrlWin";
  action=function() far.Message"CtrlWin" end;
}
Потому что у меня не работает.
Shmuel wrote: без модификаторов макрос срабатывает, но ключ и системой обрабатывается, что уже нежелательно.
В общем случае нежелательно, но для моих целей это значения не имеет (а мне надо и Win в чистом виде).

Разрешить макросы на Win

Posted: Sun 03 Jul, 2016 21:33
by Shmuel
John Doe wrote: Потому что у меня не работает
Надо указывать CtrlLWin.

Разрешить макросы на Win

Posted: Sun 03 Jul, 2016 21:50
by John Doe
Действительно, спасибо!

Назначать макросы на Win

Posted: Mon 04 Jul, 2016 05:52
by sToLp
Уважаемые John Doe и Shmuel!

Но ведь эдак Win используется как рядовая клавиша, а она явно напрашивается на роль клавиши-модификатора. Памятуя, например, нередко употребимое в системе WinR и др.

Назначать макросы на Win

Posted: Mon 04 Jul, 2016 06:30
by Shmuel
sToLp wrote: Но ведь эдак Win используется как рядовая клавиша, а она явно напрашивается на роль клавиши-модификатора.
Да, модификатором было бы лучше, т.к. сразу бы добавилась целая куча доступных сочетаний.

Назначать макросы на Win

Posted: Mon 04 Jul, 2016 08:30
by John Doe
sToLp wrote: она явно напрашивается на роль клавиши-модификатора
(продолжение в теме http://forum.farmanager.com/viewtopic.php?f=15&t=10366)

Update
Та же техника позволяет различать правый и левый Shift

Code: Select all

local function Down(key) 
  local vk = type(key)=="number" and key or far.NameToInputRecord(key).VirtualKeyCode
  return function() return win.GetKeyState(vk) end
end

local LSHIFT  = 0x000000a0
local RSHIFT  = 0x000000a1

Macro { description="CtrlLShiftA";
  area="Common"; key="CtrlShiftA";
  condition=Down(LSHIFT);
  action=function()
    far.Message"LShift"
  end
}

Macro { description="CtrlRShiftA";
  area="Common"; key="CtrlShiftA";
  condition=Down(RSHIFT);
  action=function()
    far.Message"RShift"
  end
}

Macro {
  area="Common"; key="Z";
  condition=Down"LWin";
  action=function()
    far.Message"Win+Z"
  end
}