Вот, что в итоге получилось
SetTitleMatchMode, 2
SendMode, input
GroupAdd, RenameGroup
GroupAdd, RenameGroup, Program Manager ahk_class Progman
GroupAdd, RenameGroup, ahk_class CabinetWClass
#IfWinActive ahk_group RenameGroup
$F2::
Islnk:=0
Clipboard =
Send ^{vk43}
ClipWait
IsDir := InStr(FileExist(Clipboard), "D") ? 1 : 0
If (not IsDir) and (RegExReplace(Clipboard, ".*\.(.*)", "$1")="lnk")
Islnk:=1
If (IsDir or IsLnk)
{
send {F2}
return
}
i := k := 0
ControlGetFocus, Control, A
if InStr(Control, "Edit")
ControlGetText, FileName, %Control%, A
else
{
WinGet, ControlList, ControlList, A
Loop, parse, ControlList, `n
if InStr(A_LoopField, "Edit")
i++
Send {F2}
While k - i != 1
{
Sleep, 15
k := 0
WinGet, ControlList, ControlList, A
Loop, parse, ControlList, `n
if InStr(A_LoopField, "Edit")
k++
}
Control = Edit%k%
ControlGetText, FileName, %Control%, A
}
FileNameNoExt := RegExReplace(FileName, "(.*)\..*", "$1")
NameLengh := StrLen(FileNameNoExt)
SendMessage, EM_SETSEL := 0xB1, 0, NameLengh, %Control%, A
Return