Poll

[Новый опрос] Вам нужен скрипт, возвращающий коды набранных клавиш/комбинаций?

Да, буду запускать его, чтобы ускорить вставку новых хоткеев
0 (0%)
Да, нужен, но удобнее было бы иметь встроенное распознавание кодов в кликере
1 (25%)
Нет, я не использую хоткеи в своих скриптах
0 (0%)
Нет, мне это не интересно в принципе
0 (0%)
Нет, я вставляю хоткеи в скрипт через встроенный редактор
0 (0%)
Нет, я смотрю коды кнопок в туторе Кликерманна
2 (50%)
Нет, я пишу коды по памяти
0 (0%)
Нет, но средство автозаполнения/ автонабора помогает набирать мне эти коды/ команды в моём текстовом редакторе
0 (0%)
Нет, я не знаю, зачем мне это нужно/ как этим пользоваться
0 (0%)
У меня свой вариант ответ, про который я напишу ниже
0 (0%)
Мне лень читать все варианты и голосовать :)
1 (25%)
Не нужен, я узнаю коды из data\const.txt
0 (0%)

Total Members Voted: 4

Author Topic: Хоткеи к Кликерманну, не происходят клики [ГОЛОСОВАНИЕ]  (Read 5978 times)

0 Members and 1 Guest are viewing this topic.

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Запустил вот две копии Кликерманна и с целью чуть-чуть автоматизировать работу в одном из них, запустил на другом скрипт, который должен был бы реагировать на определённые комбинации клавиш и при этом соответственно жать кнопки в первом экземпляре кликера, но вот пока что клики почему-то не происходят, не смотря на то, что не используется никакой режим привязки. Вот мой код скрипта, который должен совершать нажатия кнопок в Кликерманне:

Code: [Select]
#name "wrng"
logclear
$clform=INPUTBOX("Input script's name plz: ", "Script", 60) // предлагаем ввести имя скрипта, открытого в другом окне
$fullform=strconcat("Clickermann - ",$clform)
$hdl = wndfind($fullform)
if ($hdl = 0)
halt
end_if
WNDGETINFO ($hdl, $vr1, $vr2, $vr3, $vr4)
print($vr1,", ",$vr2)

