|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Запоминать последовательность нажатия определенных клавиш |
|
|
[решено] Запоминать последовательность нажатия определенных клавиш
|
Старожил Сообщения: 410 |
Доброго времени суток. Подскажите. как можно сделать чтобы AutoIT отслеживал последовательность некоторых клавиш.
Поясню детально: Есть программа для тестирования написанная на AutoIT (как будто нельзя было её на delphi написать =( ) Программа выводит вопрос и несколько вариантов ответа, казалось бы сиди и отвечай, но она блокирует мышь и почти всю клавиатуру оставляя в рабочем состоянии только 4 клавиши - цифры от 1 до 4 Я сам код не видел, потому-что у меня задание написать под эту прогу функцию, которая бы просто запоминала в какой последовательности пользователь нажимал эти клавиши Я пробовал делать через _IsPressed Т.е. в цикле вертится select с 4ми вариантами и если какой-то вариант появился то он записывается в файл Но AutoIT выдал несколько интересных сюрпризов: 1. Записывалась только первая нажатая кнопка, а дальше ничего больше не писалось, хотя функция продолжала работать 2. Запоминалась первая нажатая кнопка и дублировалась столько раз, сколько кнопок было нажато. 3. Записывалась каждая кнопка но вводилась в файл несколько раз подряд - если бы хотя бы количество повторений было одинаковое можно было бы отфильтровать, но оно всегда разное. Помогите разобраться. |
|
------- Отправлено: 16:29, 26-01-2013 |
Забанен Сообщения: 5828
|
Цитата McLotos:
http://www.autoitscript.com/autoit3/..._IsPressed.htm (по-английски) http://autoit-script.ru/autoit3_docs..._ispressed.htm (по-русски) Цитата:
|
||
Отправлено: 17:02, 26-01-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Попахивает Keylogger'ом, для отслежки ввода паролей...
Цитата McLotos:
![]() |
|
------- Отправлено: 20:06, 26-01-2013 | #3 |
Старожил Сообщения: 410
|
Профиль | Отправить PM | Цитировать Creat0R, спокойнее, всё очень просто, есть готовый тестер, у которого куча заморочек, именно поэтому мне и не показывают весь код целиком, чтобы я не смог обойти их блокировку клавиатуры и подсказать студентам как параллельно с тестером запускать блокнот с ответами. Так что вполне понятно почему этот препод усиленно старается не показывать мне код.
![]() |
------- Отправлено: 22:58, 26-01-2013 | #4 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата McLotos:
Цитата McLotos:
#include "IsPressedEx.au3" Global $sLog_File = @ScriptDir & '\Answers.log' HotKeySet('{ESC}', '_Exit') While 1 $vRet = _IsPressedEx("1|2|3|4") If $vRet Then $vRet = __KeyGetType($vRet, 0) MsgBox(64, 'Отслеживание ответов', 'Нажата клавиша: ' & $vRet) If FileGetSize($sLog_File) > 0 Then $vRet = ',' & $vRet EndIf $hFile = FileOpen($sLog_File, 1) FileWrite($hFile, $vRet) FileClose($hFile) EndIf Sleep(10) WEnd Func _Exit() Exit EndFunc Цитата McLotos:
|
||||
------- Отправлено: 02:44, 27-01-2013 | #5 |
Старожил Сообщения: 410
|
Профиль | Отправить PM | Цитировать Если убрать msgbox, то Ваш вариант тоже записывает каждое нажатие несколько раз.
А там немного другая система, справой стороны ведётся лог вопрос-ответ и статистика правильных ответов Как сделать чтобы без MsgBox всё корректно работало? Я сейчас на работе, а скрипт на домашнем компе, в общем логика там была примерно такая если нажата 31 открыть DLL открыть файл записать туда А закрыть файл закрыть DLL и так на каждую из 8и клавиш, потому-что как выяснилось, например 1 и Numpad1 имеют разные коды |
------- Отправлено: 08:17, 28-01-2013 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать McLotos, прислушайтесь к совету:
Цитата Creat0R:
|
|
Отправлено: 12:07, 28-01-2013 | #7 |
Старожил Сообщения: 410
|
Профиль | Отправить PM | Цитировать #include <Misc.au3> #include <File.au3> While 1 If _IsPressed("31",DllOpen("user32.dll")) Then If FileExists (@ScriptDir & '\' & $username & '.' $datetime & '.test.log') Then FileOpen(@ScriptDir & '\' & $username & '.' $datetime & '.test.log',1) Else _FileCreate(@ScriptDir & '\' & $username & '.' $datetime & '.test.log') EndIf FileWrite(@ScriptDir & '\' & $username & '.' $datetime & '.test.log', "A") FileClose(@ScriptDir & '\' & $username & '.' $datetime & '.test.log') DllClose("user32.dll") ; и так далее т.е. 31, 32, 33, 34б 61, 62, 63 ,64 Sleep(20) WEnd и он мне в файл записал ABCCCDDDAAABBCCCCDDD может так в самом autoit стоит какое-то ограничение, или он просто не успевает стирать из памяти букву и вводит её повторно? Может тогда логичнее делать через массив, а после завершения (кнопка Посчитать) уже весь массив выдавать пользователю и записывать в файл? Тогда получается что эта штука, которая справа выводит номер вопроса-вариант ответа она работать не будет =( |
------- Последний раз редактировалось McLotos, 28-01-2013 в 12:53. Отправлено: 12:40, 28-01-2013 | #8 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата McLotos:
#include "IsPressedEx.au3" Global $sLog_File = @ScriptDir & '\Answers.log' HotKeySet('{ESC}', '_Exit') While 1 $vRet = _IsPressedEx("1|2|3|4|{Numpad1}|{Numpad2}|{Numpad3}|{Numpad4}") If $vRet Then ;Это для ожидания отжатия клавиши While _IsPressed($vRet) Sleep(10) WEnd $vRet = __KeyGetType($vRet, 0) ;Эта строка удаляет Numpad если нажата цифра на правой части клавиатуры, если нужно записывать вместе с Numpad, ту следует убрать строку ниже $vRet = StringReplace($vRet, 'Numpad', '') If FileGetSize($sLog_File) > 0 Then $vRet = ',' & $vRet EndIf $hFile = FileOpen($sLog_File, 1) FileWrite($hFile, $vRet) FileClose($hFile) EndIf Sleep(10) WEnd Func _Exit() Exit EndFunc Цитата McLotos:
|
||
------- Отправлено: 14:42, 28-01-2013 | #9 |
Старожил Сообщения: 410
|
Профиль | Отправить PM | Цитировать Цитата Creat0R:
Блин, спасибо, как всегда выручил! |
|
------- Отправлено: 15:48, 28-01-2013 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Перехват нажатия всех клавиш | d234 | AutoIt | 18 | 10-07-2022 13:09 | |
эмуляция нажатия клавиш | skaaater | AutoIt | 0 | 01-09-2012 20:41 | |
Разное - Нажатия клавиш интерпретируются как нажатия комбинаций клавиш | ineXPert | Microsoft Windows 7 | 5 | 18-09-2011 10:58 | |
Автоматизация нажатия клавиш | Tonny_Bennet | AutoIt | 18 | 29-01-2011 14:47 | |
Двойные нажатия клавиш | ivank | Железо в Linux | 8 | 09-06-2003 09:24 |
|