Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Запоминать последовательность нажатия определенных клавиш

Ответить
Настройки темы
[решено] Запоминать последовательность нажатия определенных клавиш

Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


Доброго времени суток. Подскажите. как можно сделать чтобы AutoIT отслеживал последовательность некоторых клавиш.
Поясню детально:
Есть программа для тестирования написанная на AutoIT (как будто нельзя было её на delphi написать =( )
Программа выводит вопрос и несколько вариантов ответа, казалось бы сиди и отвечай, но она блокирует мышь и почти всю клавиатуру оставляя в рабочем состоянии только 4 клавиши - цифры от 1 до 4
Я сам код не видел, потому-что у меня задание написать под эту прогу функцию, которая бы просто запоминала в какой последовательности пользователь нажимал эти клавиши
Я пробовал делать через _IsPressed
Т.е. в цикле вертится select с 4ми вариантами и если какой-то вариант появился то он записывается в файл
Но AutoIT выдал несколько интересных сюрпризов:
1. Записывалась только первая нажатая кнопка, а дальше ничего больше не писалось, хотя функция продолжала работать
2. Запоминалась первая нажатая кнопка и дублировалась столько раз, сколько кнопок было нажато.
3. Записывалась каждая кнопка но вводилась в файл несколько раз подряд - если бы хотя бы количество повторений было одинаковое можно было бы отфильтровать, но оно всегда разное.
Помогите разобраться.

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Отправлено: 16:29, 26-01-2013

 

Забанен


Сообщения: 5828
Благодарности: 1242

Профиль | Цитировать


Цитата McLotos:
Я пробовал делать через _IsPressed »
Может быть в этом затык:

http://www.autoitscript.com/autoit3/..._IsPressed.htm (по-английски)
http://autoit-script.ru/autoit3_docs..._ispressed.htm (по-русски)
Цитата:
If calling this function repeatedly, you should open 'user32.dll' and pass the handle.
Если функция вызывается повторно, следует открыть 'user32.dll' и передать указатель.
Там же и пример, как использовать.

Отправлено: 17:02, 26-01-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Попахивает Keylogger'ом, для отслежки ввода паролей...

Цитата McLotos:
Я сам код не видел, потому-что у меня задание написать под эту прогу функцию »
Это не причина чтобы не смотреть на код . Я даже большее скажу, это как раз таки причина чтобы таки да посмотреть на код.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 20:06, 26-01-2013 | #3


Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


Creat0R, спокойнее, всё очень просто, есть готовый тестер, у которого куча заморочек, именно поэтому мне и не показывают весь код целиком, чтобы я не смог обойти их блокировку клавиатуры и подсказать студентам как параллельно с тестером запускать блокнот с ответами. Так что вполне понятно почему этот препод усиленно старается не показывать мне код.

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Отправлено: 22:58, 26-01-2013 | #4


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата McLotos:
вполне понятно почему этот препод усиленно старается не показывать мне код »
Видимо не очень ознакомлённый с AutoIt препод, если думает что его код нельзя получить, ладно, это так...

Цитата 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
Нужн подключить библиотеку _IsPressedEx.au3

Цитата McLotos:
Я пробовал делать через _IsPressed »
Можно увидеть скрипт?

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:44, 27-01-2013 | #5


Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


Если убрать msgbox, то Ваш вариант тоже записывает каждое нажатие несколько раз.
А там немного другая система, справой стороны ведётся лог вопрос-ответ и статистика правильных ответов
Как сделать чтобы без MsgBox всё корректно работало?
Я сейчас на работе, а скрипт на домашнем компе, в общем логика там была примерно такая
если нажата 31
открыть DLL
открыть файл
записать туда А
закрыть файл
закрыть DLL
и так на каждую из 8и клавиш, потому-что как выяснилось, например 1 и Numpad1 имеют разные коды

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Отправлено: 08:17, 28-01-2013 | #6


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


McLotos, прислушайтесь к совету:
Цитата Creat0R:
Видимо не очень ознакомлённый с AutoIt препод, если думает что его код нельзя получить »
и выложите скрипт.

Отправлено: 12:07, 28-01-2013 | #7


Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить 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
Я вот например сейчас запустил эту часть кода, ввёл тупо 12341234 подряд
и он мне в файл записал
ABCCCDDDAAABBCCCCDDD
может так в самом autoit стоит какое-то ограничение, или он просто не успевает стирать из памяти букву и вводит её повторно?
Может тогда логичнее делать через массив, а после завершения (кнопка Посчитать) уже весь массив выдавать пользователю и записывать в файл? Тогда получается что эта штука, которая справа выводит номер вопроса-вариант ответа она работать не будет =(

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Последний раз редактировалось McLotos, 28-01-2013 в 12:53.


Отправлено: 12:40, 28-01-2013 | #8


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата McLotos:
Если убрать msgbox, то Ваш вариант тоже записывает каждое нажатие несколько раз. »
Исправленный вариант:

Код: Выделить весь код
#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:
Код »
Неправильное использование функции, DllOpen не нужно помещать в параметр, её нужно вызвать заранее и передавать переменную, а FileOpen тоже неверно используется, см. справку к функциям.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:42, 28-01-2013 | #9


Аватара для McLotos

Старожил


Сообщения: 410
Благодарности: 21

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Неправильное использование функции, DllOpen не нужно помещать в параметр, её нужно вызвать заранее и передавать переменную, а FileOpen тоже неверно используется, см. справку к функциям. »
Вроде делал как в примерах в AutoIT справочнике, странно.
Блин, спасибо, как всегда выручил!

-------
Старайтесь не решать свои проблемы по средствам личных сообщений, они могут быть решены очень не скоро.Не забывайте пользоваться поиском по форуму.Помните что уникальных проблем не бывает.Если всё-таки ответа не нашли, создайте тему, с подробным описанием проблемы.Спасибо за понимание.


Отправлено: 15:48, 28-01-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Запоминать последовательность нажатия определенных клавиш

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Перехват нажатия всех клавиш 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




 
Переход