<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; VBA Изменение системной даты]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=15846&amp;type=atom" />
	<updated>2020-11-24T07:56:50Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=15846</id>
		<entry>
			<title type="html"><![CDATA[Re: VBA Изменение системной даты]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=143646#p143646" />
			<content type="html"><![CDATA[<p><strong>alexii</strong>, тоже об этом думал. Когда тестировался, выяснил, что мешает только UAC. Пока его не пройдёшь - хоть с привилегиями, хоть без них, доступа на изменение даты нет. Как только прошёл UAC, даже без привилегий спокойно дату меняет. Есть <span class="bbu">ощущение</span>, что в этом случае привилегии играют роль только ограничительных мер после передачи объекта с полными правами в &quot;<span class="bbu">чужие руки</span>&quot;. Т.е когда у нас, как у базового процесса, получен доступ, но мы передаём объект другому процессу и не хотим ему давать полные права.</p>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2020-11-24T07:56:50Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=143646#p143646</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA Изменение системной даты]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=143640#p143640" />
			<content type="html"><![CDATA[<p><strong>Xameleon</strong>, для установки даты не нужна привилегия Systemtime?</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2020-11-24T01:03:57Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=143640#p143640</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA Изменение системной даты]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=143639#p143639" />
			<content type="html"><![CDATA[<p>Господа, не совсем понял почему эта задача планируется на VBA, если на VBS всё это можно сделать, вроде бы, проще.<br /></p><div class="codebox"><pre><code>
Option Explicit

Dim datCurrentDate

&#039;Проверка UAC
If Not IsElevated() Then
	CreateObject(&quot;Shell.Application&quot;).ShellExecute WSH.FullName, WSH.ScriptFullName,,&quot;runas&quot;
	WSH.Quit
End if

&#039;Запоминаем дату
datCurrentDate = Now

&#039;Сдвигаем дату на 1 день вперёд
SetDateTime(DateAdd(&quot;d&quot;,1,datCurrentDate))

MsgBox &quot;Date added 1 day ! Now it&#039;s [&quot; &amp; Now &amp; &quot;]. Check the tray !&quot;

&#039;Возвращаем дату назад
SetDateTime datCurrentDate

MsgBox &quot;We are back ! :)&quot;

&#039;Функция установки времени
Function SetDateTime([Date])
	With CreateObject(&quot;WbemScripting.SWbemDateTime&quot;)
		.SetVarDate [Date], True
		SetDateTime = CreateObject(&quot;WbemScripting.SWbemLocator&quot;).ConnectServer()_
		.Get(&quot;Win32_OperatingSystem=@&quot;).SetDateTime(.Value)
	End With
End Function

&#039;Функция проверки наличия повышенных прав
Function IsElevated()
    IsElevated = CreateObject(&quot;WbemScripting.SWbemLocator&quot;).ConnectServer()_
	.Get(&quot;StdRegProv&quot;).CheckAccess(&amp;H80000003,&quot;S-1-5-19&quot;,&amp;H1) = 0
End Function
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Xameleon]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=8836</uri>
			</author>
			<updated>2020-11-23T23:23:21Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=143639#p143639</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA Изменение системной даты]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=143610#p143610" />
			<content type="html"><![CDATA[<div class="quotebox"><cite>golovindmitry пишет:</cite><blockquote><p>т.к. наше приложение &quot;при запуске проверяет системную дату&quot; (слова человека который нам её писал), а RunAsDate - &quot;Эта утилита не изменяет текущую системную дату и время вашего компьютера, а только вводит дату и время, которые вы укажете, в нужное приложение.&quot;.</p></blockquote></div><p>Не так.<br /></p><div class="quotebox"><blockquote><p><strong>How does it work ?</strong></p><p>RunAsDate intercepts the kernel API calls that returns the current date and time (GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime, NtQuerySystemTime, GetSystemTimePreciseAsFileTime), and replaces the current date/time with the date/time that you specify.</p></blockquote></div><p>Вот «проверяет системную дату» — это как правило либо GetSystemTime(), либо GetLocalTime().</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2020-11-21T19:58:45Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=143610#p143610</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA Изменение системной даты]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=143608#p143608" />
			<content type="html"><![CDATA[<p><strong>alexii</strong></p><p>Да, приложение проверяет дату при запуске (минуты хватает), а потом работает без проблем с любой датой, а другие приложения должны работать с нормальной системной датой - дата создания файлов, например, должна быть верной.</p><p>VBA - потому что, в моем представлении, это самый простой вариант, не требующий дополнительного ПО. Ну и простота использования - уж bat-файл или ярлык я сделать смогу.</p><p>По поводу RunAsDate - попробую, но сомнительно, что она поможет, т.к. наше приложение &quot;при запуске проверяет системную дату&quot; (слова человека который нам её писал), а RunAsDate - &quot;Эта утилита не изменяет текущую системную дату и время вашего компьютера, а только вводит дату и время, которые вы укажете, в нужное приложение.&quot;. Отпишусь отдельно, как проверю.</p>]]></content>
			<author>
				<name><![CDATA[golovindmitry]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=41231</uri>
			</author>
			<updated>2020-11-21T19:21:18Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=143608#p143608</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: VBA Изменение системной даты]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=143607#p143607" />
			<content type="html"><![CDATA[<p><strong>golovindmitry</strong>, я правильно понимаю, что нет нужды ожидать завершения работы приложения, а достаточно подождать одну минуту? И почему выбрана категория VBA?!</p><p>Не проще ли Вам будет попробовать использовать сие: <a href="https://www.nirsoft.net/utils/run_as_date.html">RunAsDate - Run a program with the specified date/time</a>?!</p>]]></content>
			<author>
				<name><![CDATA[alexii]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=1844</uri>
			</author>
			<updated>2020-11-21T19:03:33Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=143607#p143607</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[VBA Изменение системной даты]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=143606#p143606" />
			<content type="html"><![CDATA[<p>Для запуска старой программы требуется установка нужной системной даты. Собственно разработчик который писал нам эту программу и забросил ее поддержку посоветовал нам этот способ.</p><p>Сейчас действия производятся такие:<br />1) Оператор включает компьютер.<br />2) Меняет системную дату на определенную<br />3) Запускает программу<br />4) Возвращает дату на текущую<br />5) Работает</p><p>Но тут включается человеческий фактор. Либо дата для запуска программы с ошибкой, либо текущая дата с ошибкой, либо забывают вернуть текущую дату.</p><p>Можно ли (в принципе) одним скриптом проделать эту цепочку действий? Я представляю как это должно выглядеть, но написать самостоятельно, к сожалению, такой скрипт не могу.</p><p>Алгоритм (в моем представлении):<br />1) Запомнить системную дату<br />2) Ззменить дату на нужную<br />3) Запустить exe файл<br />4) Подождать минуту (программа должна запустится и проверить дату)<br />5) Вернуть дату</p><p>Прошу помощи! И в любом случае - спасибо!</p>]]></content>
			<author>
				<name><![CDATA[golovindmitry]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=41231</uri>
			</author>
			<updated>2020-11-21T17:49:11Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=143606#p143606</id>
		</entry>
</feed>
