<?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=12286&amp;type=atom" />
	<updated>2017-01-07T08:05:24Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=12286</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отключение интернета для конкретной программы]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=110672#p110672" />
			<content type="html"><![CDATA[<p><strong>Alex_Lexon</strong> В дополнение.<br />У меня из наработок есть набор функций , которые реализуют <strong>стандартный поток ввода/вывода(stdin/stdout/stderr)</strong>, как в Си.<br />Этого нет в AHK, т.е. есть, но частично и не полностью.</p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header"><strong>+</strong>&nbsp;RunCon.ahk</div><div class="fancy_spoiler"><div class="codebox"><pre><code>; ======= Определение параметров и статуса Интернета ======
fnInternetState(arOut)  
{
  ;global  Internet, NetName :=1, NetDHCP :=2, NetIP :=3, NetGate :=4, NetState:=5, NetST:=1, FindKey :=2
  global  Internet, NetName, NetDHCP, NetIP, NetGate, NetState, NetST, FindKey
  k:=1
  for i, j in arOut 
    {
     while(Internet[k,FindKey])
       {
         vFindKey:=Internet[k,FindKey]
         l := StrLen(vFindKey)
         vPos:=InStr(j, vFindKey)
         if (vPos)
             Internet[k,NetName]:=vStr0:=SubStr(j, vPos+l), k++
         Break
       }
    }
  Internet[NetState,NetST]:= false  
  if (Internet[NetDHCP,NetST]=&quot;Да&quot;)
         Internet[NetState,NetST]:= true
 return Internet[NetState,NetST]
}


; ======= Постпарсер RunCon ===============================
fnParseStdIn(StdIn)
  {
    Arr := [], i := 0
    Loop, parse, StdIn, `r`n  
      { 
        Row := RegExReplace(A_LoopField, &quot;&quot;&quot;| |&quot; A_Tab)
        If Row is space 
            Continue
        Arr[++i] := Row 
      }
  Return Arr
  }

; ======= Функция RunCon ==================================

RunCon(CmdLine, Input, ByRef Output)
{
    static BufSizeChar := 1024, hParent := 0
    static Show := 0, Flags := 0x101  ; STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW
    static Buf, BufSizeByte, ProcessInfo, StartupInfo, PipeAttribs
    static piSize, siSize, paSize, flOffset, shOffset, ihOffset
    static inOffset, outOffset, errOffset, thrOffset
    If (!hParent) {
        BufSizeByte := A_IsUnicode ? BufSizeChar * 2 : BufSizeChar
        If (A_PtrSize = 8) {
            piSize := 24, siSize := 104, paSize = 24
            flOffset := 60, shOffset := 64, ihOffset := 16
            inOffset := 80, outOffset := 88, errOffset := 96
            thrOffset := 8
        }
        Else {
            piSize := 16, siSize := 68, paSize = 12
            flOffset := 44, shOffset := 48, ihOffset := 8
            inOffset := 56, outOffset := 60, errOffset := 64
            thrOffset := 4
        }
        VarSetCapacity(Buf, BufSizeByte, 0),    VarSetCapacity(ProcessInfo, piSize, 0)
        VarSetCapacity(StartupInfo, siSize, 0), VarSetCapacity(PipeAttribs, paSize, 0)
        NumPut(siSize, StartupInfo, 0, &quot;uint&quot;), NumPut(Flags, StartupInfo, flOffset, &quot;uint&quot;)
        NumPut(Show, StartupInfo, shOffset, &quot;ushort&quot;)
        NumPut(paSize, PipeAttribs, 0, &quot;uint&quot;), NumPut(1, PipeAttribs, ihOffset, &quot;int&quot;)
        hParent := DllCall(&quot;GetCurrentProcess&quot;, &quot;ptr&quot;)
    }
    DllCall(&quot;CreatePipe&quot;, &quot;ptr *&quot;, hRead1_tmp, &quot;ptr *&quot;, hWrite2
                        , &quot;ptr&quot;, &amp;PipeAttribs, &quot;uint&quot;, 0)
    DllCall(&quot;CreatePipe&quot;, &quot;ptr *&quot;, hRead2, &quot;ptr *&quot;, hWrite1_tmp
                        , &quot;ptr&quot;, &amp;PipeAttribs, &quot;uint&quot;, 0)

    NumPut(hRead2,  StartupInfo, inOffset, &quot;ptr&quot;) 
    NumPut(hWrite2, StartupInfo, outOffset, &quot;ptr&quot;)
    NumPut(hWrite2, StartupInfo, errOffset, &quot;ptr&quot;)
    
    DllCall(&quot;DuplicateHandle&quot;, &quot;ptr&quot;, hParent, &quot;ptr&quot;, hRead1_tmp
                             , &quot;ptr&quot;, hParent, &quot;ptr *&quot;, hRead1
                             , &quot;uint&quot;, 0, &quot;uint&quot;, 0
                             , &quot;uint&quot;, 2)    ; DUPLICATE_SAME_ACCESS
    DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, hRead1_tmp)
    DllCall(&quot;DuplicateHandle&quot;, &quot;ptr&quot;, hParent, &quot;ptr&quot;, hWrite1_tmp
                             , &quot;ptr&quot;, hParent, &quot;ptr *&quot;, hWrite1
                             , &quot;uint&quot;, 0, &quot;uint&quot;, 0
                             , &quot;uint&quot;, 2)
    DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, hWrite1_tmp)
    
    DllCall(&quot;ExpandEnvironmentStrings&quot;, &quot;str&quot;, CmdLine, &quot;str&quot;, Buf, &quot;uint&quot;, BufSizeChar)
    CmdLine := Buf
    Ret := DllCall(&quot;CreateProcess&quot;, &quot;ptr&quot;, 0, &quot;str&quot;, CmdLine, &quot;ptr&quot;, 0, &quot;ptr&quot;, 0
                                  , &quot;uint&quot;, 1, &quot;uint&quot;, 0, &quot;ptr&quot;, 0, &quot;ptr&quot;, 0
                                  , &quot;ptr&quot;, &amp;StartupInfo, &quot;ptr&quot;, &amp;ProcessInfo)
    If (!Ret) {
        MsgBox,, %A_ThisFunc%, Не удалось создать процесс.
        Output := &quot;&quot;
        Return 1
    }
    hChild := NumGet(ProcessInfo, 0, &quot;ptr&quot;)
    DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, NumGet(ProcessInfo, thrOffset, &quot;ptr&quot;))
    DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, hRead2)
    DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, hWrite2)
    If (Input) {
        InLen := StrLen(Input) + 2
        VarSetCapacity(InBuf, InLen, 0)
        StrPut(Input . &quot;`r`n&quot;, &amp;InBuf, &quot;cp866&quot;)
        DllCall(&quot;WriteFile&quot;, &quot;ptr&quot;, hWrite1, &quot;ptr&quot;, &amp;InBuf, &quot;uint&quot;, InLen
                           , &quot;uint *&quot;, BytesWritten, &quot;uint&quot;, 0)
    }
    DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, hWrite1)
    Output := &quot;&quot;
    Loop {
        If not DllCall(&quot;ReadFile&quot;, &quot;ptr&quot;, hRead1, &quot;ptr&quot;, &amp;Buf, &quot;uint&quot;, BufSizeByte
                                 , &quot;uint *&quot;, BytesRead, &quot;uint&quot;, 0)
            Break
        NumPut(0, Buf, BytesRead, &quot;Char&quot;)
        Output .= StrGet(&amp;Buf, &quot;cp866&quot;)
    }
    DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, hRead1)
    DllCall(&quot;GetExitCodeProcess&quot;, &quot;ptr&quot;, hChild, &quot;int *&quot;, ExitCode)
    DllCall(&quot;CloseHandle&quot;, &quot;ptr&quot;, hChild)
    Return ExitCode
}</code></pre></div></div></div><p> Надеюсь, что пригодится.</p><p>И забыл...<br />Функции <strong>fnInternetState</strong> и <strong>fnParseStdIn</strong> - не важны, это надстройка для функции <strong>RunCon</strong> , она главная.</p>]]></content>
			<author>
				<name><![CDATA[Indomito]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27285</uri>
			</author>
			<updated>2017-01-07T08:05:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=110672#p110672</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отключение интернета для конкретной программы]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=110640#p110640" />
			<content type="html"><![CDATA[<p><a href="https://cse.google.com/cse?cx=010629462602499112316:ywoq_rufgic&amp;q=firewall#gsc.tab=0&amp;gsc.q=firewall&amp;gsc.page=1">Поищите на англоязычном форуме.</a> Взять к примеру <a href="https://autohotkey.com/board/topic/77880-enabledisable-windows-firewall-rules/">&quot;enable/disable Windows firewall rules?&quot;</a>.<br /></p><div class="codebox"><pre><code>Run, netsh firewall add ;и так далее</code></pre></div>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2017-01-06T15:11:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=110640#p110640</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отключение интернета для конкретной программы]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=110620#p110620" />
			<content type="html"><![CDATA[<p>Тогда вопрос: Возможно ли автоматизировать процесс добавления/удаления/изменения правил выхода в интернет в брандмауэре Windows через AHK? Или, может, кто-то может подсказать другие варианты для запрета доступа выхода в интернет&nbsp; конкретной программе по нажатию кнопки и так же включения его обратно?</p>]]></content>
			<author>
				<name><![CDATA[Alex_Lexon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32135</uri>
			</author>
			<updated>2017-01-06T13:07:44Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=110620#p110620</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отключение интернета для конкретной программы]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=110619#p110619" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ypppu пишет:</cite><blockquote><p>Скорее всего можно управлять штатным файерволом через ком. строку или реестр. Но создавать сетевой экран средствами AutoHotkey думаю крайне нерационально.</p></blockquote></div><p>Угу, спасибо.</p>]]></content>
			<author>
				<name><![CDATA[Alex_Lexon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32135</uri>
			</author>
			<updated>2017-01-06T12:54:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=110619#p110619</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отключение интернета для конкретной программы]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=110618#p110618" />
			<content type="html"><![CDATA[<p>Скорее всего можно управлять штатным файерволом через ком. строку или реестр. Но создавать сетевой экран средствами AutoHotkey думаю крайне нерационально.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2017-01-06T12:16:55Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=110618#p110618</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отключение интернета для конкретной программы]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=110612#p110612" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>ypppu пишет:</cite><blockquote><p>Программу такого рода называют брандмауэр, файервол, межсетевой экран... AutoHotkey под это совсем не заточена.</p></blockquote></div><p>Ну, это я и так понимал. Но все таки надеялся, что можно будет как-то через AHK это сделать. Ну, или, как минимум автоматизировать этот процесс.</p>]]></content>
			<author>
				<name><![CDATA[Alex_Lexon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32135</uri>
			</author>
			<updated>2017-01-06T11:22:36Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=110612#p110612</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Отключение интернета для конкретной программы]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=110611#p110611" />
			<content type="html"><![CDATA[<p>Программу такого рода называют брандмауэр, файервол, межсетевой экран... AutoHotkey под это совсем не заточена.</p>]]></content>
			<author>
				<name><![CDATA[ypppu]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=5974</uri>
			</author>
			<updated>2017-01-06T11:18:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=110611#p110611</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: Отключение интернета для конкретной программы]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=110610#p110610" />
			<content type="html"><![CDATA[<p>Здравствуйте, форумчане!<br />Нужен&nbsp; скриптик, который выключает интернет для какой-то конкретной программы, а не во всём компьютере. Как такое реализовать?<br />Заранее спасибо.</p>]]></content>
			<author>
				<name><![CDATA[Alex_Lexon]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=32135</uri>
			</author>
			<updated>2017-01-06T10:41:59Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=110610#p110610</id>
		</entry>
</feed>
