Уважаемый Flasher , огромное спасибо вам . С "vbs" у меня как то не срослось , но всё же я додумал ваш вариант с "AHK". Примитивно конечно , но подходит как раз для контекстного меню.
ShAp := ComObjCreate("Shell.Application")
Dest := ShAp.NameSpace("G:\Down")
WinGetClass, this_class, A
If this_class in WorkerW,Progman
Dest.MoveHere(DesktopGetSelectedItems(), 13302)
Else {
WinGet, hwnd,, A
For Window in ShAp.Windows {
If Window.hwnd = hwnd {
For Item in Window.Document.SelectedItems
Dest.MoveHere(Item, 13302)
Break
}
}
}
WinWaitClose, ahk_class #32768
DesktopGetSelectedItems()
{ Desktop := ComObjCreate("{9BA05972-F6A8-11CF-A442-00A0C90A8F39}").Item(ComObj(19, 8))
if ptlb := ComObjQuery(Desktop, "{4C96BE40-915C-11CF-99D3-00AA004AE837}"
, "{000214E2-0000-0000-C000-000000000046}")
{ if DllCall(NumGet(NumGet(ptlb+0)+15*A_PtrSize), "ptr", ptlb, "ptr*", psv:=0) = 0
{ VarSetCapacity(IID_IDispatch, 16)
NumPut(0x46000000000000C0, NumPut(0x20400, IID_IDispatch, "int64"), "int64")
DllCall(NumGet(NumGet(psv+0)+15*A_PtrSize), "ptr", psv
, "uint", 0, "ptr", &IID_IDispatch, "ptr*", pdisp:=0)
Items := ComObjEnwrap(pdisp).SelectedItems()
ObjRelease(psv)
}
ObjRelease(ptlb)
}
Return Items
}
Всем кто принимал участие в обсуждении огромное спасибо.
Модератор: мелкие правки в коде взамен перепубликации.
OS: Win11x64, AutoHotkey v1.1.25.01 (Unicode 64-bit).