Тема: AHK: Как извлечь имя файла под курсором в буфер обмена
Как извлечь имя файла под курсором в тотал командере или эксплорере ? Насколько я понял команды FileGet... не работают с именем файла.
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как извлечь имя файла под курсором в тотал командере или эксплорере ? Насколько я понял команды FileGet... не работают с именем файла.
loop
{
Acc:=Acc_ObjectFromPoint(c),name:=""
if (Acc.AccRole(c) = 34)
name := Acc.AccName(c)
else if (Acc.accParent.AccRole(0) = 34)
name := Acc.accParent.AccName(0)
tooltip % (name? "Курсор на:`n" : "") name
sleep 50
}
Acc_ObjectFromPoint(ByRef _idChild_ = "", x = "", y = "")
{
Static h
% (!h) and (h:=DllCall("LoadLibrary","Str","oleacc","Ptr"))
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")
}
Вот исправил.
Работает на Acc но его библиотеку скачивать не надо уже вшита в скрипт нужная функция.
Решил поизучать Acc. Взял библиотеку по ссылке. Источник.
Вот что получилось:
#include,%a_scriptdir%\Acc.ahk
#SingleInstance,Force
loop
{
sleep,50
acc:=Acc_ObjectFromPoint(ChildId)
role:=Acc_Role(Acc,ChildId)
rol:=Acc.AccRole(ChildId)
name:=Acc.accValue(ChildId)
if (!name or (name-name)="0")
name:=Acc.AccName(ChildId)
stringleft,name,name,128
tooltip,% rol "`n`n" role "`n`n" name
}
return
Библиотеку положить рядом со скриптом.
yalanne
А можно подправить код. ПКМ по файлу выскакивает окно с ошибкой.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться