<?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="https://forum.script-coding.com/extern.php?action=feed&amp;tid=12858&amp;type=atom" />
	<updated>2017-09-30T16:41:35Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=12858</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Установка хуков на определенные клавиши, и запись их в переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=119644#p119644" />
			<content type="html"><![CDATA[<p><strong>Viruzober</strong>, так поставьте в своем хуке исключение на определенные клавиши.</p>]]></content>
			<author>
				<name><![CDATA[svoboden]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34280</uri>
			</author>
			<updated>2017-09-30T16:41:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=119644#p119644</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Установка хуков на определенные клавиши, и запись их в переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=119643#p119643" />
			<content type="html"><![CDATA[<p><strong>svoboden</strong> OutputVar<br />Имя переменной, куда будет помещено состояние клавиши: для нажатой в переменную будет записана буква D, для отпущенной - U (однако функция GetKeyState() возвращает 1 для нажатой и 0 для отпущенной). Переменная будет пустой, если состояние клавиши получить не удалось. Проблема в том, что клавиш может быть много, и на каждую делать GetKeyState тяжело. При этом клавиши должны срабатывать в любое время, то есть нужна первое действие, нажимаем одно, нужно второе, нажимаем другое. А здесь я как понимаю скрипт выполняется по шагам. Поэтому лучше использовать хуки. А вот как их переделать? Попытаюсь объяснить. В программе для которой пишется скрипт, есть несколько кнопок, на которые нужно нажимать в абсолютно разном порядке, поэтому надо отследить что нажимает пользователь, а потом нажатую клавишу сопоставить с действием. Поэтому пошаговости не получится.</p>]]></content>
			<author>
				<name><![CDATA[Viruzober]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34705</uri>
			</author>
			<updated>2017-09-30T15:34:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=119643#p119643</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Установка хуков на определенные клавиши, и запись их в переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=119640#p119640" />
			<content type="html"><![CDATA[<p>А что, нельзя просто использовать GetKeyState или хоткеи?<br />Например: </p><div class="codebox"><pre><code>^!vk45::
var = Ctrl+Alt+E
MsgBox % var
return</code></pre></div>]]></content>
			<author>
				<name><![CDATA[svoboden]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34280</uri>
			</author>
			<updated>2017-09-30T10:22:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=119640#p119640</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Установка хуков на определенные клавиши, и запись их в переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=119639#p119639" />
			<content type="html"><![CDATA[<p><span style="color: green">Убрал тему-дубликат, перенёс ответы сюда.<br /><strong>Viruzober</strong>,</span><br /></p><div class="quotebox"><cite>Правила пишет:</cite><blockquote><p>2.5. Запрещается флуд. Размещение нескольких однотипных постов или тем (веток) приравнивается ко флуду.</p></blockquote></div>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2017-09-30T06:43:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=119639#p119639</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Установка хуков на определенные клавиши, и запись их в переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=119638#p119638" />
			<content type="html"><![CDATA[<p><strong>MandarinKa02</strong> Спасибо огромное, но маленько не то. Задача следующая.<br />Есть программа, которой необходимо управлять при помощи скрипта.<br />То есть кликать мышкой в нужных местах. При этом, должно происходить отслеживание нажатых клавиш и их комбинаций. Далее все что нажато пользователем записывается в переменную, и в зависимости от того что записано выполняется определенное действие. Скрипт при этом должен работать постоянно, и не пошагово, а реагировать на любую прописанную в нем клавишу, в любом месте. И звените, все понял в AHK, но вот как с клавишами быть не пойму.</p>]]></content>
			<author>
				<name><![CDATA[Viruzober]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34705</uri>
			</author>
			<updated>2017-09-29T19:24:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=119638#p119638</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Установка хуков на определенные клавиши, и запись их в переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=119637#p119637" />
			<content type="html"><![CDATA[<p>Вот пример, думаю сами сможете все сделать.<br /></p><div class="codebox"><pre><code>#SingleInstance, Force

Global aCommand_Title := &quot;Открыть блокнот&quot;



Gui, Font, cFFFFFF s10 bold, Arial
Gui, Add, Text, x10  y25 w70 h20, Клавиша
Gui, Add, Text, x105 y25 w280 h20, Что делает


	Gui, Add, Hotkey, x5   y25 w90  h20 vHot1, % 1
	Gui, Add, Edit,   x105 y25 w440 h20 vWhatToDo1, % aCommand_Title
	GuiControl, Disable, WhatToDo1


Gui, Add, Button, x256 y390 w80 h20 gAccept, Применить
Gui, Show, h420 w624 Center, AutoHotKey
Return



F5::Reload

Accept:
	Hotkey, % Hot1, Off, UseErrorLevel
	HotKey(&quot;Off&quot;)

	GuiControlGet, Hot1
	aHotkey1 := Hot1
	Hotkey, % Hot1, HotKeyy, On, UseErrorLevel
	HotKey(&quot;On&quot;)
return

HotKeyy:
	If(A_ThisHotkey = aHotkey1)
		HotKey(1)
Return


HotKey(aIndex)
{
	If(aIndex = 1) ;Открыть блокнот
		Run, calc.exe
}


GuiClose:
ExitApp</code></pre></div>]]></content>
			<author>
				<name><![CDATA[MandarinKa02]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34409</uri>
			</author>
			<updated>2017-09-29T15:04:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=119637#p119637</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Установка хуков на определенные клавиши, и запись их в переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=119604#p119604" />
			<content type="html"><![CDATA[<p><span style="color: green"><strong>Viruzober</strong>, расставьте точки и заглавные буквы.</span><br /><a href="http://forum.script-coding.com/viewtopic.php?pid=117594#p117594">http://forum.script-coding.com/viewtopi … 94#p117594</a><br /><a href="http://forum.script-coding.com/viewtopic.php?pid=119602#p119602">http://forum.script-coding.com/viewtopi … 02#p119602</a></p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2017-09-27T14:20:33Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=119604#p119604</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Установка хуков на определенные клавиши, и запись их в переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=119602#p119602" />
			<content type="html"><![CDATA[<p><strong>teadrinker</strong> Входные клавиши, например так ctrl+f, или g, или f1, или ctrl+shift+p. Думаю принцип понятен. А выходные, так же, но в другую переменную.</p>]]></content>
			<author>
				<name><![CDATA[Viruzober]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34705</uri>
			</author>
			<updated>2017-09-27T07:51:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=119602#p119602</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Установка хуков на определенные клавиши, и запись их в переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=117668#p117668" />
			<content type="html"><![CDATA[<p>В каком виде вы собираетесь записывать их в переменную, и в каком виде они потом должны записываться?</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2017-07-30T14:32:51Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=117668#p117668</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Установка хуков на определенные клавиши, и запись их в переменную]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=117665#p117665" />
			<content type="html"><![CDATA[<p>Как переделать чтобы скрипт устанавливал хук только на определенные клавиши, указанные в переменной, и записывал их в переменную? Например, в первой переменной пишем Ctrl+f, или f3, или G, или Ctrl+alt+e, и при т.д. И при при нажатии любой из них, клавиша пишется в таком же виде в другую переменную. Срабатывание скрипта предполагается в определенном окне.<br /></p><div class="codebox"><pre><code>	CoordMode, ToolTip
hHookKeybd := DllCall(&quot;SetWindowsHookEx&quot;
   , Int, WH_KEYBOARD_LL := 13
   , Ptr, RegisterCallback(&quot;LowLevelKeyboardProc&quot;, &quot;Fast&quot;)
   , Ptr, DllCall(&quot;GetModuleHandle&quot;, UInt, 0, Ptr)
   , UInt, 0, Ptr)
OnExit( Func(&quot;Exit&quot;).Bind(hHookKeybd) )
Return

Esc::ExitApp

Exit(hHookKeybd)  {
   DllCall(&quot;UnhookWindowsHookEx&quot;, Ptr, hHookKeybd)
}

LowLevelKeyboardProc(nCode, wParam, lParam)  {
   static oMem := [], lpData, size := VarSetCapacity(lpData, 16, 0)

   DllCall(&quot;RtlMoveMemory&quot;, Ptr, &amp;lpData, Ptr, lParam, Ptr, size)
   oMem.Push([wParam, &amp;lpData])
   timer := Func(&quot;EventHandling&quot;).Bind(oMem)  ; во избежание фризов клавиатуры обработка событий должна
   SetTimer, % timer, -10                     ; происходить обязательно по таймеру, а не в теле этой функции
   Return DllCall(&quot;CallNextHookEx&quot;, Ptr, 0, Int, nCode, Ptr, wParam, Ptr, lParam)
}

EventHandling(oMem)  {
   static oMsg := {0x100: &quot;WM_KEYDOWN&quot;, 0x101: &quot;WM_KEYUP&quot;, 0x104: &quot;WM_SYSKEYDOWN&quot;, 0x105: &quot;WM_SYSKEYUP&quot;}
        , oMembers := [&quot;vk&quot;, &quot;sc&quot;, &quot;flags&quot;, &quot;time&quot;]
        , oFlagOffsets := {LLKHF_EXTENDED: 0, LLKHF_LOWER_IL_INJECTED: 1, LLKHF_INJECTED: 4, LLKHF_ALTDOWN: 5, LLKHF_UP: 7}

   while (oMem[1] != &quot;&quot;)   {
      key := oMem.RemoveAt(1)
      wp := key[1], lp := key[2]

      msg := wp
      for k, v in oMembers
         %v% := NumGet(lp + (k - 1)*4, &quot;UInt&quot;)
      
      for k, v in oFlagOffsets
         %k% := (flags &gt;&gt; v) &amp; 1
      
      sc |= LLKHF_EXTENDED &lt;&lt; 8
      
; текстовые значения в oMembers и названия ключей в oFlagOffsets являются
; названиями переменных, в которых теперь находятся соответствующие значения:
      ToolTip % &quot;Message = &quot;   . oMsg[msg]           . &quot;`n&quot;
              . &quot;vkCode = &quot;    . Format(&quot;{:#x}&quot;, vk) . &quot;`n&quot;
              . &quot;scCode = &quot;    . Format(&quot;{:#x}&quot;, sc) . &quot;`n&quot;
              . &quot;pressed = &quot;   . !LLKHF_UP           . &quot;`n&quot;
              . &quot;Time = &quot;      . time                . &quot;`n&quot;
              . &quot;Injected = &quot;  . LLKHF_INJECTED      . &quot;`n&quot;
              . &quot;Lower_IL_Injected = &quot; . LLKHF_LOWER_IL_INJECTED, 0, 0
   } 
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Viruzober]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=34705</uri>
			</author>
			<updated>2017-07-30T13:21:30Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=117665#p117665</id>
		</entry>
</feed>
