Показать полную графическую версию : Перехват нажатия всех клавиш
Делаю скрипт, на гуе которого присутствуют только две метки (текстовые пояснения о проходящем этапе).
Гуя должна реагировать на клавишу Esc - это выход из скрипта, и на все остальные клавиши одинаково - это переход к следующему этапу выполнения скрипта.
С Esc все понятно - в цикле отслеживаем $GUI_EVENT_CLOSE, но вот как быть с нажатиями на все остальные клавиши??
Используй _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пасибо, я всё понимаю...
Здравствуйте.
Возник такой вопрос: нужно в autoit (или cmd) выполнить программу, которая будет перехватывать события: открытия-закрытия, копирования-перемещения, создания-стирания файлов и папок.
Уточню, - нужно не копировать файлы в укромные места, и не перенаправлять события для каких-либо подмен, а лишь регистрировать сам факт открытия-закрытия, копирования или перемещения, создания-стирания файлов и папок.
Например:
Запускаем программу, она начинает работать.
Если кто-либо что-либо открыл-закрыл, скопировал-переместил, создал-стёр в файлах или папках, то этот факт будет записываться в txt-файл с указанием времени данного действия, видом самого действия и именем файла и папки над которыми было действие.
Пробовал просто регистрировать открывающиеся окна возникающие при этих действиях (тексты в них), но при действиях в totalcomander в запись попадает только титульная строка самого totalcomander-а и больше ничего.
Регистрировать процессы бесполезно - эта информация ничего не говорит о файлах и папках с которыми работали.
Перехватывать содержание буфера обмена и нажатия клавиш нельзя - мне ненужны шпионы.
Делать скриншоты недопустимо - мне нужен регистратор имён папок и файлов с которыми производили те или иные действия, а не троян.
В autoit перепробовал всё что знал - результат не удовлетворяет.
Где-то читал, что есть встроенные средства windows для этих дел, но где они мне неизвестно (хотя решить проблему встроенными средствами windows было бы лучшим вариантом).
михаил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/)
и т.п.
Как-то пробовал RDC UDF (http://autoit-script.ru/index.php?topic=18795.0), но все задачи она, конечно, не решит.
Объём задачи конечно представляю.
Регистрация открытия-закрытия, копирования-перемещения, создания-стирания файлов и папок, через сравнение размеров файлов или дат последнего обращения недопустимо, ввиду большой загрузки системы (такая работа подразумевает собирать данные о всех файлах и папках и сравнивать их на предмет изменений, что конечно же не является вариантом).
Нужно использовать обработку событий системы - что оказалось за пределами моей "школьной программы".
Аудит?... интересно, почитаем.
С RDC UDF ранее не работал, тоже попробуем.
Думаю, что задачу придётся решать разными программными инструментами.
Аудит не совсем то, что нужно. Что-то выполнимо, а что-то нет.
Использовать несколько языков программирования, cmd и системные функции комплектом - трудоёмкое дело.
Вопрос:
Есть ли где нибудь, какая-либо информация касательно работ с событиями windows, и вообще примеры работы по отслеживанию событий системы? Хотелось бы ознакомится и с этими возможностями, что там возможно, а что невозможно.
михаил5, «других писателей у меня для Вас нет».
Спасибо за помощь.
Уже нашёл то, что нужно:
Руководство по оснастке "Просмотр событий" Windows 7 (http://www.oszone.net/11296/)
Люди бывают глупые и умные.
Глупые люди относятся к своим подозрениям как к фактам.
Умные люди проверяют свои подозрения, являются ли они фактами.
SharkyEXE
10-07-2022, 13:09
Всем здравствуйте
Возможно или нет создать код для обнаружения
Одиночное нажатие клавиши - На клавиатуре нажата кнопка один раз
Двойное нажатие клавиши - На клавиатуре быстро дважды нажата кнопка
Длительное нажатие клавиши - На клавиатуре я нажал и удерживаю кнопку
Спасибо.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC