Author Topic: функция возвращающая текущую нажатую клавишу  (Read 4091 times)

0 Members and 1 Guest are viewing this topic.

AandD

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Собственно сабж, очень часто необходима функция, возвращающая номер нажатой клавиши  вместо длинного полотна iskeydown

Atas

  • Активный участник
  • ***
  • Posts: 147
    • View Profile
Code: (clickermann) [Select]
THREAD(Функция возвращающая текущую нажатую клавишу)
   IF(ISKEYDOWN(#SPACE) = 1)
      LOGWRITE("SPACE!")
      WAITMS(50)
   END_IF
END_THREAD

Atas

  • Активный участник
  • ***
  • Posts: 147
    • View Profile
Ну не все же клавиши надо отслеживать, а только некоторые (если конечно вы не хотите написать кейлогер).
Можно и шире взглянуть на проблему, например отслеживать 222 клавиши. Это в ущерб скорости выполнения скрипта...
Code: (clickermann) [Select]
THREAD(Функция возвращающая текущую нажатую клавишу)
   IF(ISKEYDOWN($key) = 1)
      LOGWRITE($key)
      WAITMS(10)
   END_IF
   INC($key)
   IF($key > 222)
      $key = 1
   END_IF
END_THREAD
Но в этом случае, наверно следует сделать список клавиш исключаемых из отслеживания.
Короче тестить надо, я лишь предложил один из вариантов решения проблемы.

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Но в этом случае, наверно следует сделать список клавиш исключаемых из отслеживания.
Короче тестить надо, я лишь предложил один из вариантов решения проблемы.
всё верно, и реализуемо.
Code: (clickermann) [Select]
strseparate("Левая кнопка мыши :1:Правая кнопка мыши   :2:Средняя кнопка мыши   :4:Backspace :8:Tab :9:Enter :13:Shift :16:Ctrl :17:Alt :18:Pause :19:CapsLock :20:Esc :27:Пробел :32:PageUp :33:PageDown :34:End :35:Home :36:стрелка влево :37:стрелка вверх :38:стрелка вправо :39:стрелка вниз :40:Insert :45:Delete :46:0 :48:1 :49:2 :50:3 :51:4 :52:5 :53:6 :54:7 :55:8 :56:9 :57:A :65:B :66:C :67:D :68:E :69:F :70:G :71:H :72:I :73:J :74:K :75:L :76:M :77:N :78:O :79:P :80:Q :81:R :82:S :83:T :84:U :85:V :86:W :87:X :88:Y :89:Z :90:левая клавиша Windows :91:правая клавиша Windows :92:клавиша Applications   :93:NumPad 0   :96:NumPad 1   :97:NumPad 2   :98:NumPad 3   :99:NumPad 4   :100:NumPad 5   :101:NumPad 6   :102:NumPad 7   :103:NumPad 8   :104:NumPad 9   :105:NumPad *   :106:NumPad +   :107:NumPad -   :109:NumPad .   :110:NumPad /   :111:F1 :112:F2 :113:F3 :114:F4 :115:F5 :116:F6 :117:F7 :118:F8 :119:F9 :120:F10 :121:F11 :122:F12 :123:NumLock :144:ScrollLock :145:PrintScreen :154:Meta (wtf?)   :157:;   :186:=   :187:,   :188:-   :189:.   :190:/   :191:~   :192:[   :219:\   :220:]   :221:'   :222", ":", $keys)
$size_keys = ARRSIZE ($keys)

while(1)   
   waitms(20)   
   FOR($i=1,$i<$size_keys,2)
      IF(iskeydown($keys[$i])=1)
         print($keys[$i-1])
         $n = 0
         WHILE(iskeydown($keys[$i])=1)
            waitms(10)
            IF($n > 40)
               print($keys[$i-1])
               waitms(10)
            else
               inc($n)
            END_IF
         END_CYC         
      END_IF
   END_CYC     
END_CYC
данный скрипт немного грузит ЦП  :D, но я думаю на деле такие минимальные задержки не потребуются. конечно вот этот кусок
Code: (clickermann) [Select]
IF($n > 40)
    print($keys[$i-1])
    waitms(10)
   else
    inc($n)
END_IF
на практике будет лишним, зато с ним красиво печатает в логе  :D, с задержкой при длительном нажатии на клавишу.

AandD

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Я зная что можно отлавливать каждую клавишу, но:
1 простыня обработчиков
2 задержки
3 В отсутствие функций и колбеков код преврашается в полотно из кусков,  и пожалуйста не надо про сопрограммы они совсем не то,
вместо этого
 вызов
$var = getcr()
а дальше кейсами,
А смысл был в том чтобы, продублировать нажатия хpadder через ps/2, и да я реализовал сам, но простыня кода изза ограичености функционала удручает, потому и появилась просьба, нормальной реализации,
Конечно идельно если бы  автор прекрутил js или lua как альтернатиный язык

Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
напомнил одну реализацию, увиденную мной недавно:

Code: [Select]
bool IsBukva(char symbol)
{
switch(symbol)
{
case'a':return 1;break;
case'b':return 1;break;
case'c':return 1;break;
case'd':return 1;break;
case'e':return 1;break;
case'f':return 1;break;
case'g':return 1;break;
case'h':return 1;break;
case'i':return 1;break;
case'j':return 1;break;
case'k':return 1;break;
case'l':return 1;break;
case'm':return 1;break;
case'n':return 1;break;
case'o':return 1;break;
case'p':return 1;break;
case'q':return 1;break;
case'r':return 1;break;
case's':return 1;break;
case't':return 1;break;
case'u':return 1;break;
case'v':return 1;break;
case'w':return 1;break;
case'x':return 1;break;
case'y':return 1;break;
case'z':return 1;break;
case'A':return 1;break;
case'B':return 1;break;
case'C':return 1;break;
case'D':return 1;break;
case'E':return 1;break;
case'F':return 1;break;
case'G':return 1;break;
case'H':return 1;break;
case'I':return 1;break;
case'J':return 1;break;
case'K':return 1;break;
case'L':return 1;break;
case'M':return 1;break;
case'N':return 1;break;
case'O':return 1;break;
case'P':return 1;break;
case'Q':return 1;break;
case'R':return 1;break;
case'S':return 1;break;
case'T':return 1;break;
case'U':return 1;break;
case'V':return 1;break;
case'W':return 1;break;
case'X':return 1;break;
case'Y':return 1;break;
case'Z':return 1;break;
default:return 0;
}
}
« Last Edit: October 12, 2015, 09:26:29 PM by Oraven »