while (1=1)
if (iskeydown(#ctrl)=1)

getkeysdown($ctl)

SWITCH($ctl)
CASE(#c)//copy hwnd
keydown(#shift)
keypress(#end)
keyup(#shift)
keydown(#ctrl)
keypress(#insert)
keyup(#ctrl)
CASE(#e)//Editor
lclick($vr1+30,$vr2+90)
CASE(#h)//help
lclick($vr1+270,$vr2+40)
CASE(#l)//log
lclick($vr1+160,$vr2+40)
CASE(#m)//mgr
lclick($vr1+180,$vr2+40)
CASE(#n)//New
lclick($vr1+30,$vr2+40)
CASE(#o)//open
lclick($vr1+60,$vr2+40)
CASE(#p)//(re)oPen last doc
lclick($vr1+70,$vr2+40)
waitms(300)
lclick($vr1+70,$vr2+60)
CASE(#r)//regime
lclick($vr1+130,$vr2+40)
CASE(#s)//setz
lclick($vr1+210,$vr2+40)
CASE(#t)//onTop
lclick($vr1+240,$vr2+40)
CASE(#u)//open recently-Used list
lclick($vr1+70,$vr2+40)
CASE(#w)// wait before start
lclick($vr1+100,$vr2+40)
END_SWITCH

waitms(2000)

END_IF
waitms(20)

end_cyc

halt

Я что-то упускаю? и почему не происходят клики, если даже я уже вижу, что кликер всё-таки нашёл нужное окно кликера, выдав верно его координаты?
PS. Win10 ltsb x64
« Last Edit: August 14, 2017, 09:29:54 PM by Cleoss »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Потому что ты нажимаешь комбинацию клавиш.
сначала у тебя идет условие if (iskeydown(#ctrl)=1)
значит и getkeysdown возвращает в первой ячейке код контрола, а уже во второй код второй зажатой клавиши.
Quote
Нажатые клавиши помещаются в массив по порядку, согласно их кодам (см. Приложение 1)

Code: (clickermann) [Select]
#name "wrng"
logclear
$clform=INPUTBOX("Input script's name plz: ", "Script", 60) // предлагаем ввести имя скрипта, открытого в другом окне
$fullform=strconcat("Clickermann - ",$clform)
$hdl = wndfind($fullform)
if ($hdl = 0)
   halt
end_if
WNDGETINFO ($hdl, $vr1, $vr2, $vr3, $vr4)
print($vr1,", ",$vr2)

while (1)
   getkeysdown($keys)
   IF(ARRSIZE($keys) = 2) // если зажаты 2е клавиши
      IF($keys[0] = #CTRL) // и если первая CTRL
         SWITCH($keys[1]) // и если вторая одна из заданных
         CASE(#c)//copy hwnd
            keydown(#shift)
            keypress(#end)
            keyup(#shift)
            keydown(#ctrl)
            keypress(#insert)
            keyup(#ctrl)
         CASE(#e)//Editor
            lclick($vr1+30,$vr2+90)
         CASE(#h)//help
            lclick($vr1+270,$vr2+40)
         CASE(#l)//log
            lclick($vr1+160,$vr2+40)
         CASE(#m)//mgr
            lclick($vr1+180,$vr2+40)
         CASE(#n)//New
            lclick($vr1+30,$vr2+40)
         CASE(#o)//open
            lclick($vr1+60,$vr2+40)
         CASE(#p)//(re)oPen last doc
            lclick($vr1+70,$vr2+40)
            waitms(300)
            lclick($vr1+70,$vr2+60)
         CASE(#r)//regime
            lclick($vr1+130,$vr2+40)
         CASE(#s)//setz
            lclick($vr1+210,$vr2+40)
         CASE(#t)//onTop
            lclick($vr1+240,$vr2+40)
         CASE(#u)//open recently-Used list
            lclick($vr1+70,$vr2+40)
         CASE(#w)// wait before start
            lclick($vr1+100,$vr2+40)
         END_SWITCH
         
         waitms(2000)
      END_IF
   END_IF   
   waitms(20)     
end_cyc

halt

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Спасиб, Андрей! А то мне всё было как-то не понятно до конца, как это загадочный getkeysdown работает. Посморел я пример из тутора, показалось типа всё норм там работает и вроде как мне и надо, скопировал сюда в скрипт, и оказалось, что не учёл этот ARRSIZE($keys) = 2. Получается, в него при комбинации все нажатые клавиши записываются. А когда они тогда очищаются и перезаписываются новыми кодами? Как бы сам напрашивается ответ, что как раз во время нажатия этих новых клавиш)

Но раз они помещаются по очереди в массив, тогда наверно будут определённые сложности при обработке 3+-клавишных комбинаций, так как в них модификаторы можно нажать в разном порядке: ctrl-alt-shift-key, alt-ctrl-shift-key, ctrl-shift-alt-key etc. Или там тоже есть простое решение?
« Last Edit: August 09, 2017, 08:50:53 PM by Cleoss »

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Блиин, я невезучий, опять у меня клики не робят, но мысль понята, щас попробую организовать вывод в лог всего массива, чтоб видеть, почему там не то принимается из массива и следовательно не жмётся хоткей.

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Нажатые клавиши помещаются в массив по порядку, согласно их кодам (см. Приложение 1 в справке)
То есть сначала будет Shift 16 потом Ctrl 17 потом Alt 18

В твоем случаи проще писать комбинированные условия с функцией ISKEYDOWN
Code: (clickermann) [Select]
IF((ISKEYDOWN(#CTRL)=1)&(ISKEYDOWN(#SHIFT)=1)&(ISKEYDOWN(#ALT)=1)&(ISKEYDOWN(#C)=1)) // Ctrl + Shift + Alt + C

END_IF

IF((ISKEYDOWN(#CTRL)=1)&(ISKEYDOWN(#B)=1)) // Ctrl + B

END_IF

WAITMS(20)

« Last Edit: August 09, 2017, 09:04:47 PM by Oraven »

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Сначала хотел вывести количество элементов массива и их содержимое так:

Code: (clickermann) [Select]
   $hotcomb=ARRSIZE($keys)
   print($hotcomb, ", 1=", $keys[0], ", 2=", $keys[1], ", 3=", $keys[2])

Но как всегда чтот пошло не так с интерпретатором))

Потом решил сшить все элементы вместе в одну строку и вышло такэ:

Code: [Select]
#name "wrng"
logclear
$clform=INPUTBOX("Input script's name plz: ", "Script", 60) // предлагаем ввести имя скрипта, открытого в другом окне
$fullform=strconcat("Clickermann - ",$clform)
$hdl = wndfind($fullform)
if ($hdl = 0)
   halt
end_if
WNDGETINFO ($hdl, $vr1, $vr2, $vr3, $vr4)
print($vr1,", ",$vr2)
 
while (1)
   getkeysdown($keys)
   $hotcomb=ARRSIZE($keys)
/   print($hotcomb, ", 1=", $keys[0], ", 2=", $keys[1], ", 3=", $keys[2])
   for ($i, $i < ($hotcomb+0))
    define($arrels="")
    $arrels=strconcat($arrels,", ",$keys[$i])
   end_cyc
   print($hotcomb,", ",$arrels)
   IF(ARRSIZE($keys) = 2) // если зажаты 2е клавиши
      IF($keys[0] = #CTRL) // и если первая CTRL
         SWITCH($keys[1]) // и если вторая одна из заданных
         CASE(#c)//copy hwnd
            keydown(#shift)
            keypress(#end)
            keyup(#shift)
            keydown(#ctrl)
            keypress(#insert)
            keyup(#ctrl)
         CASE(#e)//Editor
            lclick($vr1+30,$vr2+90)
         CASE(#h)//help
            lclick($vr1+270,$vr2+40)
         CASE(#l)//log
            lclick($vr1+160,$vr2+40)
         CASE(#m)//mgr
            lclick($vr1+180,$vr2+40)
         CASE(#n)//New
            lclick($vr1+30,$vr2+40)
         CASE(#o)//open
            lclick($vr1+60,$vr2+40)
         CASE(#p)//(re)oPen last doc
            lclick($vr1+70,$vr2+40)
            waitms(300)
            lclick($vr1+70,$vr2+60)
         CASE(#r)//regime
            lclick($vr1+130,$vr2+40)
         CASE(#s)//setz
            lclick($vr1+210,$vr2+40)
         CASE(#t)//onTop
            lclick($vr1+240,$vr2+40)
         CASE(#u)//open recently-Used list
            lclick($vr1+70,$vr2+40)
         CASE(#w)// wait before start
            lclick($vr1+100,$vr2+40)
         END_SWITCH
 
         waitms(2000)
      END_IF
   END_IF   
   waitms(200)     
end_cyc
 
halt

Но как оказалось в логе после выполнения этого кода, при нажатии любого одного модификатора в массив попадал ещё какой-то код (т. е. при нажатии одной из ктрл/альт/шифт создавался сразу массив из двух элементов, а не из одного). Но видимо и тут я наконкатенировал элементы массива не совсем верно, поскольку при нажатии одного модификатора сведения о нажатии другого уже не дополнялись и не обновлялись.

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Нажатые клавиши помещаются в массив по порядку, согласно их кодам (см. Приложение 1 в справке)
То есть сначала будет Shift 16 потом Ctrl 17 потом Alt 18

В твоем случаи проще писать комбинированные условия с функцией ISKEYDOWN
Code: (clickermann) [Select]
IF((ISKEYDOWN(#CTRL)=1)&(ISKEYDOWN(#B)=1)) // Ctrl + B

Спасиб, щас так и попробую: нафигачить ваще отдельный иф под каждый (сурово))) хоткей и чтоб без делеев)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Зачем же отдельный под каждый. Сгруппируй их. Вложи один в другой
Code: (clickermann) [Select]
// отдельные клавиши
IF(ISKEYDOWN(#A) = 1) // A
   
END_IF
IF(ISKEYDOWN(#B) = 1) // B
   
END_IF

IF(ISKEYDOWN(#CTRL) = 1) // Ctrl
    IF(ISKEYDOWN(#A) = 1) // Ctrl + A
       
    END_IF
    IF(ISKEYDOWN(#B) = 1) // Ctrl + B
       
    END_IF
   
    IF(ISKEYDOWN(#SHIFT) = 1) // +SHIFT
        IF(ISKEYDOWN(#A) = 1) // Ctrl + SHIFT + A
           
        END_IF
        IF(ISKEYDOWN(#B) = 1) // Ctrl + SHIFT + B
           
        END_IF
    END_IF
END_IF
и т.д.


Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Зачем же отдельный под каждый. Сгруппируй их. Вложи один в другой

Сейчас тестирую этот код с небольшими допилами:
Code: (clickermann) [Select]
//logclear
// отдельные клавиши
IF(ISKEYDOWN(#A) = 1) // A
print("Кнопка A нажата.")
waitms(500)
END_IF
IF(ISKEYDOWN(#B) = 1) // B
print("Кнопка B нажата.")
waitms(500)
END_IF
 
IF(ISKEYDOWN(#CTRL) = 1) // Ctrl
    IF(ISKEYDOWN(#A) = 1) // Ctrl + A
print("Ctrl-A")
waitms(500)
    END_IF
    IF(ISKEYDOWN(#B) = 1) // Ctrl + B
print("Ctrl-B")
waitms(500)
    END_IF
 
    IF(ISKEYDOWN(#SHIFT) = 1) // +SHIFT
        IF(ISKEYDOWN(#A) = 1) // Ctrl + SHIFT + A
print("Ctrl-Shift-A")
waitms(500)
        END_IF
        IF(ISKEYDOWN(#B) = 1) // Ctrl + SHIFT + B
print("Ctrl-Shift-B")
waitms(500)
        END_IF
    END_IF
END_IF
waitms(1)
При этом зажал Ктрл и жму Б, а в результате в логе попеременно выводятся то Б, то Ктрл-Б, хотя я Ктрл не отпускаю и по идее сообщение "Кнопка B нажата" не должно выскакивать:
Code: [Select]
14:44:52 Ctrl-B
14:44:54 Кнопка B нажата.
14:44:54 Ctrl-B
14:44:55 Ctrl-B
14:44:59 Ctrl-B
14:45:00 Ctrl-B
14:45:01 Ctrl-B
14:45:01 Кнопка B нажата.
14:45:03 Кнопка B нажата.
14:45:04 Кнопка B нажата.
14:45:04 Ctrl-B
14:45:05 Ctrl-B
14:45:06 Кнопка B нажата.
14:45:11 Кнопка B нажата.
14:45:11 Ctrl-B

К тому же, ожидаю, при таком способе группировки будут слишком большие и дублирующиеся деревья в случае использования 2+ модификаторов. Но щас посижу потестю, если заведётся, то попробую на основе этого кода запилить слушалку клавиш и их комбинаций.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Ну да, ну да, отдельные нужно проверять на незажатые доп клавиши.
Code: (clickermann) [Select]
//logclear

IF(ISKEYDOWN(#CTRL) = 1) // Ctrl
    IF(ISKEYDOWN(#A) = 1) // Ctrl + A
        print("Ctrl-A")
        waitms(500)
    END_IF
    IF(ISKEYDOWN(#B) = 1) // Ctrl + B
        print("Ctrl-B")
        waitms(500)
    END_IF
   
    IF(ISKEYDOWN(#SHIFT) = 1) // +SHIFT
        IF(ISKEYDOWN(#A) = 1) // Ctrl + SHIFT + A
            print("Ctrl-Shift-A")
            waitms(500)
        END_IF
        IF(ISKEYDOWN(#B) = 1) // Ctrl + SHIFT + B
            print("Ctrl-Shift-B")
            waitms(500)
        END_IF
    END_IF
ELSE
    // отдельные клавиши
    IF((ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ALT) = 0))
        IF(ISKEYDOWN(#A) = 1) // A
            print("Кнопка A нажата.")
            waitms(500)
        END_IF
        IF(ISKEYDOWN(#B) = 1) // B
            print("Кнопка B нажата.")
            waitms(500)
        END_IF
    END_IF
END_IF
waitms(20)

Мог бы и догадаться.


Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Мог бы и догадаться.

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

Code: (clickermann) [Select]
IF(ISKEYDOWN(#CTRL) = 1) // Ctrl
    IF((ISKEYDOWN(#win) = 0) & (ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ALT) = 0))
        IF(ISKEYDOWN(#A) = 1) // Ctrl + A
            c("A")
        END_IF
    END_IF
    waitms($milli)

    IF(ISKEYDOWN(#SHIFT) = 1) // +SHIFT
        IF(ISKEYDOWN(#A) = 1) // Ctrl + SHIFT + A
            cs("A")
        END_IF
    END_IF
    waitms($milli)
   
ELSE
    // отдельные клавиши
    IF((ISKEYDOWN(#win) = 0) & (ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ALT) = 0))
        IF(ISKEYDOWN(#A) = 1) // A
            k("A")
        END_IF
    END_IF
    waitms($milli)
   
END_IF
waitms(1)

Но вот всё никак опять не могу допереть, как сделать, чтоб выдавало сообщение, даже когда была нажата (и отпущена) только одна клавиша Ктрл. Ну тупой)) Здесь либо должен быть иф с проверкой на то, что все остальные кнопки не были нажаты (не пойму, как это делать, не указывать же явно их все)) либо обрабатывать release для кнопки Ктрл (но в кликере вроде ж нет такой функции). Щас помозгую ещё))

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
Вот промежуточный вариант слушалки:
Code: (clickermann) [Select]
$milli=1 // milliseconds to wait: 1-30 ms recommended
define($init)
if($init=0)
logclear
inc($init)
end_if
// c=ctrl w=win a=alt s=shift
// c w a s / cw ca cs wa ws as / cwa cws cas was / cwas 
$awt=400 // wait after pressing: 200-2000 ms recommended 
sub(k,$lettr00) //
$k=strconcat("Нажата кнопка ",$lettr00,". ")
print($k)
waitms($awt)
$clp00=strconcat("keypress(#",$lettr00,")")
toclip($clp00)
end_sub
sub(c,$lettr01) //
$c=strconcat("Ctrl-",$lettr01)
print($c)
waitms($awt)
$clp01=strconcat("keydown(#ctrl) keypress(#",$lettr01,") keyup(#ctrl)")
toclip($clp01)
end_sub
sub(w,$lettr02) //
$w=strconcat("Win-",$lettr02)
print($w)
waitms($awt)
$clp02=strconcat("keydown(#win) keypress(#",$lettr02,") keyup(#win)")
toclip($clp02)
end_sub
sub(a,$lettr03) //
$a=strconcat("Alt-",$lettr03)
print($a)
waitms($awt)
$clp03=strconcat("keydown(#alt) keypress(#",$lettr03,") keyup(#alt)")
toclip($clp03)
end_sub
sub(s,$lettr04) //
$s=strconcat("Shift-",$lettr04)
print($s)
waitms($awt)
$clp04=strconcat("keydown(#shift) keypress(#",$lettr04,") keyup(#shift)")
toclip($clp04)
end_sub
sub(cw,$lettr05) //
$cw=strconcat("Ctrl-Win-",$lettr05)
print($cw)
waitms($awt)
$clp05=strconcat("keydown(#ctrl) keydown(#win) keypress(#",$lettr05,") keyup(#win) keyup(#ctrl)")
toclip($clp05)
end_sub
sub(ca,$lettr06) //
$ca=strconcat("Ctrl-Alt-",$lettr06)
print($ca)
waitms($awt)
$clp06=strconcat("keydown(#ctrl) keydown(#alt) keypress(#",$lettr06,") keyup(#alt) keyup(#ctrl)")
toclip($clp06)
end_sub
sub(cs,$lettr07) //
$cs=strconcat("Ctrl-Shift-",$lettr07)
print($cs)
waitms($awt)
$clp07=strconcat("keydown(#ctrl) keydown(#shift) keypress(#",$lettr07,") keyup(#shift) keyup(#ctrl)")
toclip($clp07)
end_sub
sub(wa,$lettr08) //
$wa=strconcat("Win-Alt-",$lettr08)
print($wa)
waitms($awt)
$clp08=strconcat("keydown(#win) keydown(#alt) keypress(#",$lettr08,") keyup(#alt) keyup(#win)")
toclip($clp08)
end_sub
sub(ws,$lettr09) //
$ws=strconcat("Win-Shift-",$lettr09)
print($ws)
waitms($awt)
$clp09=strconcat("keydown(#win) keydown(#shift) keypress(#",$lettr09,") keyup(#shift) keyup(#win)")
toclip($clp09)
end_sub
sub(as,$lettr10) //
$as=strconcat("Alt-Shift-",$lettr10)
print($as)
waitms($awt)
$clp10=strconcat("keydown(#alt) keydown(#shift) keypress(#",$lettr10,") keyup(#shift) keyup(#alt)")
toclip($clp10)
end_sub
sub(cwa,$lettr11) //
$cwa=strconcat("Ctrl-Win-Alt-",$lettr11)
print($cwa)
waitms($awt)
$clp11=strconcat("keydown(#ctrl) keydown(#win) keydown(#alt) keypress(#",$lettr11,") keyup(#alt) keyup(#win) keyup(#ctrl)")
toclip($clp11)
end_sub
sub(cws,$lettr12) //
$cws=strconcat("Ctrl-Win-Shift-",$lettr12)
print($cws)
waitms($awt)
$clp12=strconcat("keydown(#ctrl) keydown(#win) keydown(#shift) keypress(#",$lettr12,") keyup(#shift) keyup(#win) keyup(#ctrl)")
toclip($clp12)
end_sub
sub(cas,$lettr13) //
$cas=strconcat("Ctrl-Alt-Shift-",$lettr13)
print($cas)
waitms($awt)
$clp13=strconcat("keydown(#ctrl) keydown(#alt) keydown(#shift) keypress(#",$lettr13,") keyup(#shift) keyup(#alt) keyup(#ctrl)")
toclip($clp13)
end_sub
sub(was,$lettr14) //
$was=strconcat("Win-Alt-Shift-",$lettr14)
print($was)
waitms($awt)
$clp14=strconcat("keydown(#win) keydown(#alt) keydown(#shift) keypress(#",$lettr14,") keyup(#shift) keyup(#alt) keyup(#win)")
toclip($clp14)
end_sub
sub(cwas,$lettr15) //
$cwas=strconcat("Ctrl-Win-Alt-Shift-",$lettr15)
print($cwas)
waitms($awt)
$clp15=strconcat("keydown(#ctrl) keydown(#win) keydown(#alt) keydown(#shift) keypress(#",$lettr15,") keyup(#shift) keyup(#alt) keyup(#win) keyup(#ctrl)")
toclip($clp15)
end_sub


if(ISKEYDOWN(#shift) = 1) // Shift
IF((ISKEYDOWN(#alt) = 0) & (ISKEYDOWN(#win) = 0) & (ISKEYDOWN(#ctrl) = 0))
      if(ISKEYDOWN(#A) = 1)
      s("A")
      end_if
end_if
end_if

if(ISKEYDOWN(#win) = 1) // Win
IF((ISKEYDOWN(#alt) = 0) & (ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ctrl) = 0))
      if(ISKEYDOWN(#A) = 1)
      w("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      w("Y")
      end_if
end_if
if(ISKEYDOWN(#shift) = 1)
IF((ISKEYDOWN(#alt) = 0) & (ISKEYDOWN(#ctrl) = 0))
      if(ISKEYDOWN(#A) = 1)
      ws("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      ws("Y")
      end_if
end_if
end_if
end_if

if(ISKEYDOWN(#alt) = 1) // Alt
IF((ISKEYDOWN(#win) = 0) & (ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ctrl) = 0))
        IF(ISKEYDOWN(#A) = 1) // Alt + A
            a("A")
        END_IF
end_if
if(ISKEYDOWN(#SHIFT) = 1)
if(ISKEYDOWN(#win) = 1)
if(ISKEYDOWN(#ctrl) = 0)
      if(ISKEYDOWN(#A) = 1)
      was("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      was("Y")
      end_if
end_if
else
if(ISKEYDOWN(#ctrl) = 0)
      if(ISKEYDOWN(#A) = 1)
      as("A")
      end_if
end_if
end_if
else
  if(ISKEYDOWN(#win) = 1)
  if(ISKEYDOWN(#ctrl) = 0)
      if(ISKEYDOWN(#A) = 1)
      wa("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      wa("Y")
      end_if
  end_if
  end_if
end_if
end_if
waitms($milli) 

IF(ISKEYDOWN(#CTRL) = 1) // Ctrl
    IF((ISKEYDOWN(#win) = 0) & (ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ALT) = 0))
        IF(ISKEYDOWN(#A) = 1) // Ctrl + A
            c("A")
        END_IF
    END_IF
    waitms($milli)

    IF(ISKEYDOWN(#WIN) = 1) // +WIN
    IF((ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ALT) = 0))
        IF(ISKEYDOWN(#A) = 1) // Ctrl + WIN + A
            cw("A")
        END_IF
      if(ISKEYDOWN(#Y) = 1)
      cw("Y")
      end_if
      end_if
     
      if(ISKEYDOWN(#shift) = 1)
      if(ISKEYDOWN(#alt) = 0)
      if(ISKEYDOWN(#A) = 1)
      cws("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      cws("Y")
      end_if
    else
      if(ISKEYDOWN(#A) = 1)
      cwas("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      cwas("Y")
      end_if
      end_if
      else
      if(ISKEYDOWN(#alt) = 1)
      if(ISKEYDOWN(#A) = 1)
      cwa("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      cwa("Y")
      end_if
      end_if
end_if
     
    END_IF
    waitms($milli)
   
    IF(ISKEYDOWN(#ALT) = 1) // +ALT
    IF((ISKEYDOWN(#win) = 0) & (ISKEYDOWN(#SHIFT) = 0))
        IF(ISKEYDOWN(#A) = 1) // Ctrl + ALT + A
            ca("A")
        END_IF
    end_if
    if(ISKEYDOWN(#SHIFT) = 1)
    if(ISKEYDOWN(#win) = 0)
      if(ISKEYDOWN(#A) = 1)
      cas("A")
      end_if
    end_if
    end_if
    END_IF
    waitms($milli)
   
    IF(ISKEYDOWN(#SHIFT) = 1) // +SHIFT
        IF(ISKEYDOWN(#A) = 1) // Ctrl + SHIFT + A
            cs("A")
        END_IF
    END_IF
    waitms($milli)
   
ELSE
    // отдельные клавиши
    IF((ISKEYDOWN(#win) = 0) & (ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ALT) = 0))
        IF(ISKEYDOWN(#A) = 1) // A
            k("A")
        END_IF
    END_IF
    waitms($milli)
   
END_IF
waitms(1)

И несмотря на все прописанные варианты комбинаций, в скрипте почему-то всё равно не работают некоторые линии комбинаций в текущей версии (периодически почему-то не работают Win-Alt+..., Win-Ctrl+...). Или мож просто тормозит, потому что щас проверил снова и заработало, хотя в прошлый раз не работало, зато перестала работать линия Win-Shift+.., которая перед этим работала -- возможно, имеет значение, в каком порядке набирать комбы: Win-Shift+.. либо же Shift-Win+.., так что мейби надо поставить значения делеев ещё поменьше либо убрать некоторые зазоры по времени.

ПС. Кажись допёр, почему линии не прожимались: просто ввиду занятости комбы Вин-А я поменял тестовый хоткей на Вин-У, но сделал это не везде, и в обработчике через Ктрл осталось прежнее Вин-А, и я ломился в закрытую дверь. Щас потестим.


Винт, а мона ещё пару вопросов? Во-первых, такой функционал уже мож кто-то делал на сайте? И потом, если нет, то.. эта муристика ваще комут нужна тут?))
Да, и вот ещё интересно а можно делать так?))
Code: (clickermann) [Select]
waitms(0.85) Или там всё-таки берётся интеджер/раунд от дроби?

ППС. Чуть подправил бету, убрал баги. Единственно, теперь не работает с правым ВИНом в виду того, что кликер разделяет Вин на левый и правый. Чего, к сожалению, нельзя сказать про другие модификаторы. Ну переделывать уже под правый Win не буду пока, вломы)) Ещё немного погоняю и выложу бетку в отдельную ветку.
« Last Edit: August 14, 2017, 09:47:15 PM by Cleoss »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
у waitms параметр только целое число. Думаю внутри тип  int.
По самой реализации он не нужен меньше, его погрешность до 5 мс.
При выставлении 1-2 у меня задержки нет. 0 по измерениям. Которые тоже не точны  :)

P.S. Подходит малая к оставленному телефону позалипала 3 минуты и говорит:  а что это за значок красный? И квадратик там есть и кружок.


Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
В общем, почухал репу и посидев недолго, добавил обработчики правого ВИНа. Надеюсь, после этого ничего не отвалится, чуть погонял эту версию -- вроде всё норм, не считая малореальных вариантов на входе вроде двух зажатых Ктрл+.. (у меня с ними почемут не выдал результата кликер, хотя с остальными двумя дублями модификаторов работал норм, даже с Вин) и разумеется пока ещё не работает обработчик чистых модификаторов/ их групп без кеев -- мож, завтра придёт Винт и подскажет как)) До того времени из бетки не выйдем.

Итак,
Code: (clickermann) [Select]
$milli=1 // milliseconds to wait: 1-30 ms recommended
define($init)ё
if($init=0)
logclear
inc($init)
end_if
// c=ctrl w=win a=alt s=shift
// c w a s / cw ca cs wa ws as / cwa cws cas was / cwas 
$awt=400 // wait after pressing: 200-2000 ms recommended 
sub(k,$lettr00) //
$k=strconcat("Нажата кнопка ",$lettr00,". ")
print($k)
waitms($awt)
$clp00=strconcat("keypress(#",$lettr00,")")
toclip($clp00)
end_sub
sub(c,$lettr01) //
$c=strconcat("Ctrl-",$lettr01)
print($c)
waitms($awt)
$clp01=strconcat("keydown(#ctrl) keypress(#",$lettr01,") keyup(#ctrl)")
toclip($clp01)
end_sub
sub(w,$lettr02) //
$w=strconcat("Win-",$lettr02)
print($w)
waitms($awt)
$clp02=strconcat("keydown(#win) keypress(#",$lettr02,") keyup(#win)")
toclip($clp02)
end_sub
sub(a,$lettr03) //
$a=strconcat("Alt-",$lettr03)
print($a)
waitms($awt)
$clp03=strconcat("keydown(#alt) keypress(#",$lettr03,") keyup(#alt)")
toclip($clp03)
end_sub
sub(s,$lettr04) //
$s=strconcat("Shift-",$lettr04)
print($s)
waitms($awt)
$clp04=strconcat("keydown(#shift) keypress(#",$lettr04,") keyup(#shift)")
toclip($clp04)
end_sub
sub(cw,$lettr05) //
$cw=strconcat("Ctrl-Win-",$lettr05)
print($cw)
waitms($awt)
$clp05=strconcat("keydown(#ctrl) keydown(#win) keypress(#",$lettr05,") keyup(#win) keyup(#ctrl)")
toclip($clp05)
end_sub
sub(ca,$lettr06) //
$ca=strconcat("Ctrl-Alt-",$lettr06)
print($ca)
waitms($awt)
$clp06=strconcat("keydown(#ctrl) keydown(#alt) keypress(#",$lettr06,") keyup(#alt) keyup(#ctrl)")
toclip($clp06)
end_sub
sub(cs,$lettr07) //
$cs=strconcat("Ctrl-Shift-",$lettr07)
print($cs)
waitms($awt)
$clp07=strconcat("keydown(#ctrl) keydown(#shift) keypress(#",$lettr07,") keyup(#shift) keyup(#ctrl)")
toclip($clp07)
end_sub
sub(wa,$lettr08) //
$wa=strconcat("Win-Alt-",$lettr08)
print($wa)
waitms($awt)
$clp08=strconcat("keydown(#win) keydown(#alt) keypress(#",$lettr08,") keyup(#alt) keyup(#win)")
toclip($clp08)
end_sub
sub(ws,$lettr09) //
$ws=strconcat("Win-Shift-",$lettr09)
print($ws)
waitms($awt)
$clp09=strconcat("keydown(#win) keydown(#shift) keypress(#",$lettr09,") keyup(#shift) keyup(#win)")
toclip($clp09)
end_sub
sub(as,$lettr10) //
$as=strconcat("Alt-Shift-",$lettr10)
print($as)
waitms($awt)
$clp10=strconcat("keydown(#alt) keydown(#shift) keypress(#",$lettr10,") keyup(#shift) keyup(#alt)")
toclip($clp10)
end_sub
sub(cwa,$lettr11) //
$cwa=strconcat("Ctrl-Win-Alt-",$lettr11)
print($cwa)
waitms($awt)
$clp11=strconcat("keydown(#ctrl) keydown(#win) keydown(#alt) keypress(#",$lettr11,") keyup(#alt) keyup(#win) keyup(#ctrl)")
toclip($clp11)
end_sub
sub(cws,$lettr12) //
$cws=strconcat("Ctrl-Win-Shift-",$lettr12)
print($cws)
waitms($awt)
$clp12=strconcat("keydown(#ctrl) keydown(#win) keydown(#shift) keypress(#",$lettr12,") keyup(#shift) keyup(#win) keyup(#ctrl)")
toclip($clp12)
end_sub
sub(cas,$lettr13) //
$cas=strconcat("Ctrl-Alt-Shift-",$lettr13)
print($cas)
waitms($awt)
$clp13=strconcat("keydown(#ctrl) keydown(#alt) keydown(#shift) keypress(#",$lettr13,") keyup(#shift) keyup(#alt) keyup(#ctrl)")
toclip($clp13)
end_sub
sub(was,$lettr14) //
$was=strconcat("Win-Alt-Shift-",$lettr14)
print($was)
waitms($awt)
$clp14=strconcat("keydown(#win) keydown(#alt) keydown(#shift) keypress(#",$lettr14,") keyup(#shift) keyup(#alt) keyup(#win)")
toclip($clp14)
end_sub
sub(cwas,$lettr15) //
$cwas=strconcat("Ctrl-Win-Alt-Shift-",$lettr15)
print($cwas)
waitms($awt)
$clp15=strconcat("keydown(#ctrl) keydown(#win) keydown(#alt) keydown(#shift) keypress(#",$lettr15,") keyup(#shift) keyup(#alt) keyup(#win) keyup(#ctrl)")
toclip($clp15)
end_sub


if(ISKEYDOWN(#shift) = 1) // Shift
IF((ISKEYDOWN(#alt) = 0) & (ISKEYDOWN(#win) = 0) & (ISKEYDOWN(#ctrl) = 0))
      if(ISKEYDOWN(#A) = 1)
      s("A")
      end_if
end_if
end_if

if((ISKEYDOWN(#win) = 1)|(ISKEYDOWN(#rwin) = 1)) // Win
IF((ISKEYDOWN(#alt) = 0) & (ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ctrl) = 0))
      if(ISKEYDOWN(#A) = 1)
      w("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      w("Y")
      end_if
end_if
if(ISKEYDOWN(#shift) = 1)
IF((ISKEYDOWN(#alt) = 0) & (ISKEYDOWN(#ctrl) = 0))
      if(ISKEYDOWN(#A) = 1)
      ws("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      ws("Y")
      end_if
end_if
end_if
end_if

if(ISKEYDOWN(#alt) = 1) // Alt
IF((ISKEYDOWN(#rwin) = 0) & (ISKEYDOWN(#win) = 0) & (ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ctrl) = 0))
        IF(ISKEYDOWN(#A) = 1) // Alt + A
            a("A")
        END_IF
end_if
if(ISKEYDOWN(#SHIFT) = 1)
if((ISKEYDOWN(#win) = 1)|(ISKEYDOWN(#rwin) = 1))
if(ISKEYDOWN(#ctrl) = 0)
      if(ISKEYDOWN(#A) = 1)
      was("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      was("Y")
      end_if
end_if
else
if(ISKEYDOWN(#ctrl) = 0)
      if(ISKEYDOWN(#A) = 1)
      as("A")
      end_if
end_if
end_if
else
  if((ISKEYDOWN(#win) = 1)|(ISKEYDOWN(#rwin) = 1))
  if(ISKEYDOWN(#ctrl) = 0)
      if(ISKEYDOWN(#A) = 1)
      wa("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      wa("Y")
      end_if
  end_if
  end_if
end_if
end_if
waitms($milli) 

IF(ISKEYDOWN(#CTRL) = 1) // Ctrl
    IF((ISKEYDOWN(#rwin) = 0) & (ISKEYDOWN(#win) = 0) & (ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ALT) = 0))
        IF(ISKEYDOWN(#A) = 1) // Ctrl + A
            c("A")
        END_IF
    END_IF
    waitms($milli)

    IF((ISKEYDOWN(#WIN) = 1)|(ISKEYDOWN(#rwin) = 1)) // +WIN/rWin
    IF((ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ALT) = 0))
        IF(ISKEYDOWN(#A) = 1) // Ctrl + WIN + A
            cw("A")
        END_IF
      if(ISKEYDOWN(#Y) = 1)
      cw("Y")
      end_if
      end_if
     
      if(ISKEYDOWN(#shift) = 1)
      if(ISKEYDOWN(#alt) = 0)
      if(ISKEYDOWN(#A) = 1)
      cws("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      cws("Y")
      end_if
    else
      if(ISKEYDOWN(#A) = 1)
      cwas("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      cwas("Y")
      end_if
      end_if
      else
      if(ISKEYDOWN(#alt) = 1)
      if(ISKEYDOWN(#A) = 1)
      cwa("A")
      end_if
      if(ISKEYDOWN(#Y) = 1)
      cwa("Y")
      end_if
      end_if
end_if
     
    END_IF
    waitms($milli)
   
    IF(ISKEYDOWN(#ALT) = 1) // +ALT
    IF((ISKEYDOWN(#rwin) = 0) & (ISKEYDOWN(#win) = 0) & (ISKEYDOWN(#SHIFT) = 0))
        IF(ISKEYDOWN(#A) = 1) // Ctrl + ALT + A
            ca("A")
        END_IF
    end_if
    if(ISKEYDOWN(#SHIFT) = 1)
    if((ISKEYDOWN(#win) = 0)|(ISKEYDOWN(#rwin) = 0))
      if(ISKEYDOWN(#A) = 1)
      cas("A")
      end_if
    end_if
    end_if
    END_IF
    waitms($milli)
   
    IF(ISKEYDOWN(#SHIFT) = 1) // +SHIFT
        IF(ISKEYDOWN(#A) = 1) // Ctrl + SHIFT + A
            cs("A")
        END_IF
    END_IF
    waitms($milli)
   
ELSE
    // отдельные клавиши
    IF((ISKEYDOWN(#rwin) = 0) & (ISKEYDOWN(#win) = 0) & (ISKEYDOWN(#SHIFT) = 0) & (ISKEYDOWN(#ALT) = 0))
        IF(ISKEYDOWN(#A) = 1) // A
            k("A")
        END_IF
    END_IF
    waitms($milli)
   
END_IF
waitms(1)

Ах да, после каждого нажатия клавиатурной комбинации, кроме соответствующего отображения набранного хоткея в логе и строке состояния, кликер также копирует в буфер обмена код, необходимый для воспроизведения набранного хоткея с помощью Вашего скрипта, в который и нужно будет вставить код из буфера. Этот функционал собсна и есть то, ради чего задумывалась Слушалка. Например, полученный в буфере код для хоткея Ctrl-Win-Shift-Y имеет вид:

Code: (clickermann) [Select]
keydown(#ctrl) keydown(#win) keydown(#shift) keypress(#Y) keyup(#shift) keyup(#win) keyup(#ctrl)
То бишь код копируется без абзацев, и Вам при вставке полученного кода в свой скрипт предстоит расставить эти недостающие абзацы вручную. Я пока что не знаю, как силами одного только кликера вставить абзацы в строку. Может, просто пойдёт копирование символов каретки вместо подстановок /r/n?

Cleoss

  • Активный участник
  • ***
  • Posts: 260
  • Автоматизируй это!
    • View Profile
По самой реализации он не нужен меньше, его погрешность до 5 мс.
P.S. Подходит малая к оставленному телефону позалипала 3 минуты и говорит:  а что это за значок красный? И квадратик там есть и кружок.

Кажись, ты мне уже писал в том году про погрешности. Память ни в дугу))
Ыыы, так а чё это за квадрат красненький с кружком? -__-
ПС. Ааа, ты эт про мою аватарку? Если да, то это логотип брауза-арбуза Вивальди, духовного наследника Оперы Престо, известной множеством своих настроек.
Он же крупным планом (правда, lowres, круто б svg сделать было б) или залипалка тайлом.
« Last Edit: August 14, 2017, 11:15:05 PM by Cleoss »