1 (изменено: ant_serg57, 2022-04-28 05:12:25)

Тема: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Добрый день!

Так как не нашел способа узнать адрес ярлыка под курсором в панели избранного браузера, то решил попробовать получить путь к файлу ярлыка и прочитать адрес из него непосредственно.

После нескольких дней изысканий, благодаря помощи teadrinker и Malcev, у меня получился рабочий код, который для папок выводит полный путь к директории на диске, а для ярлыков выводит путь к файлу и адрес url, прочитанный из него. Для простоты восприятия код упрощен до линейного вида, а получение локального пути элемента под курсором в дереве оформлено в виде функции.

Внимание: Для работы скрипта нужна библиотека acc.ahk, так как используются функции из нее.

f1::
  Acc:=Acc_ObjectFromPoint(pItem)
  if (Acc.accRole(pItem) = 36)
    goto get_path
  msgbox элемент панели избранного (папка или ярлык) под курсором не найден
return

get_path:
  regread item_path,HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,Favorites
  item_path.="\" Acc_GetTVItemPath(Acc,pItem)
  if !(Acc.accState(pItem) & 0x0600)
    goto get_url
  msgbox % item_path
return
get_url:
  item_url:=""
  item_path.=".url"
  fileread item_data,% item_path
  loop parse,item_data,`n,`r
    if RegExMatch(A_LoopField,"URL=(.*)",z)
      item_url:=z1
  item_data=
  msgbox % item_path "`n" item_url
return

Acc_GetTVItemPath(acc,itm,pth="",old="",lev="")
{
  while itm
  {
    lev:=acc.accValue(itm)
    if (old!=lev)
      pth:=acc.accName(itm) (old?"\":"") pth,old:=lev
    itm:=lev?acc.accNavigate(6,itm):0
  }
  return pth
}

П.С.: Кстати говоря, Acc.accRole(pItem) из данного примера позволяет гораздо лучше определить гиперссылку под курсором нежели переменная A_Cursor, потому что вид курсора на странице может быть переопределен, а вот сам статус элемента всегда остается неизменным.

2

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Не совсем понял, чего вы хотите добиться.

ant_serg57 пишет:

не нашел способа узнать адрес ярлыка под курсором

ant_serg57 пишет:

решил попробовать получить путь к файлу ярлыка и прочитать адрес из него непосредственно

Если пытаетесь получить информацию из контрола TreeView, то адреса там нет.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: ant_serg57, 2022-04-25 02:00:06)

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Немного еще поэкспериментировал и выяснил что с контролом работает только частично :
а) количество элементов получить можно и оно корректно

; TVM_GETITEMCOUNT := 0x1105
sendmessage 0x1105,0,0,,ahk_id %tvid%
count:=ErrorLevel

б) а вот свернуть/развернуть узлы, например, уже не получается

; TVM_EXPAND := 0x1102
; TVE_TOGGLE := 0x0003
pItem:=1 ; первый узел/папка (Панель избранного) в избранном
sendmessage 0x1102,3,pItem,,ahk_id %tvid%
result:=ErrorLevel ; всегда FAIL

Короче, совершенно непонятно в чем заключается проблема.

*

teadrinker пишет:
Не совсем понял, чего вы хотите добиться.

Как минимум получить url адрес из ярлыка под курсором на панели избранного Internet Explorer, возможно и дополнительную информацию которая может в нем содержаться.
В идеале получить еще и относительный путь к ярлыку в дереве этого контрола.
И конечно же, научиться самому и показать другим как это делается. Пока что рабочих примеров, которые решали бы эту задачу найти не удалось.

teadrinker пишет:
Если пытаетесь получить информацию из контрола TreeView, то адреса там нет.

Это и понятно, что вся дополнительная информация содержится не в этом контроле, а в дополнительных данных, которые доступны только окольными путями, но для этого и пишутся скрипты для решения подобных задач когда они возникают.

4

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Непонятно, зачем вообще биться с IE, когда им давно никто не пользуется. Максимум того, что вы можете получить, это название узла или элемента под курсором. Но это название никак не поможет определить соответствующий адрес.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

5

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker пишет:
Непонятно, зачем вообще биться с IE, когда им давно никто не пользуется.

Извините, но вы ошибаетесь, есть множество людей которые до сих пор пользуются этим браузером наравне с хромом, фоксом и/или, например, авантом. Это как и из-за простоты использования скриптов, с помощью которых можно получить доступ к содержимому страниц, в отличии от других браузеров, так и из-за той же панели избранного, которая в том же хроме, например, вообще отсутствует.
Да, можно сказать, что IE устарел, имеет множество проблем с безопасностью и под него уже не пишутся разнообразные плагины, расширяющие его функционал, но по совокупности он до сих пор выигрывает из-за удобства его использования и универсальности скриптов, для работы которых на любом компьютере не требуется совершать дополнительные действия вроде установки плагинов для доступа к страницам - то есть принес, запустил и все, есть готовый и нужный результат без какого либо шаманства.
Я для себя, например, написал множество скриптов под IE, которые форматируют страницы на сайтах, которые я посещаю, в наиболее удобный мне вид и всего по нажатию одной клавиши. Для других браузеров такой легкостью пока похвастаться не могу, к сожалению.

