Author Topic: KEYDOWN жмёт не те клавиши (уже не актуально)  (Read 11762 times)

0 Members and 1 Guest are viewing this topic.

Alex_nub

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Скачал Кликерман 4.7 (с целью применения в Batlestar Galactica:)
Пока тренируюсь на блокноте, но выяснилось следующее:
функция KEYPRESS(десятичный код) - работает абсолютно правильно;
функция KEYPRESS(#псевдоним) - работает правильно;
А вот функция KEYDOWN(десятичный код) - пишет странную фигню, коды клавиш совершенно не совпадают с таблицей. Радует только то, что они хотя бы всегда постоянные, и методом тыка можно выяснить, где что. Например, код Бэкспэйса в таблице 8, для KEYPRESS тоже 8, а для KEYDOWN - почему-то 55...

Я написал простенький скрипт, для привязки прямо к окну Лога и проверки кодов клавиш от 1 до 200. Сначала штатно пишет в лог значение кода, потом ставит 2 слэша и рядом жмёт клавишу через кликер.

Скрипт для KEYPRESS:
Code: (clickermann) [Select]
//Тест Keypress 1-120
//Привязать к окну ЛОГА!!!!!!!!

WHILE($V < 120)
LOGWRITE ($V)   //пишет в лог код клавиши

KEYPRESS(191)   //ставит слэш
KEYPRESS(191)   //ставит слэш
KEYPRESS($V)    //жмёт клавишу в окне лога

INC($V,1)
END_CYC

halt // for single run

Для KEYPRESS - всё совпадает с таблицей:
[spoiler]
11:05:02 19//
11:05:02 20//
11:05:02 21//
11:05:02 22//
11:05:02 23//
11:05:02 24//
11:05:02 25//
11:05:02 26//
11:05:02 27//
11:05:02 28//
11:05:02 29//
11:05:02 30//
11:05:02 31//
11:05:02 32//
11:05:02 33//
11:05:02 34//
11:05:02 35//
11:05:02 36//
11:05:02 37//
11:05:02 38//
11:05:02 39//
11:05:02 40//
11:05:02 41//
11:05:02 42//
11:05:02 43//
11:05:02 44//
11:05:02 45//
11:05:02 46//
11:05:02 47//
11:05:02 48//0
11:05:02 49//1
11:05:02 50//2
11:05:03 51//3
11:05:03 52//4
11:05:03 53//5
11:05:03 54//6
11:05:03 55//7
11:05:03 56//8
11:05:03 57//9
11:05:03 58//
11:05:03 59//
11:05:03 60//
11:05:03 61//
11:05:03 62//
11:05:03 63//
11:05:03 64//
11:05:03 65//a
11:05:03 66//b
11:05:03 67//c
11:05:03 68//d
11:05:03 69//e
11:05:03 70//f
11:05:03 71//g
11:05:03 72//h
11:05:03 73//i
11:05:03 74//j
11:05:03 75//k
11:05:03 76//l
11:05:03 77//m
11:05:03 78//n
11:05:03 79//o
11:05:03 80//p
11:05:03 81//q
11:05:03 82//r
11:05:03 83//s
11:05:03 84//t
11:05:03 85//u
11:05:03 86//v
11:05:03 87//w
11:05:03 88//x
11:05:03 89//y
11:05:03 90//z
11:05:03 91//
11:05:03 92//
11:05:03 93//
11:05:03 94//
11:05:03 95//
11:05:03 96//0
11:05:03 97//1
11:05:03 98//2
11:05:03 99//3
11:05:03 100//4
11:05:03 101//5
11:05:03 102//6
11:05:03 103//7
11:05:04 104//8
11:05:04 105//9
11:05:04 106//*
11:05:04 107//+
11:05:04 108//
11:05:04 109//-
11:05:04 110//.
11:05:04 111///
11:05:04 112//
11:05:04 113//
11:05:04 114//
11:05:04 115//
11:05:04 116//
11:05:04 117//
11:05:04 118//
11:05:04 119//[/spoiler]

Скрипт для KEYDOWN:
Code: (clickermann) [Select]
//Тест KeyDown 1-100
//Привязать к окну ЛОГА!!!!!!!!

WHILE($V < 100)
LOGWRITE ($V)   //пишет в лог код клавиши

KEYPRESS(191)   //ставит слэш
KEYPRESS(191)   //ставит слэш

KEYDOWN($V)     //нажимает клавишу с кодом
KEYUP($V)       //отпускает

INC($V,1)
END_CYC

halt // for single run

В результате, получается непонятная фигня.
Лог для KEYDOWN от 1 до 200, совершенно не совпадает с таблицей кодов клавиш в хэлпе:
[spoiler]
11:45:30 0
//                 (похоже на энтер...)
11:45:30 1//
11:45:30 2//
11:45:30 3//f
11:45:30 4//
11:45:30 5//
11:45:30 6//
11:45:30 7//
11:45:30 8//
11:45:30 9//
11:45:30 10//
11:45:30 11//
11:45:30 12//l
11:45:30 13//
11:45:30 14//
11:45:30 15//
11:45:30 16//
11:45:30 17//
11:45:30 18//8
11:45:30 19//
11:45:30 20//
11:45:30 21//
11:45:30 22//
11:45:30 23//
11:45:30 24//
11:45:30 25//
11:45:30 26//
11:45:30 27//
11:45:30 28//
11:45:30 29//
11:45:30 30//
11:45:30 31//
11:45:30 32//9
11:45:30 33//i
11:45:30 34//q
11:45:30 35//o
11:45:30 36//g
11:45:30 37//k
11:45:30 38//h
11:45:30 39//m
11:45:30 40//p
11:45:30 41//
11:45:30 42//
11:45:30 43//
11:45:30 44//t
11:45:30 45//r
11:45:30 46//s
11:45:30 47//3
11:45:30 48//
11:45:30 49//
11:45:30 50//
11:45:30 51//
11:45:30 52//
11:45:30 53//
11:45:30 54//
11:45:30 55/           (здесь бэкспэйс)
11:45:30 56//
11:45:30 57//
11:45:30 58//
11:45:30 59//
11:45:30 60//
11:45:30 61//
11:45:30 62//
11:45:30 63//
11:45:30 64//
11:45:30 65//
11:45:30 66//0
11:45:30 67//
11:45:30 68//
11:45:30 69//
11:45:30 70//
11:45:30 71//
11:45:30 72//
11:45:31 73//
11:45:31 74//
11:45:31 75//
11:45:31 76//
11:45:31 77//2
11:45:31 78//1
11:45:31 79//
11:45:31 80//
11:45:31 81//
11:45:31 82//
11:45:31 83//
11:45:31 84//
11:45:31 85//
11:45:31 86//
11:45:31 87//
11:45:31 88//
11:45:31 89//
11:45:31 90//
11:45:31 91//
11:45:31 92//
11:45:31 93//
11:45:31 94//
11:45:31 95//
11:45:31 96//r
11:45:31 97//o
11:45:31 98//p
11:45:31 99//q
Продолжение от 100 до 200, капс нажался случайно:
11:55:39 99//Q
11:55:39 100//K
11:55:39 101//L
11:55:39 102//M
11:55:39 103//G
11:55:39 104//H
11:55:39 105//I
11:55:39 106//7
11:55:39 107//N
11:55:39 108//
11:55:39 109//J
11:55:39 110//S
11:55:39 111//5
11:55:39 112//
11:55:39 113//
11:55:39 114//
11:55:39 115//
11:55:39 116//
11:55:39 117//
11:55:39 118//A
11:55:39 119//B
11:55:39 120//C
11:55:39 121//D
11:55:39 122//W
11:55:39 123//X
11:55:39 124//4
11:55:39 125//5
11:55:40 126//6
11:55:40 127//7
11:55:40 128//8
11:55:40 129//9
11:55:40 130//*
11:55:40 131//+
11:55:40 132//
11:55:40 133//-
11:55:40 134//.
11:55:40 135//
11:55:40 136//
11:55:40 137//
11:55:40 138//
11:55:40 139//
11:55:40 140//
11:55:40 141//
11:55:40 142//
11:55:40 143//
11:55:40 144//E
11:55:40 145//F
11:55:40 146//
11:55:40 147//
11:55:40 148//
11:55:40 149//
11:55:40 150//
11:55:40 151//
11:55:40 152//
11:55:40 153//
11:55:40 154//
11:55:40 155//
11:55:40 156//
11:55:40 157//
11:55:40 158//
11:55:41 159//
11:55:41 160//
11:55:41 161//6
11:55:41 162//
11:55:41 163//
11:55:41 164//8
11:55:41 165//8
11:55:41 166//*
11:55:41 167//9
11:55:41 168//7
11:55:41 169//8
11:55:41 170//5
11:55:41 171//6
11:55:41 172//2
11:55:41 173//
11:55:41 174//
11:55:41 175//0
11:55:41 176//
11:55:41 177//
11:55:41 178//
11:55:41 179//
11:55:41 180//
11:55:41 181//-
11:55:41 182//+
11:55:41 183//
11:55:41 184//
11:55:41 185//
11:55:41 186//
11:55:41 187//
11:55:41 188
//3
11:55:41 189//
11:55:41 190//4
11:55:41 191//5
11:55:41 192//
11:55:42 193//
11:55:42 194//
11:55:42 195//
11:55:42 196//
11:55:42 197//
11:55:42 198//
11:55:42 199//[/spoiler]

Помогите разобраться, отчего могла появиться такая проблема и как бороться... Я правда уже выяснил методом тыка коды для некоторых клавиш, но это как-то неправильно. Может, мой случай уникальный и дело в особенно кривых руках/винде/компе? У меня Windows 7 "домашняя расширенная ломаная", никаких дополнительных драйверов клавиатуры и т.п. я не устанавливал.

Самое печальное, что при ЗАПИСИ сценария, все коды клавиш в KEYDOWN записываются правильно, как в таблице - а воспроизводится потом что-то абсолютно другое...

========================

(И сразу до кучи второй вопрос: как правильно отслеживать событие нажатия мыши? Я так понимаю, что можно проверять как для любой клавиши, ISKEYDOWN (код мыши)? или есть какой-то отдельный способ проверки именно для нажатий мыши.))) Про это уже нашёл на форуме))))
« Last Edit: July 03, 2013, 11:46:15 AM by Alex_nub »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: KEYDOWN жмёт не те клавиши...
« Reply #1 on: June 30, 2013, 10:27:43 PM »
У меня XP и никаких проблем нет. Проверял на "PassMark KeyboardTest" все коды клавиш идут по порядку до 99
Можешь сам попробовать но не уверен что эта прога пойдет на семерку (старая)
KeyboardTest.zip

