<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Бинд и перехват кнопок клавиатуры в Windows 7]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=16704</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=16704&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Бинд и перехват кнопок клавиатуры в Windows 7».]]></description>
		<lastBuildDate>Fri, 05 Nov 2021 15:24:37 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Бинд и перехват кнопок клавиатуры в Windows 7]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=150476#p150476</link>
			<description><![CDATA[<p><strong>jerrimix</strong>, напоминаю о правилах <a href="https://forum.script-coding.com/misc.php?action=rules#code-formatting">оформления кода</a>. Освежите в памяти также <a href="https://forum.script-coding.com/misc.php?action=rules#quotation">правила цитирования</a>.</p>]]></description>
			<author><![CDATA[null@example.com (teadrinker)]]></author>
			<pubDate>Fri, 05 Nov 2021 15:24:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=150476#p150476</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Бинд и перехват кнопок клавиатуры в Windows 7]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=150472#p150472</link>
			<description><![CDATA[<p>При изменении стиля у окон можно словить разные баги. Например окно нельзя свернуть / развернуть. Ещё какие-то были у меня, уже не помню.<br />А так как в коде не подписано какие именно стили применяются (+код не очень дружелюбно написан) то лень разбираться.</p>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Fri, 05 Nov 2021 13:43:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=150472#p150472</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Бинд и перехват кнопок клавиатуры в Windows 7]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=150471#p150471</link>
			<description><![CDATA[<div class="quotebox"><cite>__Михаил__ пишет:</cite><blockquote><p>А простые способы перехвата клавиш работают?<br />И что мешало добавить программу в группу и установить перехват клавиш чисто в ней? Зачем делать такие проверки: &quot;if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; !adminControl&quot;</p></blockquote></div><p>Не совсем понимаю, каким образом в самой программе? Проверки делал, чтобы знать, что программа открыта и включался по нажатию кнопок CTRL-ALT-A режим админа, то есть позволяло сложить окно и работать в Windows. В противном случае окно кассы не дает себя закрыть и сложить и в верху нет заголовка с крестиком. </p><p>Выяснил методом проб, что проблема на Windows 7 возникает именно в этих блоках:</p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; !adminControl<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WinSet, Style, -0xC40000, Касса МойСклад<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WinMaximize, Касса МойСклад&nbsp; <br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WinSet, AlwaysOnTop, On, Касса МойСклад<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if adminControl<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WinSet, Style, +0xC40000, Касса МойСклад<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WinSet, AlwaysOnTop, Off, Касса МойСклад<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } </p><p>Функция WinSet в таком виде работает нормально и корректно только в Windows 10, почему-то AlwaysOnTop в Windows 7 отрабатывается иначе, то есть окно постоянно становится в режиме поверх всех остальных окон и не может из него выйти с параметром Off.</p>]]></description>
			<author><![CDATA[null@example.com (jerrimix)]]></author>
			<pubDate>Fri, 05 Nov 2021 12:55:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=150471#p150471</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Бинд и перехват кнопок клавиатуры в Windows 7]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=150462#p150462</link>
			<description><![CDATA[<p>А простые способы перехвата клавиш работают?<br />И что мешало добавить программу в группу и установить перехват клавиш чисто в ней? Зачем делать такие проверки: &quot;if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; !adminControl&quot;</p>]]></description>
			<author><![CDATA[null@example.com (__Михаил__)]]></author>
			<pubDate>Thu, 04 Nov 2021 20:23:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=150462#p150462</guid>
		</item>
		<item>
			<title><![CDATA[AHK: Бинд и перехват кнопок клавиатуры в Windows 7]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=150452#p150452</link>
			<description><![CDATA[<p>Добрый день.<br />Помогите разобраться. Ниже скрипт, который прекрасно работает и ловит нажатие заложенных в алгоритме сочетаний клавиш на клавиатуре, но категорически отказывается делать это на Windows 7. Ошибок при этом не выдает. По какой причине такое может быть?</p><div class="codebox"><pre><code>
#NoEnv; 
#Warn; 
#Persistent

SendMode Input
SetWorkingDir %A_ScriptDir%

global adminControl:= 0
PID:= startApp()

Loop
 {
       if WinExist(&quot;Касса МойСклад&quot;) 
         {
                if !WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; !adminControl
                  {
		      WinActivate, Касса МойСклад
                  }
                if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; !adminControl
                  {
                      WinSet, Style, -0xC40000, Касса МойСклад
                      WinMaximize, Касса МойСклад  
                      WinSet, AlwaysOnTop, On, Касса МойСклад
                  }
                if adminControl
                  {
                      WinSet, Style, +0xC40000, Касса МойСклад
                      WinSet, AlwaysOnTop, Off, Касса МойСклад
                  }
                if !adminControl 
                  {
                      DetectHiddenWindows On
                      WinGet, pidTaskMgr, PID, Диспетчер задач                                 
                      WinGet, processTaskMgr, ProcessName, Диспетчер задач                                 
                      if pidTaskMgr
                        Process, Close, %pidTaskMgr%
                      DetectHiddenWindows Off
                  }


          }

       if isProcessSuspended(PID)
         {
                MsgBox Кассовая система зависла и будет перезапущена автоматически...
                closeApp(&quot;Касса МойСклад&quot;, PID)
                PID := startApp()
         }
 }

; --------------------------------------------
$!F4::
       if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; !adminControl
         return
       else if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; adminControl
         Send !+{F4}
       else
         Send !+{F4}
       return    
$!TAB::
       if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; !adminControl
         return
       else if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; adminControl
         Send !+{TAB}
       else
         Send !+{TAB}
       return    
$!Escape::
       if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; !adminControl
         return
       else if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; adminControl
         Send !+{Escape}
       else
         Send !+{Escape}
       return    
$^Escape::
       if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; !adminControl
         return
       else if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; adminControl
         Send ^+{Escape}
       else
         Send ^+{Escape}
       return     
$LWin:: 
       if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; !adminControl
         return
       else if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; adminControl
         Send {LWin}
       else
         Send {LWin}
       return      
$RWin:: 
       if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; !adminControl
         return
       else if WinActive(&quot;Касса МойСклад&quot;) &amp;&amp; adminControl
         Send {RWin}
       else
         Send {RWin}
       return      

$^!t:: 
       if (adminControl)   
         { 
               if WinExist(&quot;Касса МойСклад&quot;) &amp;&amp; WinActive(&quot;Касса МойСклад&quot;)
                 {
                     WinSet, Style, +0xC40000, Касса МойСклад
                     WinSet, AlwaysOnTop, Off, Касса МойСклад
                 }

               Run, taskmgr.exe, , max, _taskmgrpid

               if WinExist(&quot;Диспетчер задач&quot;) 
                 {
                     WinActivate, Диспетчер задач
                 }
         }
       return      

$^!a:: 
       if (!adminControl) 
         adminControl = 1
       else adminControl = 0
       return

$^!q:: 
       closeApp(&quot;Касса МойСклад&quot;, PID)
       ExitApp
       return
; ----------------------------------------


startApp()
  { 
       path1 = C:\Program Files
       path2 = C:\Program Files (x86)

       If FileExist(path1 &quot;\moysklad-kassa\Касса МойСклад.exe&quot;)
         {
             Run, %path1%\moysklad-kassa\Касса МойСклад.exe, , max, _pid
             Return _pid
         }
       Else If FileExist(path2 &quot;\moysklad-kassa\Касса МойСклад.exe&quot;)
         {
             Run, %path2%\moysklad-kassa\Касса МойСклад.exe, , max, _pid
             Return _pid
         }   
       Else 
         {
             MsgBox Не найден модуль запуска кассовой программы
         } 
   }

closeApp(_name, _pid)
   {
       if WinExist(_name) &amp;&amp; WinActive(_name) 
       WinClose, %_name%, , 3000

       Process, Exist, %_pid%
       if ErrorLevel &gt; 0
         {
             Process, Close, %_pid%
             if !ErrorLevel
             MsgBox &#039;Система не смогла завершить процесс, свяжитесь с системным администратором&#039;
         }

       Sleep, 1000
   }

isProcessSuspended(_pid)	
   {	
        ; 0 = Unknown, 1 = Other, 2 = Ready, 3 = Running, 4 = Blocked, 5 = Suspended Blocked, 6 = Suspended Ready

	For thread In ComObjGet(&quot;winmgmts:&quot;).ExecQuery(&quot;SELECT * FROM Win32_Thread WHERE ProcessHandle = &quot; _pid)
 	   If (thread.ThreadWaitReason != 5)
	     Return 0	; Not suspended.
	     Return 1	; Suspended.
   }
</code></pre></div><br /><p>Спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (jerrimix)]]></author>
			<pubDate>Thu, 04 Nov 2021 17:35:08 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=150452#p150452</guid>
		</item>
	</channel>
</rss>
