<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=17071&amp;type=atom" />
	<updated>2022-04-29T18:20:01Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=17071</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152980#p152980" />
			<content type="html"><![CDATA[<p>Наверно. Ну ладно, мы сделали, что могли. <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /></p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2022-04-29T18:20:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152980#p152980</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152979#p152979" />
			<content type="html"><![CDATA[<p>Предполагаю, правильный алгоритм может быть такой - считываем папку favorites и сортируем только те файлы и папки, которые прописаны в реестре.<br />Остальные просто по имени кидаем в конец.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2022-04-29T18:10:10Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152979#p152979</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152978#p152978" />
			<content type="html"><![CDATA[<p>Да, баги явно есть. Ну мне было в данном случае просто интересно правильно ключ прочитать, скорее всего скрипт читает правильно.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2022-04-29T18:01:47Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152978#p152978</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152977#p152977" />
			<content type="html"><![CDATA[<p>Потестировал, как обычно IE - один большой баг.<br />И автоматизировать его, когда существуют нормальные браузеры - удовольствие еще то.... <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /><br />Я стер все букмарки из ие, создал 3 новых букмарка &quot;3&quot; &quot;2&quot; и &quot;1&quot; соответственно.<br />Переименовывал &quot;2&quot; в &quot;0&quot;, вышел из ие, зашел обратно и вижу &quot;3&quot;-&gt;&quot;1&quot;-&gt;&quot;0&quot;.<br />То есть после переименования ссылки, сортировка данной ссылки сбрасывается.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2022-04-29T17:59:02Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152977#p152977</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152976#p152976" />
			<content type="html"><![CDATA[<p>Скрипт тут не при чём, что в ключе написано, то он и читает. У меня такая же проблема.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2022-04-29T17:55:19Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152976#p152976</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152975#p152975" />
			<content type="html"><![CDATA[<p>Ну он вообще странно читает.<br />Если я ссылку переименовал, то скрипт продолжает ее показывать под старым именем.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2022-04-29T17:31:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152975#p152975</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152973#p152973" />
			<content type="html"><![CDATA[<p>Надо понять, почему не читает. У меня в реестре они находятся в ключах, название которых соответствует их реальному имени, т. е. информация о Favorites Bar1 должна находиться в ключе с названием Links. Если у тебя это не так, тогда нет единого принципа.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2022-04-29T17:08:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152973#p152973</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152972#p152972" />
			<content type="html"><![CDATA[<p>Есть у 2 ключей. <br />У Favorites и у 3.</p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2022-04-29T17:03:01Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152972#p152972</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152971#p152971" />
			<content type="html"><![CDATA[<p>У меня <em>SubKeys: &quot;no info&quot;</em> показывает, когда нет соответствующего ключа в реестре:<br /></p><div class="codebox"><pre><code>   RegRead, value, % regKey, Order
   if (value = &quot;&quot;)
      Return &quot;no info&quot;</code></pre></div><p>Посмотри, есть они у тебя?</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2022-04-29T17:00:35Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152971#p152971</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152969#p152969" />
			<content type="html"><![CDATA[<p>Скажем так, что оба варианта показывают неполностью, но твой показывает меньше.<br /><a href="https://ibb.co/kDRYkPd">https://ibb.co/kDRYkPd</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2022-04-29T16:53:43Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152969#p152969</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152965#p152965" />
			<content type="html"><![CDATA[<p>А что именно неправильно?</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2022-04-29T14:10:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152965#p152965</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152964#p152964" />
			<content type="html"><![CDATA[<p>Похоже где-то баг коде.<br />Так-как эта утилита показывает на win10 правильно, а твой код нет.<br /><a href="http://www.arstdesign.com/articles/favextract.zip">http://www.arstdesign.com/articles/favextract.zip</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2022-04-29T13:52:28Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152964#p152964</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152961#p152961" />
			<content type="html"><![CDATA[<p>Удалось прочитать:<br /></p><div class="codebox"><pre><code>key := &quot;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Favorites&quot;

arr := ReadOrder(key)
Run, notepad,,, PID
WinWait, ahk_pid %PID%
ControlSetText, Edit1, % RegExReplace(AhkToJSON(arr, &quot;    &quot;), &quot;\R&quot;, &quot;`r`n&quot;)

ReadOrder(regKey) {
   arr := []
   RegRead, value, % regKey, Order
   if (value = &quot;&quot;)
      Return &quot;no info&quot;
   
   size := CryptStringToBinary(value, data, &quot;CRYPT_STRING_HEX&quot;)
   numOfRecords := NumGet(data, 16, &quot;UInt&quot;)
   offset := 20
   order := 0
   Loop % numOfRecords {
      lengthOfRecord := NumGet(data, offset, &quot;UInt&quot;)
      val := NumGet(data, offset + 4, &quot;Int&quot;)
      order := val = -5 ? order + 1 : val + 1
      flags := NumGet(data, offset + 10, &quot;UShort&quot;)
      isFolder := flags &amp; 1
      isUrl := (flags &gt;&gt; 1) &amp; 1
      isShortInUnicode := (flags &gt;&gt; 2) &amp; 1
      
      shortLen := 0
      while NumGet(&amp;data + offset + 22 + ((A_Index - 1) &lt;&lt; isShortInUnicode), isShortInUnicode ? &quot;UShort&quot; : &quot;UChar&quot;)
         shortLen += 1 &lt;&lt; isShortInUnicode
      
      padding := 0
      while !NumGet(&amp;data + offset + 22 + shortLen + A_Index - 1, &quot;UChar&quot;)
         padding++
      
      name := StrGet(&amp;data + offset + 22 + shortLen + padding + 42, &quot;UTF-16&quot;)
      
      arr[order] := {name: name, isFolder: isFolder, isUrl: isUrl}
      if isFolder
         arr[order].subKeys := %A_ThisFunc%(regKey . &quot;\&quot; . name)
      offset += lengthOfRecord
   }
   Return arr
}

CryptStringToBinary(string, ByRef outData, formatName := &quot;CRYPT_STRING_BASE64&quot;)
{
   static formats := { CRYPT_STRING_BASE64: 0x1
                     , CRYPT_STRING_HEX:    0x4 }
   fmt := formats[formatName]
   chars := StrLen(string)
   if !DllCall(&quot;Crypt32\CryptStringToBinary&quot;, &quot;Str&quot;, string, &quot;UInt&quot;, chars, &quot;UInt&quot;, fmt
                                            , &quot;Ptr&quot;, 0, &quot;UIntP&quot;, bytes, &quot;Ptr&quot;, 0, &quot;Ptr&quot;, 0)
      throw &quot;CryptStringToBinary failed. LastError: &quot; . A_LastError
   VarSetCapacity(outData, bytes)
   DllCall(&quot;Crypt32\CryptStringToBinary&quot;, &quot;Str&quot;, string, &quot;UInt&quot;, chars, &quot;UInt&quot;, fmt
                                        , &quot;Str&quot;, outData, &quot;UIntP&quot;, bytes, &quot;Ptr&quot;, 0, &quot;Ptr&quot;, 0)
   Return bytes
}

AhkToJSON(obj, indent := &quot;&quot;) {
   static Doc, JS
   if !Doc {
      Doc := ComObjCreate(&quot;htmlfile&quot;)
      Doc.write(&quot;&lt;meta http-equiv=&quot;&quot;X-UA-Compatible&quot;&quot; content=&quot;&quot;IE=9&quot;&quot;&gt;&quot;)
      JS := Doc.parentWindow
      ( Doc.documentMode &lt; 9 &amp;&amp; JS.execScript() )
   }
   if indent|1 {
      if IsObject( obj ) {
         isArray := true
         for key in obj {
            if IsObject(key)
               throw Exception(&quot;Invalid key&quot;)
            if !( key = A_Index || isArray := false )
               break
         }
         for k, v in obj
            str .= ( A_Index = 1 ? &quot;&quot; : &quot;,&quot; ) . ( isArray ? &quot;&quot; : %A_ThisFunc%(k, true) . &quot;:&quot; ) . %A_ThisFunc%(v, true)

         Return isArray ? &quot;[&quot; str &quot;]&quot; : &quot;{&quot; str &quot;}&quot;
      }
      else if !(obj*1 = &quot;&quot; || RegExMatch(obj, &quot;^-?0(?!$)|\s&quot;))
         Return obj
      
      for k, v in [[&quot;\&quot;, &quot;\\&quot;], [A_Tab, &quot;\t&quot;], [&quot;&quot;&quot;&quot;, &quot;\&quot;&quot;&quot;], [&quot;/&quot;, &quot;\/&quot;], [&quot;`n&quot;, &quot;\n&quot;], [&quot;`r&quot;, &quot;\r&quot;], [Chr(12), &quot;\f&quot;], [Chr(8), &quot;\b&quot;]]
         obj := StrReplace( obj, v[1], v[2] )

      Return &quot;&quot;&quot;&quot; obj &quot;&quot;&quot;&quot;
   }
   sObj := %A_ThisFunc%(obj, true)
   Return JS.eval(&quot;JSON.stringify(&quot; . sObj . &quot;,&#039;&#039;,&#039;&quot; . indent . &quot;&#039;)&quot;)
}</code></pre></div><p>Ключи расположены в их порядке в панели избранного IE, ключ name — это реальное (а не видимое) имя папки/файла.<br />На семёрке правильно прочитались элементы верхнего уровня, о некоторых вложенных папках информации нет, а о тех, что есть, частично оказалась неверной. Заметил по крайней мере одно неправильное название папки, что не изменилось даже после перезагрузки.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2022-04-29T10:36:27Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152961#p152961</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152958#p152958" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>unordered = DWORD	4 bytes	sorted index (0-based), special value : -5 if never sorted (i.e. appended at tail)</p></blockquote></div><p><a href="http://www.arstdesign.com/articles/iefavorites.html">http://www.arstdesign.com/articles/iefavorites.html</a></p>]]></content>
			<author>
				<name><![CDATA[Malcev]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=26930</uri>
			</author>
			<updated>2022-04-29T01:25:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152958#p152958</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=152957#p152957" />
			<content type="html"><![CDATA[<p>Нет, я имел в виду, что проще через Shell.</p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2022-04-29T01:24:21Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=152957#p152957</id>
		</entry>
</feed>
