<?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=15900&amp;type=atom" />
	<updated>2021-02-02T20:10:45Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=15900</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145740#p145740" />
			<content type="html"><![CDATA[<p>Как вариант, спасибо за советы.</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2021-02-02T20:10:45Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145740#p145740</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145739#p145739" />
			<content type="html"><![CDATA[<p>Всё же, наличие файла, который может неожиданно &#039;пропасть&#039; - не очень хороший вариант как по мне. Если всё же оставить как есть, тогда при первой установке сразу переместить основную программу и обновлялку в отдельную папку, например в &#039;C:\Program Files\&#039; а на рабочем столе создать ярлык?</p>]]></content>
			<author>
				<name><![CDATA[__Михаил__]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40928</uri>
			</author>
			<updated>2021-02-02T19:22:12Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145739#p145739</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145737#p145737" />
			<content type="html"><![CDATA[<p>Апдейтер в комплекте сразу буду кидать, а проверку на наличие файла - добавлю. А все действия с ссылкой, добавлю в блок try.</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2021-02-02T18:31:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145737#p145737</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145726#p145726" />
			<content type="html"><![CDATA[<p>Первый косяк что сразу в глаза попадается - &#039;parametrs_test.exe&#039;, не указано где его искать, что если его не будет в папке?<br />Либо он должен проверяться перед запуском, либо скачиваться / извлекаться из основы.</p><p>2) &#039;Server_version&#039; точно будет нужным числом? Что если ссылка окажется не действительной?</p>]]></content>
			<author>
				<name><![CDATA[__Михаил__]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40928</uri>
			</author>
			<updated>2021-02-02T14:57:54Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145726#p145726</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145698#p145698" />
			<content type="html"><![CDATA[<p>Переделал без батника, по мне так стало надёжнее. Есть программа и апдейтер. <br /><strong>Программа</strong> скачивает новую версию и запускает апдейтер, передавая ему параметры(особенно порадовало передача PID, потому что с батником этого не получилось).<br /></p><div class="codebox"><pre><code>
SetWorkingDir %A_ScriptDir%

PID := DllCall(&quot;GetCurrentProcessId&quot;)
Current_version := 1
old_File_path := A_ScriptFullPath
new_File_path := A_ScriptDir &quot;\new_version.exe&quot;
URL := &quot;/new_version.exe&quot;
link := &quot;/update.txt&quot;

http := ComObjCreate(&quot;WinHTTP.WinHTTPRequest.5.1&quot;)
http.Open(&quot;GET&quot;, link, False)
http.Send()
http.WaitForResponse()
Server_version := http.responseText

If (Server_version &gt; Current_version)
{
		UrlDownloadToFile, %URL%, new_version.exe
		Run, parametrs_test.exe &quot;%PID%&quot; &quot;%old_File_path%&quot; &quot;%new_File_path%&quot;
		ExitApp
}
return
</code></pre></div><p><strong>Апдейтер</strong> обрабатывает входные параметры, завершает и удаляет старую версию, переименовывает новую и запускает ее.<br /></p><div class="fancy_spoiler_switcher"><div class="fancy_spoiler_switcher_header" data-lang-open="открыть спойлер" data-lang-close="скрыть спойлер"><strong>+</strong>&nbsp;открыть спойлер</div><div class="fancy_spoiler"><div class="codebox"><pre><code>
#NoEnv
SetWorkingDir %A_ScriptDir%

if A_Args.Count() &gt; 3
	ExitApp
else if A_Args.Count() &gt; 0
{
	for index, element in A_Args
	{
		first_element := SubStr(element, 1, 1)
		if (first_element = &quot;-&quot;)
		{
			element := SubStr(element, 2)
		}
		input_parametrs%index% := element
	}
			;	input_parametrs1 = PID
			;	input_parametrs2 = old_File_path
			;	input_parametrs3 = new_File_path

	if !FileExist(input_parametrs2)
		ExitApp
	old_version(input_parametrs1, input_parametrs2)
	new_version(input_parametrs2, input_parametrs3)
	run %input_parametrs2%
}
else ExitApp

ExitApp

old_version(old_PID, old_File_path) 
{
Process, Exist, %old_PID%
if Errorlevel != 0
{
	Process, Close, %old_PID%
	Process, WaitClose, %old_PID%, 1
	if ErrorLevel != 0
	{
		MsgBox, Error
		ExitApp
	}
}

if FileExist(old_File_path) 
{
	FileDelete, %old_File_path%
	if ErrorLevel != 0
	{
		MsgBox, Error
		ExitApp
	}
}
return
}

new_version(old_File_path, new_File_path) 
{
if FileExist(new_File_path)
{
	FileMove, %new_File_path%, %old_File_path%, 1
	if ErrorLevel != 0
	{
		MsgBox, Error
		ExitApp
	}
}
return
}
</code></pre></div></div></div><p>Пока что всё работает тип-топ). Не знаю насколько корректно написал, мб забыл что-то проверить или может подскажите на ошибки, если есть?</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2021-02-01T20:31:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145698#p145698</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145670#p145670" />
			<content type="html"><![CDATA[<p>Ещё как вариант - скачать новую версию и запустить. В ней уже если всё устраивает пользователя предложить удаление старой. Если нужно то можно сохранить новую версию под старым названием (например запуск с ярлыка и прочее).</p><p>Вот проверил, работает:</p><div class="codebox"><pre><code>#SingleInstance Force
#NoEnv
SetWorkingDir %A_ScriptDir%

; Отобразить текущий полный путь:
F2::
Tool(&quot;Полный путь к программе: &quot; A_ScriptFullPath,,0,0)
Return


; Переименовать текущую программу:
F3::
SplitPath, A_ScriptFullPath,, dir,, name_no_ext

FileMove, % A_ScriptFullPath, % dir &quot;\&quot; name_no_ext (A_IsCompiled ? &quot; v2.exe&quot; : &quot; v2.ahk&quot;) ; Добавит к текущему названию &#039;v2&#039;.
If ErrorLevel
 Tool(&quot;Не вышло переименовать&quot;,,0,0)
Else
 Tool(&quot;Всё ок&quot;,,0,0)
Return




;16.06.2020	показать на время ToolTip, с указанием позиции:
Tool(txt, wait := 2000, X := &quot;&quot;, Y := &quot;&quot;)
{
 SetTimer, Show0, Off
 ToolTip, % txt, % X, % Y

 If wait
  SetTimer, Show0, %wait%
 Else
 {
  KeyWait, %A_ThisHotkey%, U
  ToolTip
 }
}


~Esc::
Show0:
SetTimer, Show0, Off
ToolTip
Return

F4:: ExitApp
F6:: Reload</code></pre></div>]]></content>
			<author>
				<name><![CDATA[__Михаил__]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40928</uri>
			</author>
			<updated>2021-01-31T11:22:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145670#p145670</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145665#p145665" />
			<content type="html"><![CDATA[<p>1) Что мешает создавать батник с нужным названием программы? Ахк скрипт спокойно может получить свое название и создать батник с нужными данными.<br />2) Так же как с 1 пунктом. Ахк может получить полный путь где он находится.<br />3) Командую строку можно скрыть. Зачем она нам нужна, верно?<br />4) Сделать красивую анимацию якобы скачивания обновы?</p><p>Высосанные из пальца проблемы, как по мне.</p>]]></content>
			<author>
				<name><![CDATA[__Михаил__]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40928</uri>
			</author>
			<updated>2021-01-30T22:07:22Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145665#p145665</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145664#p145664" />
			<content type="html"><![CDATA[<p>Попробовал с батником. Ну для эксперимента, работает нормально: основная программа проверяет версию -&gt; скачивает новую -&gt; запускает батник и выходит из программы -&gt; батник удаляет основную программу, переименовывает новую в старую -&gt; запускает новую. Но по мне выглядит это не очень надёжно. </p><p>Во-первых, батник привязан по названию программ. Их можно изменить и т.д. Лучше было бы привязывать по PID процесса, чтобы удалить 100% нужную программу, но не нашел инфу как передать PID в батник при запуске. Во-вторых, привязан локально. Файлы могут разделить и т.д., и если программы не будет в каталоге с батником - ничего не получится. В-третьих, открывается командная строка и это может пугать пользователя или типо того. В-четвёртых, выполнение команд в батнике фиксировано задержкой между командами, а не их фактическим выполнением. У кого-то комп динозавр и команды не будут выполнены корректно. </p><p>В общем, в каталогах нормальных программ не нашел батников, хотя они обновляются красиво. За-то всегда есть 2-3 дополнительных ярлыка с названиями типо &quot;service, update и прочее&quot;. Попробую альтернативный метод, без батника, а с промежуточной программой. </p><div class="codebox"><pre><code>
If (Server_version &gt; Current_version)
{
		UrlDownloadToFile, %URL%, delete_download.exe
		if !FileExist(&quot;delete_download.exe&quot;)
			ExitApp
		Run, test.bat
			ExitApp
}
</code></pre></div><p><strong>test.bat</strong><br /></p><div class="codebox"><pre><code>
@timeout /t 2
@erase &quot;%~dp0delete_bat.exe&quot; ; удаляем старую программу
@timeout /t 1
@rename delete_download2.exe delete_download.exe ; переименовываем новую в старую
@timeout /t 1
@start &quot;&quot; &quot;%~dp0delete_download.exe&quot; ; запускаем новую
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2021-01-30T21:44:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145664#p145664</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145642#p145642" />
			<content type="html"><![CDATA[<p>Это базовые функции ОС. Саму себя удалять программа запретит. Нужен &#039;помощник&#039; в этом. Например батник создать и запустить после выхода программы.</p>]]></content>
			<author>
				<name><![CDATA[__Михаил__]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40928</uri>
			</author>
			<updated>2021-01-30T10:29:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145642#p145642</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145625#p145625" />
			<content type="html"><![CDATA[<p>Ошибка считать, что исполняемые файлы можно удалять.<br />Попробуйте любой другой файл программы запустить и попытайтесь его удалить, пока его процесс запущен.</p>]]></content>
			<author>
				<name><![CDATA[KusochekDobra]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=33846</uri>
			</author>
			<updated>2021-01-30T05:30:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145625#p145625</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=145623#p145623" />
			<content type="html"><![CDATA[<p>Вот и пригодилось автообновление, было два варианта: либо сделать второй скрипт типо лаунчера, либо просто скачает новую версию -&gt; запустит и сам себя удалит.<br />Остановился на второй. В не скомпилированном варианте все работает (если указать в FileRecycle -&gt; A_ScriptFullPath), а после компиляции - нет. Т.е. &quot;exe&quot; не удаляет сам себя. Подскажите где ошибка?</p><div class="codebox"><pre><code>
SetWorkingDir %A_ScriptDir%
Current_version := 1
URL := &quot;https://delete_download.exe&quot;
link := &quot;https://update.txt&quot;

http := ComObjCreate(&quot;WinHTTP.WinHTTPRequest.5.1&quot;)
http.Open(&quot;GET&quot;, link, False)
http.Send()
http.WaitForResponse()
Server_version := http.responseText

If (Server_version &gt; Current_version)
{
		UrlDownloadToFile, %URL%, delete_download.exe
		if !FileExist(&quot;delete_download.exe&quot;)
			ExitApp
		Run, *RunAs delete_download.exe 1
		FileRecycle, delete_copy.exe
			ExitApp
}
else msgbox, Not
return
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2021-01-30T02:21:24Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=145623#p145623</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=144053#p144053" />
			<content type="html"><![CDATA[<p><strong>Botsy</strong></p><div class="codebox"><pre><code>FileReadLine, VNum, %A_WorkingDir%\version.txt, 1</code></pre></div><p>Чтение файла, зачем? Это на мой взгляд глупо. В программе должна быть переменная, её сверить быстрее и правильнее.</p><p>Можно сделать более менее красивое окошко с предложением на обновление, стандартные ToolTip и MsgBox думаю уже не актуальны в готовом продукте.</p>]]></content>
			<author>
				<name><![CDATA[__Михаил__]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40928</uri>
			</author>
			<updated>2020-12-09T19:11:37Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=144053#p144053</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=144050#p144050" />
			<content type="html"><![CDATA[<p><strong>__Михаил__</strong> В том варианте, который есть - базовый функционал. Можно дописать немного и будет вообще по красоте.</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2020-12-09T18:43:03Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=144050#p144050</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=144049#p144049" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>Botsy пишет:</cite><blockquote><p>Это конечно не автообновление, придется руками удалять старую версию, но как бюджетный вариант, вполне реальный.</p></blockquote></div><p>Почему же это не автообновление? Очень даже дельно, на мой взгляд.<br />Если стоит галочка в программе &#039;Проверять обнову&#039; - скачать с сервера файл / код. Затем спросить пользователя на замену версии - если он согласиться - заменить текущую на новую. Можно сохранить старую, а новую рядом поставить и в конце добавить &#039;v2.0&#039; например.</p>]]></content>
			<author>
				<name><![CDATA[__Михаил__]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=40928</uri>
			</author>
			<updated>2020-12-09T18:37:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=144049#p144049</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Как получать данные с сайта?]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=144040#p144040" />
			<content type="html"><![CDATA[<p><strong>Vsevolod</strong> Есть простой способ и нормальный. Сам пользуюсь простым: добавь подключение к серверу в блок &quot;try&quot;, а в блоке &quot;catch&quot; обработай его, например выводом сообщения &quot;нет интернета&quot;. А нормальный способ, это еще обрабатывать коды ошибок в http запросах(ну там ошибка 404 и т.д.), тогда будет полное сообщение об ошибке, а не просто &quot;нет интернета&quot;.</p>]]></content>
			<author>
				<name><![CDATA[Botsy]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=41069</uri>
			</author>
			<updated>2020-12-09T12:40:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=144040#p144040</id>
		</entry>
</feed>