И почему у тебя нет задержек?

Да отслеживать любые клавиши может только iskeydown

Code: (clickermann) [Select]
IF ( iskeydown(1)=1 )
   HINTPOPUP("Левая клавиша")
   HALT
END_IF
WAITMS(50)
« Last Edit: June 30, 2013, 10:30:58 PM by Oraven »

Alex_nub

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Re: KEYDOWN жмёт не те клавиши...
« Reply #2 on: July 03, 2013, 11:41:16 AM »
Проверял на "PassMark KeyboardTest"
KeyboardTest.zip
За прогу спасибо - она и время удержания клавиш фиксирует, удобно для подбора времени задержки. С клавиатурой у меня оказалось всё в порядке.

...Проблема с KEYDOWN разрешилась неожиданным образом  :)
Оказалось, что в блокноте и в ворде KEYDOWN(десятичный код) - пишет абракадабру; НО! В игре - всё срабатывает правильно!!! Это создаёт некоторые сложности при тестировании в блокноте - но главное, что в игре работает. Отчего и почему так происходет - это уже философский вопрос...

П.С. Насчёт реакции на нажатие мыши, я имел в виду что-то вроде этого:
Code: (clickermann) [Select]
//Жмёт клавишу по щелчку мыши

WHILE($var < 5)   //общий цикл
IF (iskeydown(1)=1)      //

   WHILE(iskeydown(1)=1)
      WAITMS(100)
   END_CYC
   
WAITMS(RND(100,300))
  KEYDOWN(50) //жмёт цифру 2
  WAITMS(RND(60,110))
  KEYUP(50)
 
  WAITMS(300)

Else
   WAITMS(50)
   
END_IF                  //
END_CYC           //конец общего цикла

halt // for single run

(служит для частичной механизации скана астероидов: щелчок мышью вручную, зато не надо жать клавишу сканера).