<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; WSH: автом. позиционирование в окне Regedit.exe на нужном параметре]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=291</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=291&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «WSH: автом. позиционирование в окне Regedit.exe на нужном параметре».]]></description>
		<lastBuildDate>Sat, 08 Sep 2007 10:18:45 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: WSH: автом. позиционирование в окне Regedit.exe на нужном параметре]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=4534#p4534</link>
			<description><![CDATA[<p>Если вспомнить, что regedit открывается всегда на том же ключе, на котором мы его спозиционировали в предыдущем сеансе работы, и найти ключик, в котором он сохраняет это местоположение, то задачу открытия regedit на любом заданном ключе можно очень сильно упростить.<br />Вся процедура открытия будет сводится к 2 этапам:<br />1. Загоняем в ключ HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Lastkey значение ветки, которую нам необходимо открыть.<br />2. Запускаем regedit.<br />Работает это исключительно быстро. Пример:<br /></p><div class="codebox"><pre><code>key = &quot;HKEY_CURRENT_USER\Software\Microsoft&quot;
Set WshShell = CreateObject(&quot;WScript.Shell&quot;)
WshShell.RegWrite &quot;HKCU\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Lastkey&quot;, key, &quot;REG_SZ&quot;
WshShell.Run &quot;regedit&quot;, 1, False</code></pre></div><p>Информацию прислал <strong>mozers</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Sat, 08 Sep 2007 10:18:45 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=4534#p4534</guid>
		</item>
		<item>
			<title><![CDATA[Re: WSH: автом. позиционирование в окне Regedit.exe на нужном параметре]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=2709#p2709</link>
			<description><![CDATA[<p>См. также бесплатную утилиту <a href="http://www.eolsoft.com/freeware/registry_jumper/">Registry Jumper 2.0</a>.<br />Работает в трёх режимах: режим GUI (вводим ключ, на который надо прыгнуть в regedit, в специальном окошке), режим командной строки (передаём ключ реестра как параметр командной строки) и режим протокола <strong>regjump://</strong> (подобные ссылки будут работать на HTML-страницах и в меню &quot;Пуск&quot; - &quot;Выполнить&quot;).<br />Поддерживаются полные и короткие названия корневых ключей реестра, история недавно открытых ключей, избранное.<br />Ссылку прислал <strong>alexii</strong>.</p>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Mon, 30 Apr 2007 11:56:37 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=2709#p2709</guid>
		</item>
		<item>
			<title><![CDATA[WSH: автом. позиционирование в окне Regedit.exe на нужном параметре]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=1665#p1665</link>
			<description><![CDATA[<p>Небольшой JS-скрипт демонстрирует поиск заданного раздела и параметра реестра непосредственно в окне программы Regedit.exe с помощью программной симуляции нажатия клавиш. Требует библиотеку <a href="http://www.script-coding.com/AutiItX.html">AutoItX3.dll</a>.<br />Автор скрипта - <strong>Poltergeyst</strong>.<br />P.S. См. также утилиту <a href="http://www.microsoft.com/technet/sysinternals/Miscellaneous/Regjump.mspx">RegJump v1.01</a> от Марка Руссиновича.<br /></p><div class="codebox"><pre><code>//-----------------------------------------------------------------
// Скрипт осуществляет переход к заданному    -------------------
// параметру реестра в окне программы RegEdit,    -------------------
// с помощью программной симуляции нажатия     -------------------
// клавиш.                    -------------------
//-----------------------------------------------------------------
// Данный проект демонстрирует возможности грубой автоматизации----
// AutoItX3 OLE Server
//-----------------------------------------------------------------
// Language:        JavaScript;AutoItX3 COM v3.2.0.1
//-----------------------------------------------------------------
    try
    {
        var autoX=new ActiveXObject(&quot;AutoItX3.Control&quot;)
    }
    
    catch(twUnableAutoIt)
    {
        WScript.Echo(    &quot;Невозможно создание объекта AutoItX3.Control.\n&quot;    +
                &quot;Установите библиотеку AutoItX3.dll\n&quot;            +
                &quot;[http://www.autoitscript.com]\n&quot;            +
                &quot;и зарегистрируйте её в реестре.&quot;)
        WScript.Quit()
    }
//-----------------------------------------------------------------
    var regTitle    =&quot;Редактор реестра&quot;
    var arr        = new Array()
    var keyMessage
//-----------------------------------------------------------------
//Переход к заданному разделу реестра
//-----------------------------------------------------------------
function initNavigateRegistry(path)
{
    try
    {
        //Выделение раздела и параметра реестра из командной строки
        var key=path.match(&quot;(KEY:).*(;PARAM)&quot;)
            key=key[0].replace(&quot;KEY:&quot;,&quot;&quot;)
                key=key.replace(&quot;;PARAM&quot;,&quot;&quot;)
                keyMessage=key

        var param=path.match(&quot;(PARAM:).*&quot;)
            param=param[0].replace(&quot;PARAM:&quot;,&quot;&quot;)
        
        destiny=key.split(&quot;\\&quot;);
        

        //Переоткрыть Regedit.exe
        if (autoX.WinExists(regTitle,&quot;&quot;))
        {
            autoX.WinKill(regTitle,&quot;&quot;);
        }
        
        regPID=autoX.Run(&quot;regedit.exe&quot;,&quot;&quot;,autoX.SW_MAXIMIZE)
        autoX.sleep(500)
            autoX.WinActivate(regTitle,&quot;&quot;)
        autoX.sleep(100)
                autoX.WinSetState(regTitle,&quot;&quot;,autoX.SW_MAXIMIZE)
                    autoX.ControlFocus(regTitle,&quot;&quot;,&quot;SysTreeView321&quot;)
                        autoX.ClipPut(&quot;&quot;)
                            autoX.Send(&quot;{HOME}&quot;)                
                                autoX.sleep(100)
                            
            autoX.ToolTip(&quot;\nПоиск раздела реестра...\r&quot;+
    &quot;Чтобы остановить переместите указатель мыши в левую область экрана...\n&quot;,10,10);
                navigateRegistry(destiny,0)
            autoX.ToolTip(&quot;\nПоиск заданного параметра...\r&quot;+
    &quot;Чтобы остановить переместите указатель мыши в левую область экрана...\n&quot;,10,10);
                navigateParam(param);
        
    }
    catch(twException)    //Обработчик исключительных ситуаций
    {
        autoX.WinKill(regTitle,&quot;&quot;)
            WScript.Echo(&quot;Произошла неопределенная ошибка.Возможно аргумент указан некорректно.&quot;)
                WScript.Quit()
    }
return 0
}


//-----------------------------------------------------------------
//Переход к заданному разделу реестра
//-----------------------------------------------------------------
function navigateRegistry(arr,j)
{
if (j==arr.length){return 1;}

autoX.ControlFocus(regTitle,&quot;&quot;,&quot;SysTreeView321&quot;)

    while (1)
        {
        if (autoX.MouseGetPosX()&lt;100)
            {
                WScript.Echo(&quot;Поиск в реестре остановлен.&quot;);
                    WScript.Quit();
            }
        autoX.Send(&quot;{DOWN}&quot;)
            autoX.WinMenuSelectItem(regTitle,&quot;&quot;,&quot;&amp;Правка&quot;,&quot;&amp;Копировать имя раздела&quot;)

            //Заполнение задержки выборки данных из буфера
            autoX.ControlFocus(regTitle,&quot;&quot;,&quot;SysTreeView321&quot;)
                autoX.ControlFocus(regTitle,&quot;&quot;,&quot;SysTreeView321&quot;)

                regText=&quot;&quot;
                    while (!regText){regText=autoX.ClipGet()}

                regText=regText+&quot;\\&quot;
                    target=regText.split(&quot;\\&quot;)
            
            //Сравнение наименований конечных хвостов заданного и текущего разделов
            if (target[j]==arr[j])
            { 
                autoX.send(&quot;{NumPadAdd}&quot;)
                    navigateRegistry(arr,j+1)    
                        return             
            }
            //Перескок в следующий раздел означает отсутствие искомого подраздела в текущем разделе
            if ((j&gt;0)&amp;&amp;(target[j-1]!=arr[j-1]))
            { 
                WScript.Echo(&quot;Раздел [&quot;+keyMessage+&quot;] не найден.&quot;);
                    WScript.Quit()
            }
        }
return 
}

//-----------------------------------------------------------------
//Переход к заданному параметру
//-----------------------------------------------------------------
function navigateParam(param)
{
        autoX.sleep(300)
    autoX.Send(&quot;{TAB}&quot;)
        autoX.sleep(100)
    autoX.ControlFocus(regTitle,&quot;&quot;,&quot;SysListView321&quot;)
    autoX.Send(&quot;{HOME}&quot;)
        autoX.sleep(100)
    autoX.Send(&quot;{UP}&quot;)
        autoX.sleep(100)

            //Обработка параметра &quot;По умолчанию&quot;
            if (param==&quot;@&quot;)
            {paramVal=autoX.ControlListView(regTitle,&quot;&quot;,&quot;SysListView321&quot;,&quot;Select&quot;,0,0);return}

        while (1)
        {
            if (autoX.MouseGetPosX()&lt;100)
            {
                WScript.Echo(&quot;Поиск в реестре остановлен.&quot;);
                    WScript.Quit();
            }
        
            autoX.ControlFocus    (regTitle,&quot;&quot;,&quot;SysListView321&quot;)

        //Команды для элемента SysListView321
        index=    autoX.ControlListView    (regTitle,&quot;&quot;,&quot;SysListView321&quot;,&quot;FindItem&quot;,param,0)
            if (index==-1)
                {
                    WScript.Echo(&quot;Параметр [&quot;+param+&quot;] не существует.&quot;)
                        return 
                }
            else
                {
                    paramVal=autoX.ControlListView(regTitle,&quot;&quot;,&quot;SysListView321&quot;,&quot;Select&quot;,index,0)
                        return
                }
        }
    return 
}
//-----------------------------------------------------------------


//Навигация в реестре
//В качестве аргумента функции initNavigateRegistry надо указать строку формата:
//&quot;KEY:HKEY_LOCAL_MACHINE\\&lt;подраздел1&gt;\\&lt;подраздел2&gt;\\...\\&lt;подраздел3&gt;;PARAM:&lt;имя параметра&gt;&quot;


initNavigateRegistry(&quot;KEY:HKEY_LOCAL_MACHINE\\System\\CurrentControlSet\\Services\\VxD\\VCACHE\\Lookup;PARAM:Нет такого параметра&quot;)
    autoX.sleep(300)
initNavigateRegistry(&quot;KEY:HKEY_CURRENT_CONFIG\\System\\CurrentControlSet\\Control\\Print\\Printers;PARAM:@&quot;)
    autoX.sleep(300)
initNavigateRegistry(&quot;KEY:HKEY_LOCAL_MACHINE\\Software\\ODBC\\ODBCINST.INI\\MS Code Page Translator;PARAM:UsageCount&quot;)
    autoX.sleep(300)
initNavigateRegistry(&quot;KEY:HKEY_USERS\\.DEFAULT\\SOFTWARE\\WinRAR\\SFX\\Default;PARAM:PathType&quot;)</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (The gray Cardinal)]]></author>
			<pubDate>Thu, 18 Jan 2007 19:04:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=1665#p1665</guid>
		</item>
	</channel>
</rss>
