<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; VBS: Помогите найти глюк]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=10862</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10862&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «VBS: Помогите найти глюк».]]></description>
		<lastBuildDate>Fri, 14 Aug 2015 07:30:57 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96436#p96436</link>
			<description><![CDATA[<p>Всем спасибо - всё заработало. Всё оказалось просто. Раздела Keyboard Layout в реестре не существует на целевом ПК... фишка в этом. Скрипт не может создать ключ в несуществующем разделе.<br />Сейчас уже не могу понять почему так всё, но я пробовал создавать раздел и скрипт всё равно не работал. UAC отключил уже потом, вероятно он и мешал срабатывать скрипту.</p>]]></description>
			<author><![CDATA[null@example.com (komr)]]></author>
			<pubDate>Fri, 14 Aug 2015 07:30:57 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96436#p96436</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96435#p96435</link>
			<description><![CDATA[<p>Да, скрипт проверяет наличие прав, и убеждается, что они есть. Функция IsElevated возвращает Истину</p>]]></description>
			<author><![CDATA[null@example.com (komr)]]></author>
			<pubDate>Fri, 14 Aug 2015 07:20:43 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96435#p96435</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96434#p96434</link>
			<description><![CDATA[<p>Мистика какая то... явно какой то встроенный механизм защиты Win7 работает. UAC я отключил... не помогло.</p>]]></description>
			<author><![CDATA[null@example.com (komr)]]></author>
			<pubDate>Fri, 14 Aug 2015 07:13:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96434#p96434</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96433#p96433</link>
			<description><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>1) Всё-таки оставляю за собой право предполагать, что Вы не запустили <span class="bbu">командную строку с правами администратора</span>.<br />2) Переделал скрипт с учётом <span class="bbu">автоматической проверки прав</span>. К сожалению, сейчас не имею возможности проверить на XP и других системах. Под рукой только <strong>Win 10 Pro</strong>. И думаю, что наверняка можно проще всё это реализовать.</p></blockquote></div><p>1. У меня нет такого пункта, не нашёл. Видимо, т.к. я и так с админскими правами зарегистрировался в системе ,то и такого пункта в меню нет. Может есть вариант вызова через Пуск/выполнить?<br />2. Попробовал - выдаёт ошибку из обработчика (строка 42). Не удалось установить параметр...</p>]]></description>
			<author><![CDATA[null@example.com (komr)]]></author>
			<pubDate>Fri, 14 Aug 2015 07:11:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96433#p96433</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96414#p96414</link>
			<description><![CDATA[<p><strong>Flasher</strong>,<br /></p><div class="quotebox"><cite>Flasher пишет:</cite><blockquote><p>А так?</p><div class="codebox"><pre><code>Set objRegistry = _
    GetObject(&quot;winmgmts:{impersonationLevel=impersonate}\\.\root\default:StdRegProv&quot;)</code></pre></div></blockquote></div><p>Попробовал. К сожалению не &quot;прокатило&quot;, но с мыслью согласен. По идее должно было дать права от того кто запустил.</p><p><strong>komr</strong>, </p><p>1) Всё-таки оставляю за собой право предполагать, что Вы не запустили <span class="bbu">командную строку с правами администратора</span>.</p><p>Я имел в виду это:<br /><span class="postimg"><img src="http://itmix.com.ua/images/Img-1/Windows7_1_thumb.png" alt="http://itmix.com.ua/images/Img-1/Windows7_1_thumb.png" /></span></p><p>2) Переделал скрипт с учётом <span class="bbu">автоматической проверки прав</span>. К сожалению, сейчас не имею возможности проверить на XP и других системах. Под рукой только <strong>Win 10 Pro</strong>. И думаю, что наверняка можно проще всё это реализовать.<br /></p><div class="codebox"><pre><code>
Option Explicit

Dim objRegistry, strPath, uBinary, strValue01, strValue02

Const HKEY_LOCAL_MACHINE = &amp;H80000002
Const HKEY_USERS = &amp;H80000003