teadrinker пишет:
Максимум того, что вы можете получить, это название узла или элемента под курсором.

Почему вы так считаете? Я могу заморочиться, перебрать как все элементы панели, так и все файлы/папки в папке избранного, из которой они читаются браузером, соотнести их между собой и построить в памяти объект-список, из которого выдергивать нужную мне информацию по номеру элемента под курсором.
Но, такой подход считаю приемлемым только если не получится реализовать более логичный и быстрый способ, которым вообще то все и пользуются, работая с данным типом контролов - перебиранием родительских элементов вверх для получения пути к элементу в дереве.
Это конкретно у меня на данный момент возникла проблема с получением номера родительского элемента и хотелось бы ее решить, но, если этого сделать не получится, то придется писать громоздкий код для ее обхода, без которого в нормальной ситуации можно было бы обойтись.

teadrinker пишет:
Но это название никак не поможет определить соответствующий адрес.

Вы ошибаетесь. Я, так или иначе, все равно смогу получить локальный путь к элементу внутри папки избранного, а путь этот повторяет реальный - осталось добавить к нему в начале место расположения папки избранного и в конце ".url". Получив путь к файлу ярлыка, я могу прочитать из него не только адрес url, но и вообще любые дополнительные данные которые в нем содержатся.
Вас, видимо, ввело в заблуждение то, что я не описал сразу дальнейшие действия после получения пути, но это лучше делать уже в финальной версии скрипта нежели показывать куски кода, до которых дело еще не дошло.

6

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Ну, не буду спорить. Но я всё равно не понял алгоритм, который вы хотите использовать, что такое номер родительского элемента и зачем нужно сворачивать/разворачивать узлы, если элемент уже под курсором. Надеюсь, как напишете, опубликуете здесь.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

7 (изменено: ant_serg57, 2022-04-25 17:03:57)

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker пишет:
что такое номер родительского элемента

Ну, Acc_ObjectFromPoint(pItem) возвращает в pItem порядковый номер (индекс) элемента под курсором в списке контрола, а доступ в Acc.accName() к элементам происходит через тот же порядковый номер элемента.
Номер родительского (parentId) элемента соответственно будет у того элемента, который содержит данный элемент в себе - это же не простой линейный список, а дерево с папками и ярлыками в них.

teadrinker пишет:
Но я всё равно не понял алгоритм, который вы хотите использовать,

Да вроде бы стандартный алгоритм получения пути в контроле при обходе узлов дерева вверх. Потом дополню этот путь до полного для файловой системы и прочитаю файл ярлыка, получив url. В общем то все, ничего принципиально сложного.

teadrinker пишет:
и зачем нужно сворачивать/разворачивать узлы, если элемент уже под курсором.

А это было просто для проверки чтобы убедиться что связь с контролом есть и все работает. И нет, пыталось свернуть/развернуть первый элемент (папку) в списке, а не под курсором.

teadrinker пишет:
Надеюсь, как напишете, опубликуете здесь.

Конечно, как решу задачу, приведу здесь полностью рабочий код, чтобы его можно было использовать другими нуждающимися в этом.

8

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57 пишет:

Да вроде бы стандартный алгоритм получения пути в контроле при обходе узлов дерева вверх. Потом дополню этот путь до полного для файловой системы и прочитаю файл ярлыка, получив url. В общем то все, ничего принципиально сложного.

А почему вы думаете, что порядок элементов в дереве обязательно должен соответствовать порядку ярлыков в папке? Смотрите:
 
 https://i.imgur.com/3FN8to4.gif

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57, смысл что-то писать для этого без двух месяцев покойника?
Пользовательские скрипты на современных броузерах можно запускать например через tampermonkey, не мучаясь с iaccessible.
И в данном случае для нахождения пути вам достаточно составить список имен элементов и их значений.

10

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Для этого нужно ещё понять, как получить имя под курсором, и как поставить ему в соответствие файл/папку (названия папок не соответствуют именам в файловой системе).

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11 (изменено: Malcev, 2022-04-25 21:24:20)

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

У меня имя отображается через ahkspy.
И имена папок совпадают c именами в файловой системе.

12

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

У меня не все совпадают. Папка C:\Users\User\Favorites\Панель избранного на самом деле C:\Users\User\Favorites\Links. Некоторые другие тоже отличаются. Но я на семёрке смотрел. На десятке у меня IE вообще не хочет работать, виснет.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

13

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57, я попробовал решить задачу, вроде получается. Не применял IAccessible, использовал сообщения TVM_..., как более нативный способ. Если хотите, могу выложить код.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

