PDA

Показать полную графическую версию : Перехват нажатия всех клавиш


d234
28-06-2011, 21:13
Делаю скрипт, на гуе которого присутствуют только две метки (текстовые пояснения о проходящем этапе).
Гуя должна реагировать на клавишу Esc - это выход из скрипта, и на все остальные клавиши одинаково - это переход к следующему этапу выполнения скрипта.
С Esc все понятно - в цикле отслеживаем $GUI_EVENT_CLOSE, но вот как быть с нажатиями на все остальные клавиши??

Creat0R
29-06-2011, 00:21
Используй _IsPressedEx (http://autoit-script.ru/index.php?topic=1391.0):

#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <IsPressedEx.au3>

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) _IsPressedEx("[:ALLKEYS:]") Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
_NextStep()
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

TERMINAL
25-07-2011, 17:26
Creat0R, а как сделать чтобы через ToolTip нажатые клавиши выводились ? (неполучается...)

madmasles
25-07-2011, 17:56
а как сделать чтобы через ToolTip нажатые клавиши выводились »Попробуйте так:#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <IsPressedEx.au3>
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <WinAPIEx.au3>;http://autoit-script.ru/index.php/topic,47.0.html

Opt (http://www.autoitscript.com/autoit3/docs/functions/Opt.htm)('MustDeclareVars', 1)

HotKeySet (http://www.autoitscript.com/autoit3/docs/functions/HotKeySet.htm)('{Esc}', '_Quit')

Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $fTimeOld, $fTime, $sPressed, $iRet, $iTime

AdlibRegister (http://www.autoitscript.com/autoit3/docs/functions/AdlibRegister.htm)('_Show', 1000)
$iTime = TimerInit (http://www.autoitscript.com/autoit3/docs/functions/TimerInit.htm)()
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$iRet = _IsPressedEx('[:ALLKEYS:]')
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iRet Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$fTime = Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) $fTime
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) StringInStr (http://www.autoitscript.com/autoit3/docs/functions/StringInStr.htm)(__KeyGetType($iRet, 0), 'mouse') Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sPressed = 'Mouse (' & __KeyGetType($iRet, 0) & ')'
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
$sPressed = 'Key (' & __KeyGetType($iRet, 0) & ')'
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $fTimeOld <> $fTime Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$fTimeOld = $fTime
$iTime = TimerInit (http://www.autoitscript.com/autoit3/docs/functions/TimerInit.htm)()
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(10)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _Show()
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sPressed Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
ToolTip (http://www.autoitscript.com/autoit3/docs/functions/ToolTip.htm)('Прошло после последнего нажатия: ' & _WinAPI_StrFromTimeInterval(TimerDiff (http://www.autoitscript.com/autoit3/docs/functions/TimerDiff.htm)($iTime)) & @LF (http://www.autoitscript.com/autoit3/docs/macros.htm#@lf) & 'Нажимали: ' & _
$sPressed & @LF (http://www.autoitscript.com/autoit3/docs/macros.htm#@lf) & @LF (http://www.autoitscript.com/autoit3/docs/macros.htm#@lf) & 'Совсем ничего не делали: ' & _WinAPI_StrFromTimeInterval(_WinAPI_GetIdleTime()), 0, 0)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
ToolTip (http://www.autoitscript.com/autoit3/docs/functions/ToolTip.htm)('Ничего не нажимали: ' & _WinAPI_StrFromTimeInterval(TimerDiff (http://www.autoitscript.com/autoit3/docs/functions/TimerDiff.htm)($iTime)) & @LF (http://www.autoitscript.com/autoit3/docs/macros.htm#@lf) & @LF (http://www.autoitscript.com/autoit3/docs/macros.htm#@lf) & _
'Совсем ничего не делали: ' & _WinAPI_StrFromTimeInterval(_WinAPI_GetIdleTime()), 0, 0)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_Show

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _Quit()
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_Quit

TERMINAL
28-07-2011, 10:24
madmasles, Немогу побороть в твоём скрипте ошибку Duplicate function name.:Func _Show() :
>"C:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\tets.au3" /autoit3dir "C:\Program Files\AutoIt3" /UserParams
+>08:50:22 Starting AutoIt3Wrapper v.2.0.1.24 Environment(Language:0419 Keyboard:00000409 OS:WIN_XP/Service Pack 3 CPU:X64 OS:X86)
>Running AU3Check (1.54.19.0) from:C:\Program Files\AutoIt3
C:\tets.au3(29,13) : ERROR: _Show() already defined.
Func _Show()
~~~~~~~~~~~~^
C:\tets.au3(39,13) : ERROR: _Quit() already defined.
Func _Quit()
~~~~~~~~~~~~^

C:\tets.au3 - 2 error(s), 0 warning(s)
!>08:50:23 AU3Check ended.rc:2
>Running:(3.3.6.1):C:\Program Files\AutoIt3\autoit3.exe "C:\tets.au3"
C:\tets.au3 (29) : ==> Duplicate function name.:
Func _Show()

->08:50:25 AutoIT3.exe ended.rc:1
>Exit code: 1 Time: 4.273


всё, СУПЕР, списибо-порешал ошибку, но вопрос теперь другой, а возможно ли чтобы показывало польшие и маленькие буквы-на данный момент только большие выводятся и нет различия между русскими и английскими буквами?

madmasles
28-07-2011, 14:06
TERMINAL,
А зачем Вам клавиатурный шпион?

TERMINAL
29-07-2011, 11:47
madmasles, )) у меня уже есть один и довольно неплохой, но этот вариант мне кажется намного лучше в работе...
Клавиатурный шпион ставлю к себе в терминальную сессию...при входе в терминал у меня есть 3 секунды чтобы набрать на клавиатуре пароль-если пароль не верен или ввобще не вводился-отсылается мне письмо на почту о несанкционированном входе в терминальную сессию. Тоесть получается двойная защита, при входе на сервак и на самом сервере.

madmasles
30-07-2011, 11:08
TERMINAL,
*click* (http://autoit-script.ru/index.php?action=announcement;aid=10)

TERMINAL
01-08-2011, 14:59
madmasles, страница ошибку выдаёт...

madmasles
01-08-2011, 18:02
страница ошибку выдаёт »

TERMINAL
02-08-2011, 09:53
madmasles, cпасибо, я всё понимаю...

михаил5
01-06-2017, 19:12
Здравствуйте.

Возник такой вопрос: нужно в autoit (или cmd) выполнить программу, которая будет перехватывать события: открытия-закрытия, копирования-перемещения, создания-стирания файлов и папок.
Уточню, - нужно не копировать файлы в укромные места, и не перенаправлять события для каких-либо подмен, а лишь регистрировать сам факт открытия-закрытия, копирования или перемещения, создания-стирания файлов и папок.

Например:
Запускаем программу, она начинает работать.
Если кто-либо что-либо открыл-закрыл, скопировал-переместил, создал-стёр в файлах или папках, то этот факт будет записываться в txt-файл с указанием времени данного действия, видом самого действия и именем файла и папки над которыми было действие.

Пробовал просто регистрировать открывающиеся окна возникающие при этих действиях (тексты в них), но при действиях в totalcomander в запись попадает только титульная строка самого totalcomander-а и больше ничего.

Регистрировать процессы бесполезно - эта информация ничего не говорит о файлах и папках с которыми работали.
Перехватывать содержание буфера обмена и нажатия клавиш нельзя - мне ненужны шпионы.
Делать скриншоты недопустимо - мне нужен регистратор имён папок и файлов с которыми производили те или иные действия, а не троян.

В autoit перепробовал всё что знал - результат не удовлетворяет.
Где-то читал, что есть встроенные средства windows для этих дел, но где они мне неизвестно (хотя решить проблему встроенными средствами windows было бы лучшим вариантом).

Iska
01-06-2017, 20:19
михаил5, Вы себе примерный объём задачи представляете для этого всего и вся?

Где-то читал, что есть встроенные средства windows для этих дел, но где они мне неизвестно »
Аудит. Начните, например, отсюда:
Применение Аудита Windows для отслеживания деятельности пользователей | Peter Gubarevich (https://blog.windowsnt.lv/2011/08/31/tracking-user-activity-russian/)
Локальная политика безопасности. Часть 3: Политика аудита (http://www.oszone.net/11632/audit)
Аудит удаления и доступа к файлам и запись событий в лог-файл средствами Powershell / Хабрахабр (https://habrahabr.ru/post/150149/)
и т.п.

oz84
01-06-2017, 21:59
Как-то пробовал RDC UDF (http://autoit-script.ru/index.php?topic=18795.0), но все задачи она, конечно, не решит.

михаил5
02-06-2017, 10:03
Объём задачи конечно представляю.
Регистрация открытия-закрытия, копирования-перемещения, создания-стирания файлов и папок, через сравнение размеров файлов или дат последнего обращения недопустимо, ввиду большой загрузки системы (такая работа подразумевает собирать данные о всех файлах и папках и сравнивать их на предмет изменений, что конечно же не является вариантом).
Нужно использовать обработку событий системы - что оказалось за пределами моей "школьной программы".

Аудит?... интересно, почитаем.
С RDC UDF ранее не работал, тоже попробуем.
Думаю, что задачу придётся решать разными программными инструментами.

михаил5
07-06-2017, 15:13
Аудит не совсем то, что нужно. Что-то выполнимо, а что-то нет.
Использовать несколько языков программирования, cmd и системные функции комплектом - трудоёмкое дело.
Вопрос:
Есть ли где нибудь, какая-либо информация касательно работ с событиями windows, и вообще примеры работы по отслеживанию событий системы? Хотелось бы ознакомится и с этими возможностями, что там возможно, а что невозможно.

Iska
07-06-2017, 15:46
михаил5, «других писателей у меня для Вас нет».

михаил5
08-06-2017, 14:19
Спасибо за помощь.
Уже нашёл то, что нужно:
Руководство по оснастке "Просмотр событий" Windows 7 (http://www.oszone.net/11296/)




Люди бывают глупые и умные.
Глупые люди относятся к своим подозрениям как к фактам.
Умные люди проверяют свои подозрения, являются ли они фактами.

SharkyEXE
10-07-2022, 13:09
Всем здравствуйте

Возможно или нет создать код для обнаружения

Одиночное нажатие клавиши - На клавиатуре нажата кнопка один раз

Двойное нажатие клавиши - На клавиатуре быстро дважды нажата кнопка

Длительное нажатие клавиши - На клавиатуре я нажал и удерживаю кнопку

Спасибо.




© OSzone.net 2001-2012