Тема: 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, потому что вид курсора на странице может быть переопределен, а вот сам статус элемента всегда остается неизменным.