14 (изменено: ant_serg57, 2022-04-26 01:27:16)

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker пишет:
А почему вы думаете, что порядок элементов в дереве обязательно должен соответствовать порядку ярлыков в папке? Смотрите:

Это конечно все так, только важно это для варианта полного сопоставления дерева и файлов/папок на диске, но там для этого имена элементов есть, так что для каждой папки можно сделать хэш массив для них в виде <дочернее имя>=номер.
Это, наверное, будет самый худший вариант решения, так как придется это делать при каждом нажатии клавиши, а это может быть (и скорее будет) долго. Короче, совершенно не оптимально из-за множества совершенно одинаковых действий, результат которых в последствии использован не будет - почти как каждый раз заново рендерить картинку, которая каждый кадр не меняется.
А с родительскими элементами это будет совершенно не важно - путь от этого не меняется  и обращение идет только к нужным нам элементам.

Malcev пишет:
ant_serg57, смысл что-то писать для этого без двух месяцев покойника?
Пользовательские скрипты на современных броузерах можно запускать например через tampermonkey, не мучаясь с iaccessible.

Так у меня сей браузер очень даже живенький и вполне функциональный благодаря скриптам AHK, зачем мне какие то другие, которые работают в ущерб универсальности AHK?

Malcev пишет:
И в данном случае для нахождения пути вам достаточно составить список имен элементов и их значений.

Пока что погодим с этим в надежде что есть более быстрый способ чем перебор всех элементов.

teadrinker пишет:
Для этого нужно ещё понять, как получить имя под курсором, и как поставить ему в соответствие файл/папку (названия папок не соответствуют именам в файловой системе).

Ну само имя то уже получено, надо решить что делать дальше и главное как.

teadrinker пишет:
У меня не все совпадают. Папка C:\Users\User\Favorites\Панель избранного на самом деле C:\Users\User\Favorites\Links.

Читаем переменную Favorites в ветке HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders и получаем корректный путь к избранному. У меня, по крайней мере, ничего не подменяет.

teadrinker пишет:
ant_serg57, я попробовал решить задачу, вроде получается. Не применял IAccessible, использовал сообщения TVM_..., как более нативный способ. Если хотите, могу выложить код.

Мда, вынужден признать что у меня не работало потому что я неправильно все делал при обращении через TVM - оказывается там контрол работает не через номера элементов, а через указатели на элементы.

sendmessage 0x110A,0,0,,ahk_id %tvid% 
root:=ErrorLevel

То есть если получить указатель на корневой элемент, то можно дальше свободно гулять по дереву и спокойно делать с ним всякое нужное, но вот удобство прямого доступа к элементам, ммм, хромает.
Как получить указатель на элемент по номеру пока не нашел. Остается альтернативный вариант получения пути к элементу, но уже через TVM. В принципе можно ведь и так делать, совсем не обязательно зацикливаться на Acc. Жаль только что совместить их пока не получается, чтобы пользоваться плюсами и того и того - в Acc можно сразу получить имя элемента, а с TVM для этого приходится выделять память для этого и просить контрол записать имя туда.
Забавно, когда я кодил в Delphi, там вся работа с элементами была через номера, что сильно облегчало работу, но там были переопределенные контролы у которых была дополнительная обвязка для удобства работы.
Вы указатель на элемент под курсором как получили? Пока что этот момент еще не нагуглил себе. Потом сравним рабочий код что у нас получился.

15

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Пока что погодим с этим в надежде что есть более быстрый способ чем перебор всех элементов.

А зачем перебирать все?
Если accValue данного элемента 0, то это будет полный его путь, если не 0, то идете вверх до тех пор пока не будет 0.
Это всё делается за милисекунды.

16

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57 пишет:

Жаль только что совместить их пока не получается

Совмещать не надо, всю нужную информацию можно получить и одним способом, и другим. Я не пробовал IAccessible, поскольку уверенно себя чувствую при работе с сообщениями (как писал выше, это нативный для контрола способ).

ant_serg57 пишет:

Вы указатель на элемент под курсором как получили?

TVM_HITTEST.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

17

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Malcev пишет:

идете вверх до тех пор пока не будет 0

Попробовал, с этим не так всё просто. Родительским элементом ссылки является не узел с именем папки, в которой ссылка находится, а всё дерево целиком. Можно перебирать элементы, уменьшая childId, но так идём не по структуре дерева.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

18

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

f1::
Acc  :=Acc_ObjectFromPoint(pItem)
loop
{
   msgbox % Acc.accName(pItem) "`n" Acc.accValue(pItem)
   pItem := Acc.accNavigate(NAVDIR_PREVIOUS := 6, pItem)
}

19

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Да, так правильно перебирает.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

20 (изменено: ant_serg57, 2022-04-26 06:07:35)

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Malcev пишет:
А зачем перебирать все?
Если accValue данного элемента 0, то это будет полный его путь, если не 0, то идете вверх до тех пор пока не будет 0.

