Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   Перехват нажатия всех клавиш (http://forum.oszone.net/showthread.php?t=210072)

d234 28-06-2011 21:13 1703230

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

Creat0R 29-06-2011 00:21 1703337

Используй _IsPressedEx:

Код:

#include <IsPressedEx.au3>

If _IsPressedEx("[:ALLKEYS:]") Then
    _NextStep()
EndIf


TERMINAL 25-07-2011 17:26 1719645

Creat0R, а как сделать чтобы через ToolTip нажатые клавиши выводились ? (неполучается...)

madmasles 25-07-2011 17:56 1719666

Цитата:

Цитата TERMINAL
а как сделать чтобы через ToolTip нажатые клавиши выводились »

Попробуйте так:
Код:

#include <IsPressedEx.au3>
#include <WinAPIEx.au3>;http://autoit-script.ru/index.php/topic,47.0.html

Opt('MustDeclareVars', 1)

HotKeySet('{Esc}', '_Quit')

Global $fTimeOld, $fTime, $sPressed, $iRet, $iTime

AdlibRegister('_Show', 1000)
$iTime = TimerInit()
While 1
    $iRet = _IsPressedEx('[:ALLKEYS:]')
    If $iRet Then
        $fTime = Not $fTime
        If StringInStr(__KeyGetType($iRet, 0), 'mouse') Then
            $sPressed = 'Mouse (' & __KeyGetType($iRet, 0) & ')'
        Else
            $sPressed = 'Key (' & __KeyGetType($iRet, 0) & ')'
        EndIf
    EndIf
    If $fTimeOld <> $fTime Then
        $fTimeOld = $fTime
        $iTime = TimerInit()
    EndIf
    Sleep(10)
WEnd

Func _Show()
    If $sPressed Then
        ToolTip('Прошло после последнего нажатия: ' & _WinAPI_StrFromTimeInterval(TimerDiff($iTime)) & @LF & 'Нажимали: ' & _
                $sPressed & @LF & @LF & 'Совсем ничего не делали: ' & _WinAPI_StrFromTimeInterval(_WinAPI_GetIdleTime()), 0, 0)
    Else
        ToolTip('Ничего не нажимали: ' & _WinAPI_StrFromTimeInterval(TimerDiff($iTime)) & @LF & @LF & _
                'Совсем ничего не делали: ' & _WinAPI_StrFromTimeInterval(_WinAPI_GetIdleTime()), 0, 0)
    EndIf
EndFunc  ;==>_Show

Func _Quit()
    Exit
EndFunc  ;==>_Quit


TERMINAL 28-07-2011 10:24 1721400

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 1721567

TERMINAL,
А зачем Вам клавиатурный шпион?

TERMINAL 29-07-2011 11:47 1722143

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

madmasles 30-07-2011 11:08 1722736

TERMINAL,
*click*

TERMINAL 01-08-2011 14:59 1723944

madmasles, страница ошибку выдаёт...

madmasles 01-08-2011 18:02 1724043

Цитата:

Цитата TERMINAL
страница ошибку выдаёт »


TERMINAL 02-08-2011 09:53 1724380

madmasles, cпасибо, я всё понимаю...

михаил5 01-06-2017 19:12 2741433

Здравствуйте.

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

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

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

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

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

Iska 01-06-2017 20:19 2741444

михаил5, Вы себе примерный объём задачи представляете для этого всего и вся?

Цитата:

Цитата михаил5
Где-то читал, что есть встроенные средства windows для этих дел, но где они мне неизвестно »

Аудит. Начните, например, отсюда:и т.п.

oz84 01-06-2017 21:59 2741462

Как-то пробовал RDC UDF, но все задачи она, конечно, не решит.

михаил5 02-06-2017 10:03 2741528

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

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

михаил5 07-06-2017 15:13 2742702

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

Iska 07-06-2017 15:46 2742712

михаил5, «других писателей у меня для Вас нет».

михаил5 08-06-2017 14:19 2742923

Спасибо за помощь.
Уже нашёл то, что нужно:
Руководство по оснастке "Просмотр событий" Windows 7




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

SharkyEXE 10-07-2022 13:09 2988210

Всем здравствуйте

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

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

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

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

Спасибо.


Время: 11:02.

Время: 11:02.
© OSzone.net 2001-