<?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=15073&amp;type=atom" />
	<updated>2020-01-18T07:53:13Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=15073</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: запуск консоли в фоновом режиме]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=137338#p137338" />
			<content type="html"><![CDATA[<p>Доброго времени суток.</p><p>Протестировал утилиту modpol v3.6, <a href="https://www.modbusdriver.com/modpoll.html">https://www.modbusdriver.com/modpoll.html</a>. Может, кому будет интересно.</p><p>В принципе, неплохая попытка привести коммуникацию с Modbus устройствами в более удобоваримый вид и легко прикручивается к AHK, но пока сыровата. Некорректно работают некоторые функции (это до чего докопался, может еще что-то есть):</p><p>1) Некорректно обрабатываются ответы от Slave типа float32. Конкретно, точность ответа modpoll отличается от точности наладочных программ. Пример, показания счетчика электроэнергии, полученные через modpoll и другими программами: 188 и 188.8475 соответственно. Вероятно, при увеличении показаний точность будет еще уменьшатся. Конечно, в принципе можно получать ответы в шестнадцатеричном виде и конвертировать самому...</p><p>2) Утилита коряво работает с записью в регистры, то есть лишь ограниченно пригодна для управления исполнительными устройствами. Запись почти не документирована. На проверку оказалось, что утилита поддерживает только функцию 10 (write multiple coils) но не поддерживает 5 (write single coil). </p><p>3) Утилита не работает под WinXP (Not valid win32 application).</p><p>В общем, утилита на данный момент пригодна для опроса датчиков, с учетом изложенного в п.1. Однако все,&nbsp; что выходит за пределы 4 стандартных функций Modbus, ей не под силу.</p>]]></content>
			<author>
				<name><![CDATA[equipment66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27128</uri>
			</author>
			<updated>2020-01-18T07:53:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=137338#p137338</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: запуск консоли в фоновом режиме]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=136733#p136733" />
			<content type="html"><![CDATA[<p>Спасибо,&nbsp; работает.</p><p>Modbus - это протокол коммуникаци оборудования над RS-485, по архитектуре Master/Slave. В основном используется в промышленности, но и в умных домах тоже. <br />Modpoll - comand line утилита для Modbus. Единственное, что пока нашел свободного и совместимого с АНК.</p>]]></content>
			<author>
				<name><![CDATA[equipment66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27128</uri>
			</author>
			<updated>2019-12-02T12:33:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=136733#p136733</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: запуск консоли в фоновом режиме]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=136725#p136725" />
			<content type="html"><![CDATA[<p>Не в курсе, что такое ModBus и modpoll, но можно попробовать так запустить:<br /></p><div class="codebox"><pre><code>MsgBox, % CmdRet(CommandLine)

CmdRet(sCmd, callBackFuncObj := &quot;&quot;, encoding := &quot;CP866&quot;)
{
   static HANDLE_FLAG_INHERIT := 0x00000001, flags := HANDLE_FLAG_INHERIT
        , STARTF_USESTDHANDLES := 0x100, CREATE_NO_WINDOW := 0x08000000
   
   DllCall(&quot;CreatePipe&quot;, &quot;PtrP&quot;, hPipeRead, &quot;PtrP&quot;, hPipeWrite, &quot;Ptr&quot;, 0, &quot;UInt&quot;, 0)
   DllCall(&quot;SetHandleInformation&quot;, &quot;Ptr&quot;, hPipeWrite, &quot;UInt&quot;, flags, &quot;UInt&quot;, HANDLE_FLAG_INHERIT)
   
   VarSetCapacity(STARTUPINFO , siSize :=    A_PtrSize*4 + 4*8 + A_PtrSize*5, 0)
   NumPut(siSize              , STARTUPINFO)
   NumPut(STARTF_USESTDHANDLES, STARTUPINFO, A_PtrSize*4 + 4*7)
   NumPut(hPipeWrite          , STARTUPINFO, A_PtrSize*4 + 4*8 + A_PtrSize*3)
   NumPut(hPipeWrite          , STARTUPINFO, A_PtrSize*4 + 4*8 + A_PtrSize*4)
   
   VarSetCapacity(PROCESS_INFORMATION, A_PtrSize*2 + 4*2, 0)

   if !DllCall(&quot;CreateProcess&quot;, &quot;UInt&quot;, 0, &quot;Str&quot;, sCmd, &quot;UInt&quot;, 0, &quot;UInt&quot;, 0, &quot;UInt&quot;, true, &quot;UInt&quot;, CREATE_NO_WINDOW
                              , &quot;UInt&quot;, 0, &quot;UInt&quot;, 0, &quot;Ptr&quot;, &amp;STARTUPINFO, &quot;Ptr&quot;, &amp;PROCESS_INFORMATION)
   {
      DllCall(&quot;CloseHandle&quot;, &quot;Ptr&quot;, hPipeRead)
      DllCall(&quot;CloseHandle&quot;, &quot;Ptr&quot;, hPipeWrite)
      throw Exception(&quot;CreateProcess is failed&quot;)
   }
   DllCall(&quot;CloseHandle&quot;, &quot;Ptr&quot;, hPipeWrite)
   VarSetCapacity(sTemp, 4096), nSize := 0
   while DllCall(&quot;ReadFile&quot;, &quot;Ptr&quot;, hPipeRead, &quot;Ptr&quot;, &amp;sTemp, &quot;UInt&quot;, 4096, &quot;UIntP&quot;, nSize, &quot;UInt&quot;, 0) {
      sOutput .= stdOut := StrGet(&amp;sTemp, nSize, encoding)
      ( callBackFuncObj &amp;&amp; callBackFuncObj.Call(stdOut) )
   }
   DllCall(&quot;CloseHandle&quot;, &quot;Ptr&quot;, NumGet(PROCESS_INFORMATION))
   DllCall(&quot;CloseHandle&quot;, &quot;Ptr&quot;, NumGet(PROCESS_INFORMATION, A_PtrSize))
   DllCall(&quot;CloseHandle&quot;, &quot;Ptr&quot;, hPipeRead)
   Return sOutput
}</code></pre></div>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2019-12-01T21:52:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=136725#p136725</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[AHK: запуск консоли в фоновом режиме]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=136724#p136724" />
			<content type="html"><![CDATA[<p>Доброго времени суток.</p><p>Задача: достучатся до сети ModBus из AHK . Нашел консольное приложение modpoll, пример кода - из Help&#039;a AHK. Вызываю modpoll из скрипта с перехватом StdOut, все работает. </p><p>Код AHK: <br /></p><div class="codebox"><pre><code>
String = &quot; C:\Users\HP\Desktop\Log\win\modpoll -b 9600 -p none -s 1 -m tcp -o 3 -t 3:float -a 10 -r 256 -c 1 -1 192.168.10.245 &quot;
CommandLine = %ComSpec% /c %String%

shell := ComObjCreate(&quot;WScript.Shell&quot;)
exec := shell.Exec(CommandLine) 
Result := exec.StdOut.ReadAll()
</code></pre></div><p>Вопрос в том, как добиться, чтобы консоль запускалась в фоновом режиме и не докучала выскакивающим окном?</p>]]></content>
			<author>
				<name><![CDATA[equipment66]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27128</uri>
			</author>
			<updated>2019-12-01T20:49:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=136724#p136724</id>
		</entry>
</feed>