Эээ, нет, это совсем не так работает. Если смотреть по номерам, то сначала идут все элементы первого уровня, потом второго, за ними третьего, четвертого и так далее.
Номер элемента соответствует его порядку добавления в список, когда сначала добавляются все родительские элементы, а потом дочерние. То есть в таком вот дереве :
A
  AA
  AB
    ABA
  AC
    ACA
    ACB
B
  BA
  BB
    BBA 
порядок элементов будет вот такой :
1=A
2=B
3=AA
4=AB
5=AC
6=BA
7=BB
8=ABA
9=ACA
10=ACB
11=BBA
Потом, accValue не так работает как вам кажется, его значение показывает уровень на котором находится элемент считая от 0.

Спасибо за ваш пример перебора с accNavigate, это именно то что нужно. Для получения пути его пришлось немного доработать.

path:=old:=""
while pItem
{
  lev:=Acc.accValue(pItem)
  if (old!=lev)
    path:=Acc.accName(pItem) (old?"\":"") path,old:=lev
  pItem := lev?Acc.accNavigate(6,pItem):0
}
msgbox % path

Вот так теперь получает путь. Осталось только определить нужно ли для исходного pItem добавлять ".url" или нет, то есть был этот элемент папкой или ярлыком.

if Acc.accNavigate(NAVDIR_FIRSTCHILD=7,pItem)
  path:=".url"

По крайней мере, попытка получить его первый дочерний элемент в любом случае выдает ошибку - пишет что параметр задан неверно.

teadrinker пишет:
TVM_HITTEST.

Что то у меня с ним не получается - нашел несколько примеров, один просто не работает, другой крашит браузер. Увы.

21

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57 пишет:

Эээ, нет, это совсем не так работает. Если смотреть по номерам, то сначала идут все элементы первого уровня, потом второго, за ними третьего, четвертого и так далее

Я не про номера говорил, а именнно про accvalue, с помощью которого вы можете получить путь.

ant_serg57 пишет:

Осталось только определить нужно ли для исходного pItem добавлять ".url" или нет, то есть был этот элемент папкой или ярлыком.

Если через iaccessible, то можно проверять accState на expanded и collapsed.
Если через винапи, то проверять что по указанному пути находится, папка или шорткат (FileExist).

22

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Ура, теперь можно собирать финальный код всего этого дела.

Malcev пишет:
Я не про номера говорил, а именнно про accvalue, с помощью которого вы можете получить путь.

Да, но без accNavigate это был бы сизифов труд.

Malcev пишет:
Если через iaccessible, то можно проверять accState на expanded и collapsed.

Проще, наверное, будет сделать accState(...) & 0x0600 и если результат больше нуля, то это папка.

23 (изменено: ant_serg57, 2022-04-26 13:39:59)

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Ура, задача решена, спасибо за помощь! Привожу рабочий код :

f1::
  Acc:=Acc_ObjectFromPoint(pItem)
  name:=Acc.accName(pItem)
  role:=Acc.accRole(pItem)
; если курсор над любым элементом (ярлыком) панели избранного
  if (role = 36)
  {
    type:=(Acc.accState(pItem) & 0x0600)>0
    path:=old:=""
    if !type
      path:=".url"
    while pItem
    {
      lev:=Acc.accValue(pItem)
      if (old!=lev)
        path:=Acc.accName(pItem) (old?"\":"") path,old:=lev
      pItem := lev?Acc.accNavigate(6,pItem):0
    }
    regread full,HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders,Favorites
    if type
    {
      msgbox % full "\" path
    } else {
      url:=""
      fileread list,% full "\" path
      loop parse,list,`n,`r
        if RegExMatch(A_LoopField,"URL=(.*)$",z)
          url:=z1
      list=
      msgbox % full "\" path "`n" url
    }
  } else {
    msgbox объект не найден
  }
return

24

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Мне кажется, проще было проверить, что курсор не наведен на элемент, msgbox и return, не нужна была бы вложенность.

Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

25

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57 пишет:

Ура, задача решена, спасибо за помощь!

Пожалуйста, но у меня ваш код работает так:
 
 https://i.imgur.com/SbfjieQ.gif

 
Так должно быть?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

26

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker пишет:
Так должно быть?

Нет, содержимое ярлыков у вас не читает, а вместо пути к папке почему-то показывает содержимое переменной окружения %PATH%. А что показывает при наведении на папку AHK внизу? А на ярлыке Mail.Ru еще ниже?
Проверил на Windows XP и 7 - полет нормальный.
В общем, если детально разбираться, то надо делать логи всех этапов. Написать вам скрипт для этого?

27 (изменено: ant_serg57, 2022-04-26 16:16:38)

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker, вы точно ничего не напутали? А то при получении пути к папке знаки ";" там физически оказаться не могут, это только если в этот момент переменная path подменяется другим значением. Ну или заменить ее имя на другое в коде если коллизии возникают.

28

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57 пишет:

Написать вам скрипт для этого?

Не надо, я-то понимаю, в чём проблемы. Вы не учли то, что я писал выше — видимые названия папок могут не соответствовать реальным в файловой системе. С переменной path тоже понятно: если в скрипте использовать переменную с таким названием, то при отсутствии значения будет подставляться системная. Для предотвращения этого есть директива #NoEnv.

ant_serg57 пишет:

А на ярлыке Mail.Ru еще ниже?

C mail.ru работает правильно.

teadrinker, вы точно ничего не напутали?

Точно, проверил на десятке и на семёрке — результат одинаковый.
Кроме того, у вас в коде отсутствует функция Acc_ObjectFromPoint(). Для тех, у кого её нет в библиотеке, выдаст ошибку.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

29

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

https://i.imgur.com/JKjidq5.gif

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

30

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker пишет:
Не надо, я-то понимаю, в чём проблемы.

Я тоже понял уже - вы не почистили старое значение переменной, причем это у вас происходит только в случае папок.

teadrinker пишет:
С переменной path тоже понятно: если в скрипте использовать переменную с таким названием, то при отсутствии значения будет подставляться системная. Для предотвращения этого есть директива #NoEnv.

А для кого вот эту строчку писал?

path:=old:=""

Как раз чистит предыдущее значении переменной.

teadrinker пишет:
Вы не учли то, что я писал выше — видимые названия папок могут не соответствовать реальным в файловой системе.

Уточнение - только для системных папок, для которых применяется локализация. А это очень особый случай, который надо допиливать отдельно. Для всех остальных папок, созданных пользователем, проблем с несоответствием не возникает.
Ну напишу еще одну строчку кода, которая в пути значение "Панель избранного" меняет на Links, но это не так принципиально.

Тут такая байда получается - в папке Links лежит файлик desktop.ini, в котором есть строчка :

[.ShellClassInfo]
LocalizedResourceName=@%windir%\System32\ieframe.dll,-12385

Которая и задает локализацию названия. Вот только она работает в обратную сторону - браузер нашел папку, посмотрел в ней ее настройки и сменил название для вывода на экран, а как в обратную сторону это должно работать мне неясно - опять, что ли, сканировать все папки избранного только уже для сопоставления экранных и реальных названий?
Проще в комментарии написать - товарищи, если у вас в избранном есть папки с локализованными названиями, то, будьте добры, переименуйте их самостоятельно, чтобы скрипт на них не спотыкался.

Хм, мне даже интересно стало, что будет с браузером, когда он обнаружит в избранном две папки - Links и "Панель избранного", покажет содержимое в одной папке, не покажет папку с русским названием или покажет две одинаково названные папки?

teadrinker пишет:
Точно, проверил на десятке и на семёрке — результат одинаковый.

Да не, быть такого не может, чтобы безусловная строчка очистки пути работала в зависимости от типа элемента - она либо работает во всех случаях либо нет. Ну, давайте ее заменим на другую :

    path:="",old:=""

Может ваш AHK глючит как то на старой.

teadrinker пишет:
Кроме того, у вас в коде отсутствует функция Acc_ObjectFromPoint(). Для тех, у кого её нет в библиотеке, выдаст ошибку.

Привести ее, конечно, можно, но она же есть в стандартной библиотеке acc.ahk. Ну хорошо, вот она :

Acc_ObjectFromPoint(ByRef _idChild_ = "", x = "", y = "")
{
	Acc_Init()
	If	DllCall("oleacc\AccessibleObjectFromPoint", "Int64", x==""||y==""?0*DllCall("GetCursorPos","Int64*",pt)+pt:x&0xFFFFFFFF|y<<32, "Ptr*", pacc, "Ptr", VarSetCapacity(varChild,8+2*A_PtrSize,0)*0+&varChild)=0
	Return	ComObjEnwrap(9,pacc,1), _idChild_:=NumGet(varChild,8,"UInt")
}

31 (изменено: ant_serg57, 2022-04-27 01:27:15)

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Phoenixxx_Czar пишет:
Мне кажется, проще было проверить, что курсор не наведен на элемент, msgbox и return, не нужна была бы вложенность.

Вы о чем? Что проще, для чего? Какая вложенность не нужна? Вы в курсе для чего писался этот скрипт? Знаете более лучшее и простое решение?

П.С.: Или вы о том, чтобы вначале написать так, а далее убрать отступы с вложением в {...} после if?

  if !(role = 36)
  {
    msgbox объект не найден
    return
  }

Так это вопрос вкуса, как кому нравится организовывать свой код. Да и если будет несколько проверок на разные объекты (например, при нажатии клавиши над заголовком панели для поиска адреса текущей страницы в избранном), то будет не очень удобно в начале кода громоздить такие участки кода как вы советуете, тогда уж лучше будет напихать простых проверок с переходом по меткам и уже там писать все что нужно, тем более без тех же самых вложений.

Более логично было бы предложить вынести получение пути в отдельную функцию (например в Acc_GetPath), чем сильно сократить непосредственный код во вложении между {...}.

П.С.2: Да, забыл упомянуть еще такую немаловажную вещь, как продвинутые редакторы кода, с возможностью сворачивать ненужные ветки - вот в них вложения гораздо удобней блоков с return, так как ненужные в данный момент ветки легко сворачиваются, в отличии от кода в вашем варианте - он без вложения и сворачиваться не будет, увы. В общем, каждому свое.

32

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57 пишет:

Ну хорошо, вот она

Так тоже не сработает, отсутствует Acc_Init().

ant_serg57 пишет:

Может ваш AHK глючит как то на старой.

Не очень понял. На какой старой, на семёрке? Так писал же, что на 10 так же работает.

ant_serg57 пишет:

Да не, быть такого не может, чтобы безусловная строчка очистки пути работала в зависимости от типа элемента - она либо работает во всех случаях либо нет. Ну, давайте ее заменим на другую

Боюсь, вы не поняли, в чём проблема. Вот на десятке:
 
 https://i.imgur.com/GSx9LuC.gif
 

ant_serg57 пишет:

Уточнение - только для системных папок, для которых применяется локализация. А это очень особый случай, который надо допиливать отдельно.

Ну наверно, я ничего не менял, всё как было после установки, так и есть, и на семёрке, и на десятке. Так что ничего особого, а скорее всего у всех так с русскоязычной Windows. Собственно, проблема решается в пару строк кода.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

33

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57 пишет:

Хм, мне даже интересно стало, что будет с браузером, когда он обнаружит в избранном две папки - Links и "Панель избранного", покажет содержимое в одной папке, не покажет папку с русским названием или покажет две одинаково названные папки?

 
https://i.imgur.com/a1qgEJQ.png

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

34 (изменено: ant_serg57, 2022-04-27 01:48:55)

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker пишет:
Так тоже не сработает, отсутствует Acc_Init().

Уиии! Мне уже страшно представить что еще потребуется.

Acc_Init()
{
	Static	h
	If Not	h
		h:=DllCall("LoadLibrary","Str","oleacc","Ptr")
}

Ну и ладно, мне не жалко.
Но, может быть, лучше приведем ссылку на стандартную библиотеку acc.ahk чтобы не мучать людей?

teadrinker пишет:
Не очень понял. На какой старой, на семёрке? Так писал же, что на 10 так же работает.

На старой строке очистки.

teadrinker пишет:
Боюсь, вы не поняли, в чём проблема. Вот на десятке:

А почему тогда на ярлыках такого нет?
В общем, для простоты, давайте просто переименуем full в path1, а path в path2 и будем работать дальше с ними.

teadrinker пишет:
Так что ничего особого, а скорее всего у всех так с русскоязычной Windows. Собственно, проблема решается в пару строк кода.

Ну можно ее решить и без кода - в папке Links удаляем файл desktop.ini, а потом переименовываем ее в вариант на русском - таким образом проблемы с этой папкой исчезают навсегда в каких либо скриптах или программах. Это ведь устать можно правки делать каждый раз, когда какой либо скрипт идет погулять в папку избранного.

Про двойные папки я другое имел в виду. Открывать папку избранного не в проводнике, а, например, в far или total commander - там Links отображается корректно, без подмены имени, там и создать папку на русском.
Попробовал ради интереса - сломается браузер или нет, но нет, браузер таки выжил и просто отобразил еще одну папку с таким же названием. Проводник тоже показывает две внешне одинаковых. Это же какие просторы для розыгрышей пользователей открываются, так можно наделать сотню папок с одинаковым названием...и с разными исходными именами - так куда ни зайдет кто-нибудь в проводнике, а там все единоименное.
Мда, а так ведь можно разделить пользователей на два лагеря - настоящие с файловыми менеджерами и фейковые с проводником.

35

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57 пишет:

А почему тогда на ярлыках такого нет?

Наверное, в этих случаях переменная получает какое-то значение.

ant_serg57 пишет:

давайте просто переименуем full в path1, а path в path2

Ну, я-то в вашем коде не могу ничего сам менять, вот бы и поменяли. Вообще в любом случае переменные, пересекающиеся с системными, лучше просто не использовать.

ant_serg57 пишет:

Про двойные папки я другое имел в виду

Да, действительно интересное наблюдение.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

36

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57 пишет:

Проводник тоже показывает две внешне одинаковых. Это же какие просторы для розыгрышей пользователей открываются, так можно наделать сотню папок с одинаковым названием...и с разными исходными именами - так куда ни зайдет кто-нибудь в проводнике, а там все единоименное.

Как-то заказчик поставил такую задачу.
Сделал через пробел нулевой ширины.

37 (изменено: ant_serg57, 2022-04-27 04:22:44)

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker пишет:
Наверное, в этих случаях переменная получает какое-то значение.

А каким образом то? Это вообще получается из разряда чудес, если скрипты начинают работать не по формальной логике. Тут уже начинает ум за разум заходить от таких фортелей.
Дайте проверим на простом скрипте :

f2::
  Acc :=Acc_ObjectFromPoint(pItem)
  name:=Acc.accName(pItem)
  role:=Acc.accRole(pItem)
  path:=""
  msgbox % path
return

Интересно даже, будет так же дифференцировать по типу элемента или нет?

teadrinker пишет:
Ну, я-то в вашем коде не могу ничего сам менять, вот бы и поменяли. Вообще в любом случае переменные, пересекающиеся с системными, лучше просто не использовать.

Хорошо, поменяю чтобы избежать коллизий в дальнейшем. Может изменить сразу в первом посте, чтобы решение сразу видно было?

38

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Читайте.
https://www.autohotkey.com/docs/commands/_NoEnv.htm

39

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Как можно поменять название темы на более корректную?

40

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Отредактируйте первое сообщение.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

41

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Если надо исправлять путь для Links, то перед чтением из файла ярлыка надо будет добавить строчку

item_path:=RegExReplace(item_path,"\\Панель избранного\\","\Links\")

42

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Идея понятна, но связана с языком системы. Для общего пользования пришлось бы добавить исключения для всех возможных языков.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

43

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57, считывайте ресурсы с ieframe.dll.

44

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Всё равно непонятно, как однозначно сопоставить название узла в TreeView и определённую папку, если возможны одинаковые названия:
 
 https://i.imgur.com/FVbVael.png

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

45

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Нашёл более простой путь: выделить элемент под курсором и послать Ctrl + C (или WM_COPY).
UPD. Не, так не копирует.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

46

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker пишет:

Всё равно непонятно, как однозначно сопоставить название узла в TreeView и определённую папку, если возможны одинаковые названия:

Стоит ли об этом заморачиваться?
На сколько такая ситуация реальна в реальной жизне?

47

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Не знаю, если делать только для себя — не надо, если для общего пользования — наверно надо.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

48

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Malcev, ну а толку то от этого, если 1) надо сканировать предварительно все папки в избранном 2) даже так это не дает 100% гарантии при повторяющихся названиях папок из-за этой локализации - кто знает какую из них браузер будет брать первой.
В любом случае, для решения этого лучше завести отдельную тему, так как это уже сопутствующая проблема.

teadrinker пишет:
Всё равно непонятно, как однозначно сопоставить название узла в TreeView и определённую папку, если возможны одинаковые названия:

У меня есть подозрение что никак, разве что смотреть содержимое и по нему это делать. В принципе реально, но такой геморрой...
Так то, чисто умозрительно, эту проблемку решить тоже надо, но скорее всего у нее будет более общее решение для всех таких случаев, а не только для избранного. Полагаю, когда это потребуется, уже кто нибудь другой будет курить эту тему.

49

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Да, кто нибудь, запостите пожалуйста решение еще вот сюда, там человек тоже просил помощи по этому вопросу.
https://www.autohotkey.com/board/topic/ … -treeview/
А то у меня конкретно в /board/ выдает ошибку логина, а если входить через /boards/, то ее там почему-то не находит.
https://www.autohotkey.com/boards/viewforum.php?f=76

50

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker пишет:

если для общего пользования — наверно надо.

Ты считаешь, что пользователь в здравом уме будет специально создавать папки с одинаковым названием?
ant_serg57, я никогда ни у кого не встречал папки с одинаковым названием, поэтому имхо достаточно узнать на что заменятся папка для данной локализации.

51

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Malcev пишет:

Ты считаешь, что пользователь в здравом уме будет специально создавать папки с одинаковым названием?

Случайно может.

Malcev пишет:

имхо достаточно узнать на что заменятся папка для данной локализации

Если одинаковых названий нет, тогда это ни к чему, т. к. в браузере и в папке названия отображаются одинаково.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

52

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Ты же писал:

teadrinker пишет:

У меня не все совпадают. Папка C:\Users\User\Favorites\Панель избранного на самом деле C:\Users\User\Favorites\Links.

53

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

ant_serg57 пишет:

разве что смотреть содержимое и по нему это делать

Тоже стопроцентной гарантии не даст. Например, в двух папках с одинаковым названием содержится по одному ярлыку с одинаковым названием, но с разными URL.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

54

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Malcev пишет:

Ты же писал

Ну да, это её реальный адрес, но отображается она и там, и там, как «Панель избранного».

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

55

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

И название, и адрес можно считать через Shell.Application.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

56

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Прямо в панели избранного - покажет и видимое имя и настоящее?

57

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Как это «прямо в панели избранного»? В скрипте прочитает видимое имя объекта в папке и его реальный адрес. То-есть, прочитает имя, как «Панель избранного» и адрес, как «C:\Users\UserName\Favorites\Links». Читать, конечно, нужно не из панели избранного, а из папки Favorites.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

58

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker пишет:

Читать, конечно, нужно не из панели избранного, а из папки Favorites.

Ну так это не поможет.
Если уж так необходимо учитывать наличие 2 одинаковых папок, то можно тут покопаться:
https://www.codeproject.com/Articles/22 … onstructed

59

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Кажется мне что мелкомягкие сами себя перемудрили.

60

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Malcev пишет:

Ну так это не поможет

Почему не поможет, мы же говорили о случае, когда предполагается, что двух одинаковых папок нет:

teadrinker пишет:

Если одинаковых названий нет, тогда это ни к чему

Malcev пишет:

можно тут покопаться

Может, но пока, поменяв вручную порядок в TreeView, в реестре вижу следующее:
 
 https://i.imgur.com/rMh0XSJ.png
 
Это первая запись, то-есть порядок не поменялся. Может, после перезагрузки сменится, пока не проверял.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

61

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Если 2 одинаковых папок нет, то зачем название и адрес считывать через Shell.Application?
Ты же писал, что:

teadrinker пишет:

в браузере и в папке названия отображаются одинаково

У меня если я стираю Order и меняю порядок в IE то Order создается вновь.
Следовательно реестр изменяется.

62

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Malcev пишет:

зачем название и адрес считывать через Shell.Application?

А как иначе узнать, что «Панель избранного» на самом деле называется «Links»?

Malcev пишет:

Следовательно реестр изменяется

Вроде нет, создаётся в том же порядке, что и было.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

63

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker пишет:

А как иначе узнать, что «Панель избранного» на самом деле называется «Links»?

Malcev пишет:

ant_serg57, считывайте ресурсы с ieframe.dll.

64

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

А разве не проще через Shell?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

65

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

teadrinker пишет:

создаётся в том же порядке, что и было

Там наверное надо ordernumber считывать.

4 Int32 ordernumber Number that determines the display order of this entry, or -5 when the entry is unordered

66

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Надо попробовать, но что такое unordered.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

67

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

А разве не проще через Shell?

Можно и через Shell, я просто от тебя понял, что это ни к чему.

68

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Нет, я имел в виду, что проще через Shell.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

69

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

unordered = DWORD 4 bytes sorted index (0-based), special value : -5 if never sorted (i.e. appended at tail)

http://www.arstdesign.com/articles/iefavorites.html

70

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Удалось прочитать:

key := "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Favorites"

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

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

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

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

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

      Return """" obj """"
   }
   sObj := %A_ThisFunc%(obj, true)
   Return JS.eval("JSON.stringify(" . sObj . ",'','" . indent . "')")
}

Ключи расположены в их порядке в панели избранного IE, ключ name — это реальное (а не видимое) имя папки/файла.
На семёрке правильно прочитались элементы верхнего уровня, о некоторых вложенных папках информации нет, а о тех, что есть, частично оказалась неверной. Заметил по крайней мере одно неправильное название папки, что не изменилось даже после перезагрузки.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

71

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Похоже где-то баг коде.
Так-как эта утилита показывает на win10 правильно, а твой код нет.
http://www.arstdesign.com/articles/favextract.zip

72

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

А что именно неправильно?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

73 (изменено: Malcev, 2022-04-29 20:54:32)

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Скажем так, что оба варианта показывают неполностью, но твой показывает меньше.
https://ibb.co/kDRYkPd

74

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

У меня SubKeys: "no info" показывает, когда нет соответствующего ключа в реестре:

   RegRead, value, % regKey, Order
   if (value = "")
      Return "no info"

Посмотри, есть они у тебя?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

75

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Есть у 2 ключей.
У Favorites и у 3.

76

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Надо понять, почему не читает. У меня в реестре они находятся в ключах, название которых соответствует их реальному имени, т. е. информация о Favorites Bar1 должна находиться в ключе с названием Links. Если у тебя это не так, тогда нет единого принципа.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

77

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Ну он вообще странно читает.
Если я ссылку переименовал, то скрипт продолжает ее показывать под старым именем.

78

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Скрипт тут не при чём, что в ключе написано, то он и читает. У меня такая же проблема.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

79

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Потестировал, как обычно IE - один большой баг.
И автоматизировать его, когда существуют нормальные браузеры - удовольствие еще то....
Я стер все букмарки из ие, создал 3 новых букмарка "3" "2" и "1" соответственно.
Переименовывал "2" в "0", вышел из ие, зашел обратно и вижу "3"->"1"->"0".
То есть после переименования ссылки, сортировка данной ссылки сбрасывается.

80

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Да, баги явно есть. Ну мне было в данном случае просто интересно правильно ключ прочитать, скорее всего скрипт читает правильно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

81

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Предполагаю, правильный алгоритм может быть такой - считываем папку favorites и сортируем только те файлы и папки, которые прописаны в реестре.
Остальные просто по имени кидаем в конец.

82

Re: AHK: Получение полного пути для папки/ярлыка в панели избранного IE

Наверно. Ну ладно, мы сделали, что могли.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder