1 (изменено: G0r, 2011-01-10 21:24:03)

Тема: AHK: Создание лога нажатых клавиш.

Здравствуйте.
Пытаюсь написать скрипт для создания лога нажатых клавиш.
Сначала решил повесить на клавиши скрипты, вот что вышло:

q::
FileAppend, q`n, 1.txt
SendPlay, q
return
w::
FileAppend, w`n, 1.txt
SendPlay, w
return
e::
FileAppend, e`n, 1.txt
SendPlay, e
return

И так далее для каждой клавиши.
Но такой скрипт не учитывает каплюкс.

Написал еще такой: (Для клавиши q)

f:
GetKeyState, CapsState, CapsLock, T
If CapsState = D
{
hotkey, q, qb, on
}
Else
{
hotkey, q, qm, on
}
return
goto f


qm:
FileAppend, Q`n, 1.txt
SendPlay, Q
goto f
return
qb:
FileAppend, q`n, 1.txt
SendPlay, q
goto f
return

Но он почему-то работает не правильно, а именно:
Сначала я нажал q с капсом, затем без капса, и еще раз без капса. А в лог полетело вот такое:

Q
Q
q

Тоесть первые два раза он записал бекву  с капсом, и только на третий без. А должно было быть наоборот.
Помогите пожалуйста с моим вопросом, уж очень нужна мне такая штука.
PS. Про команду KeyHistory знаю, но не знаю как ей сохранить лог в файл(если это возможно конечно)

2

Re: AHK: Создание лога нажатых клавиш.

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

SetKeyDelay, 0
start_time := A_TickCount


*1::
*2::
*3::
*4::
*5::
*6::
*7::
*8::
*9::
*0::

var := REGEXREPLACE(A_ThisHotkey, "(\*)(\w+)", "$2")

IF %var%flag <> 1
{
elapsed_time := A_TickCount - start_time
send, Sleep, %elapsed_time%`n
start_time := A_TickCount
SendRaw Send {%var% Down}`n
%var%flag := 1
}
return



*1 Up::
*2 Up::
*3 Up::
*4 Up::
*5 Up::
*6 Up::
*7 Up::
*8 Up::
*9 Up::
*0 Up::

var := REGEXREPLACE(A_ThisHotkey, "(\*)(\w+)(\s)Up", "$2")

IF %var%flag  = 1
{
elapsed_time := A_TickCount - start_time
send, Sleep, %elapsed_time%`n
start_time := A_TickCount
SendRaw Send {%var% Up}`n
%var%flag := 0
}
return

3

Re: AHK: Создание лога нажатых клавиш.

Ура, нашел решения проблемы, просто подкорректировал свой второй скрипт.
Вот что вышло(для буквы q)

hotkey, q, qm, on
hotkey, CapsLock, cp, on

GetKeyState, CapsState, CapsLock, T
If CapsState = D
cp = 1
else
cp = 0
cp:
SendPlay, {CapsLock}
if cp = 1
cp = 0
else
cp = 1
return
qm:
if cp = 1 
{
FileAppend, q`n, 1.txt
SendPlay, q
}
else
{
FileAppend, Q`n, 1.txt
SendPlay, Q
}
return

Работает отлично! Берите, если кому надо.