If Not IsElevated() Then
    RestartElevated()
    WScript.Quit
End if

Set objRegistry = _
    GetObject(&quot;Winmgmts:root\default:StdRegProv&quot;)

strPath = &quot;SYSTEM\CurrentControlSet\Control\Keyboard Layout&quot;
uBinary = Array(&amp;H00, &amp;H00, &amp;H00, &amp;H00, &amp;H00, &amp;H00, &amp;H00, &amp;H00, _
                &amp;H12, &amp;H00, &amp;H00, &amp;H00, &amp;H00, &amp;H00, &amp;H3B, &amp;H00, _
                &amp;H00, &amp;H00, &amp;H3C, &amp;H00, &amp;H00, &amp;H00, &amp;H3D, &amp;H00, _
                &amp;H00, &amp;H00, &amp;H3E, &amp;H00, &amp;H00, &amp;H00, &amp;H3F, &amp;H00, _
                &amp;H00, &amp;H00, &amp;H40, &amp;H00, &amp;H00, &amp;H00, &amp;H41, &amp;H00, _
                &amp;H00, &amp;H00, &amp;H42, &amp;H00, &amp;H00, &amp;H00, &amp;H43, &amp;H00, _
                &amp;H00, &amp;H00, &amp;H44, &amp;H00, &amp;H00, &amp;H00, &amp;H57, &amp;H00, _
                &amp;H00, &amp;H00, &amp;H58, &amp;H00, &amp;H00, &amp;H00, &amp;H5B, &amp;HE0, _
                &amp;H00, &amp;H00, &amp;H38, &amp;H00, &amp;H00, &amp;H00, &amp;H38, &amp;HE0, _
                &amp;H00, &amp;H00, &amp;H5C, &amp;HE0, &amp;H00, &amp;H00, &amp;H1D, &amp;HE0, _
                &amp;H00, &amp;H00, &amp;H00, &amp;H00)

SetBinaryValue HKEY_LOCAL_MACHINE, strPath, &quot;ScanCode Map&quot;, uBinary

strPath = &quot;.DEFAULT\Keyboard Layout\Preload&quot;
strValue01 = &quot;00000409&quot;
strValue02 = &quot;00000419&quot;

SetStringValue HKEY_USERS, strPath, &quot;1&quot;, strValue01
SetStringValue HKEY_USERS, strPath, &quot;2&quot;, strValue02

Private Sub SetBinaryValue(DefKey, SubKeyName, ValueName, Value)
    Dim intRet
    intRet = objRegistry.SetBinaryValue(DefKey, SubKeyName, ValueName, Value)
    If intRet &lt;&gt; 0 Then
        Err.Raise intRet, &quot;Не удалось установить параметр &quot;&quot;&quot; &amp; ValueName &amp; &quot;&quot;&quot;&quot;, &quot;SetBinaryValue&quot;
    End If
End Sub

&#039;Функция проверки - есть ли у нас повышенные права или нет
Private Function IsElevated()
    IsElevated = CreateObject(&quot;WScript.Shell&quot;).Run(&quot;%comspec% /c whoami /all | findstr /I /C:&quot;&quot;S-1-16-12288&quot;&quot;&quot;,0,True) = 0
End Function

&#039;Процедура перезапуска своего же процесса с повышенными правами
Private Sub RestartElevated()
    Dim i, strTmp
    &#039;Собираем строку параметров запуска на случай если скрипт был запущен с параметрами
    For i=0 To WScript.Arguments.Count-1
        If InStr(WScript.Arguments(i), &quot; &quot;) &gt; 0 Then
            strTmp = strTmp &amp; &quot; &quot;&quot;&quot; &amp; WScript.Arguments(i) &amp; &quot;&quot;&quot;&quot;
        Else
            strTmp = strTmp &amp; &quot; &quot; &amp; WScript.Arguments(i)
        End If
    Next
    &#039;Запускаем свой же скрипт с повышенными правами
    RunElevated WScript.FullName, &quot;&quot;&quot;&quot; &amp; WScript.ScriptFullName &amp; &quot;&quot;&quot;&quot; &amp; strTmp, &quot;&quot;
End Sub

&#039;Запуск приложения с повышенными правами
Private Sub RunElevated(strApplication, strArguments, strWorkingDir)
    CreateObject(&quot;Shell.Application&quot;).ShellExecute strApplication, strArguments, strWorkingDir, &quot;runas&quot;
End Sub
</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 12 Aug 2015 19:31:19 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96414#p96414</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96411#p96411</link>
			<description><![CDATA[<p>А так?</p><div class="codebox"><pre><code>Set objRegistry = _
    GetObject(&quot;winmgmts:{impersonationLevel=impersonate}\\.\root\default:StdRegProv&quot;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Flasher)]]></author>
			<pubDate>Wed, 12 Aug 2015 16:01:39 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96411#p96411</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96410#p96410</link>
			<description><![CDATA[<p>Получается, осталось понять, как запустить скрипт с нужными правами.</p>]]></description>
			<author><![CDATA[null@example.com (komr)]]></author>
			<pubDate>Wed, 12 Aug 2015 14:18:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96410#p96410</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96409#p96409</link>
			<description><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>Код 5 соответствует запрету доступа, как я понимаю.</p><p>Первое что приходит в голову -&nbsp; Запуская скрипт, Вы интерпретатор <strong>WScript</strong> / <strong>CScript</strong> запускаете с правами администратора ? В <strong>XP</strong> это не требовалось, в <strong>Win 7</strong> и выше это часто бывает необходимо. Для проверки достаточно запустить командную строку с правами админа, а уже из неё запустить скрипт. Если же дело не в этом, то остаётся только выяснять по каким причинам у вас нет права записи в эту ветку.</p></blockquote></div><p>Кстати ДА, доступ... я попробовал сегодня скрипт на машине с ХР - работает без проблем. А на семёрке&nbsp; - нет. Странно то, что права на ветку у меня есть. Я могу и создать этот раздел и параметр и задать ему значения и удалить всё. А вот скрипт этого не может. Попробую сейчас через командную строку... хотя скрипт должен запускаться через групповую политику - а там, в разделе ПК ,права админа должны быть по умолчанию.</p><p>Ничего не вышло - и права, вроде бы, есть, но не работает.</p>]]></description>
			<author><![CDATA[null@example.com (komr)]]></author>
			<pubDate>Wed, 12 Aug 2015 13:47:31 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96409#p96409</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96406#p96406</link>
			<description><![CDATA[<p>Понял Вас. Посмотрел подробности про <a href="https://msdn.microsoft.com/en-us/library/aa393286(v=vs.85).aspx">SetBinaryValue</a></p><p>Вот что пишут:<br /></p><div class="quotebox"><blockquote><p>Return value</p><p>In C++, the method returns a uint32 value that is 0 (zero) if successful. If the function fails, the return value is a nonzero error code that is defined in WinError.h. In C++, use the FormatMessage function with the FORMAT_MESSAGE_FROM_SYSTEM flag to get a generic description of the error. You can also look up return values under the WMI Error Constants.</p><p><strong>In scripting or Visual Basic, the method returns an integer value that is 0 (zero) if successful. If the function fails, the return value is a nonzero error code that you can look up in WbemErrorEnum.</strong></p></blockquote></div><p>К сожалению в списке ошибок, не нашёл чего-то подобного коду 5. </p><p>На просторах инета нашёл предложение посмотреть последнюю ошибку, произошедшую в WMI. - <br /><a href="http://microsoft.public.scripting.wsh.narkive.com/9NmnIEHt/question-on-error-handling-getbinaryvalue-setbinaryvalue">ссылка</a></p><br /><div class="codebox"><pre><code>Set oLastError = CreateObject(&quot;WbemScripting.SWbemLastError&quot;)
WScript.Echo oLastError.getObjectText_(1)</code></pre></div><p>Порылся ещё. Нашёл список кодов ошибок для API функций, используемых внутри объектов WMI. <a href="http://www.computerhope.com/forum/index.php?topic=1691.0">ссылка</a></p><div class="quotebox"><blockquote><p>Const ERROR_SUCCESS = 0&amp;<br />Const ERROR_BADDB = 1009&amp;<br />Const ERROR_BADKEY = 1010&amp;<br />Const ERROR_CANTOPEN = 1011&amp;<br />Const ERROR_CANTREAD = 1012&amp;<br />Const ERROR_CANTWRITE = 1013&amp;<br />Const ERROR_OUTOFMEMORY = 14&amp;<br />Const ERROR_INVALID_PARAMETER = 87&amp;<br /><strong>Const ERROR_ACCESS_DENIED = 5&amp;</strong><br />Const ERROR_NO_MORE_ITEMS = 259&amp;<br />Const ERROR_MORE_DATA = 234&amp;</p></blockquote></div><p>Код 5 соответствует запрету доступа, как я понимаю.</p><p>Первое что приходит в голову -&nbsp; Запуская скрипт, Вы интерпретатор <strong>WScript</strong> / <strong>CScript</strong> запускаете с правами администратора ? В <strong>XP</strong> это не требовалось, в <strong>Win 7</strong> и выше это часто бывает необходимо. Для проверки достаточно запустить командную строку с правами админа, а уже из неё запустить скрипт. Если же дело не в этом, то остаётся только выяснять по каким причинам у вас нет права записи в эту ветку.</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Wed, 12 Aug 2015 09:23:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96406#p96406</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96382#p96382</link>
			<description><![CDATA[<p>Вот пример кода, с проверкой результатов выполнения добавления ключа в реестр.<br /></p><div class="codebox"><pre><code>intRes = objRegistry.SetBinaryValue(HKEY_LOCAL_MACHINE, strPath, &quot;ScanCode Map&quot;, uBinary)
If intRes &lt;&gt; 0 Then
    WScript.Echo intRes &amp; &quot;: не удалось установить параметр ScanCode Map&quot;
    WScript.Quit
End If</code></pre></div><p>Он выдаёт цифру 5. Кто знает что это значит?</p>]]></description>
			<author><![CDATA[null@example.com (komr)]]></author>
			<pubDate>Tue, 11 Aug 2015 07:07:40 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96382#p96382</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96381#p96381</link>
			<description><![CDATA[<div class="quotebox"><cite>Xameleon пишет:</cite><blockquote><p>1) В данном случае, глюк это: <br /></p><div class="codebox"><pre><code>On Error Resume Next</code></pre></div><p>Так как этот оператор подавляет вывод ошибок. Так что либо удаляйте, либо комментируйте эту строку и смотрите что сообщит скрипт.</p><p>2) </p><div class="quotebox"><cite>komr пишет:</cite><blockquote><p>Если сделать проверку, то метод выдаёт цифру 5. Т.е. какую то ошибку.</p></blockquote></div><p>О какой проверке идёт речь ?</p><p>Ошибки, как правило, сопровождаются пояснениями - причина, описание. В вашем случае они есть ?</p></blockquote></div><p>Оператор подавления ошибок, естественно комментировал. Никаких изменений.<br />Метод SetBinaryValuе возвращает 0, если прошло без ошибок. В моём случае возвращает 5. Что это означает - понять не могу.</p>]]></description>
			<author><![CDATA[null@example.com (komr)]]></author>
			<pubDate>Tue, 11 Aug 2015 07:04:59 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96381#p96381</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96371#p96371</link>
			<description><![CDATA[<p>1) В данном случае, глюк это: <br /></p><div class="codebox"><pre><code>On Error Resume Next</code></pre></div><p>Так как этот оператор подавляет вывод ошибок. Так что либо удаляйте, либо комментируйте эту строку и смотрите что сообщит скрипт.</p><p>2) </p><div class="quotebox"><cite>komr пишет:</cite><blockquote><p>Если сделать проверку, то метод выдаёт цифру 5. Т.е. какую то ошибку.</p></blockquote></div><p>О какой проверке идёт речь ?</p><p>Ошибки, как правило, сопровождаются пояснениями - причина, описание. В вашем случае они есть ?</p>]]></description>
			<author><![CDATA[null@example.com (Xameleon)]]></author>
			<pubDate>Mon, 10 Aug 2015 14:11:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96371#p96371</guid>
		</item>
		<item>
			<title><![CDATA[Re: VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96369#p96369</link>
			<description><![CDATA[<p>Я запускаю скрипт на ПК с админскими правами и ничего... и ошибок, гад, не выдаёт. Если сделать проверку, то метод выдаёт цифру 5. Т.е. какую то ошибку.</p>]]></description>
			<author><![CDATA[null@example.com (komr)]]></author>
			<pubDate>Mon, 10 Aug 2015 12:58:10 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96369#p96369</guid>
		</item>
		<item>
			<title><![CDATA[VBS: Помогите найти глюк]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=96368#p96368</link>
			<description><![CDATA[<p>Есть такой код переназначения кучи клавиш<br /></p><div class="codebox"><pre><code>Option Explicit

On Error Resume Next

Dim objRegistry, strPath, uBinary, strValue01, strValue02

Const HKEY_LOCAL_MACHINE = &amp;H80000002
Const HKEY_USERS = &amp;H80000003

Set objRegistry = _
    GetObject(&quot;Winmgmts:root\default:StdRegProv&quot;)

strPath = &quot;SYSTEM\CurrentControlSet\Control\Keyboard Layout&quot;
uBinary = Array(&amp;H00, &amp;H00, &amp;H00, &amp;H00, &amp;H00, &amp;H00, &amp;H00, &amp;H00, _
                &amp;H12, &amp;H00, &amp;H00, &amp;H00, &amp;H00, &amp;H00, &amp;H3B, &amp;H00, _
                &amp;H00, &amp;H00, &amp;H3C, &amp;H00, &amp;H00, &amp;H00, &amp;H3D, &amp;H00, _
                &amp;H00, &amp;H00, &amp;H3E, &amp;H00, &amp;H00, &amp;H00, &amp;H3F, &amp;H00, _
                &amp;H00, &amp;H00, &amp;H40, &amp;H00, &amp;H00, &amp;H00, &amp;H41, &amp;H00, _
                &amp;H00, &amp;H00, &amp;H42, &amp;H00, &amp;H00, &amp;H00, &amp;H43, &amp;H00, _
                &amp;H00, &amp;H00, &amp;H44, &amp;H00, &amp;H00, &amp;H00, &amp;H57, &amp;H00, _
                &amp;H00, &amp;H00, &amp;H58, &amp;H00, &amp;H00, &amp;H00, &amp;H5B, &amp;HE0, _
                &amp;H00, &amp;H00, &amp;H38, &amp;H00, &amp;H00, &amp;H00, &amp;H38, &amp;HE0, _
                &amp;H00, &amp;H00, &amp;H5C, &amp;HE0, &amp;H00, &amp;H00, &amp;H1D, &amp;HE0, _
                &amp;H00, &amp;H00, &amp;H00, &amp;H00)

objRegistry.SetBinaryValue HKEY_LOCAL_MACHINE, strPath, &quot;ScanCode Map&quot;, uBinary

strPath = &quot;.DEFAULT\Keyboard Layout\Preload&quot;
strValue01 = &quot;00000409&quot;
strValue02 = &quot;00000419&quot;

objRegistry.SetStringValue HKEY_USERS, strPath, &quot;1&quot;, strValue01
objRegistry.SetStringValue HKEY_USERS, strPath, &quot;2&quot;, strValue02</code></pre></div><p>Он работал, но сейчас не работает. Ну ни в какую... Не создаётся и не заполняется значениями бинарный ключ.<br />Куда копать?</p>]]></description>
			<author><![CDATA[null@example.com (komr)]]></author>
			<pubDate>Mon, 10 Aug 2015 12:56:42 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=96368#p96368</guid>
		</item>
	</channel>
</rss>
