by sofista » 09 Jan 2024, 15:29
Hola: Qué raro, lo probé con tres carpetas y me funcionó sin problemas. Supongo, entonces, que ha de ser o bien un problema de interferencia o bien de
timing, quizás el disco está lento.
Un reinicio del equipo no vendría mal. Luego, asegurarse de que no haya ningún otro script en ejecución. Si haciendo así, sigue sin funcionar, habría que alargar y/o intercalar
Sleeps en la función
restaurarIcono(), fundamentalmente justo antes de
Send, {Enter}. Es cuestión de experimentar un poco hasta encontrar la solución. Cada equipo es un mundo aparte.
Por otra parte, podrías verificar que se lean correctamente todas las carpetas contenidas en la carpeta seleccionada, con el siguiente código:
Code: Select all
^m::
myFolder := Explorer_GetSelection() "\"
if !InStr(FileExist(myFolder),"D") { ; ¿Es una carpeta?
MsgBox, % "Por favor, selecciona una carpeta." ; Si no lo es,
return ; termina el script.
}
Output := ""
Loop, Files, %myFolder%*.*, DR
{
Output .= A_LoopFileFullPath "`n"
}
MsgBox, % Output ; muestra la ruta de todas las carpetas contenidas en la carpeta seleccionada.
return
Explorer_GetSelection() { ; teadrinker https://www.autohotkey.com/boards/viewtopic.php?t=60403
WinGetClass, winClass, % "ahk_id" . hWnd := WinExist("A")
if !(winClass ~="Progman|WorkerW|(Cabinet|Explore)WClass")
Return
shellWindows := ComObjCreate("Shell.Application").Windows
if (winClass ~= "Progman|WorkerW")
shellFolderView := shellWindows.FindWindowSW(0, 0, SWC_DESKTOP := 8, 0, SWFO_NEEDDISPATCH := 1).Document
else {
for window in shellWindows
if (hWnd = window.HWND) && (shellFolderView := window.Document)
break
}
for item in shellFolderView.SelectedItems
result .= (result = "" ? "" : "`n") . item.Path
if !result
result := shellFolderView.Folder.Self.Path
Return result
}
Hola: Qué raro, lo probé con tres carpetas y me funcionó sin problemas. Supongo, entonces, que ha de ser o bien un problema de interferencia o bien de [i]timing[/i], quizás el disco está lento.
Un reinicio del equipo no vendría mal. Luego, asegurarse de que no haya ningún otro script en ejecución. Si haciendo así, sigue sin funcionar, habría que alargar y/o intercalar [c]Sleeps[/c] en la función [c]restaurarIcono()[/c], fundamentalmente justo antes de [c]Send, {Enter}[/c]. Es cuestión de experimentar un poco hasta encontrar la solución. Cada equipo es un mundo aparte.
Por otra parte, podrías verificar que se lean correctamente todas las carpetas contenidas en la carpeta seleccionada, con el siguiente código:
[code]
^m::
myFolder := Explorer_GetSelection() "\"
if !InStr(FileExist(myFolder),"D") { ; ¿Es una carpeta?
MsgBox, % "Por favor, selecciona una carpeta." ; Si no lo es,
return ; termina el script.
}
Output := ""
Loop, Files, %myFolder%*.*, DR
{
Output .= A_LoopFileFullPath "`n"
}
MsgBox, % Output ; muestra la ruta de todas las carpetas contenidas en la carpeta seleccionada.
return
Explorer_GetSelection() { ; teadrinker https://www.autohotkey.com/boards/viewtopic.php?t=60403
WinGetClass, winClass, % "ahk_id" . hWnd := WinExist("A")
if !(winClass ~="Progman|WorkerW|(Cabinet|Explore)WClass")
Return
shellWindows := ComObjCreate("Shell.Application").Windows
if (winClass ~= "Progman|WorkerW")
shellFolderView := shellWindows.FindWindowSW(0, 0, SWC_DESKTOP := 8, 0, SWFO_NEEDDISPATCH := 1).Document
else {
for window in shellWindows
if (hWnd = window.HWND) && (shellFolderView := window.Document)
break
}
for item in shellFolderView.SelectedItems
result .= (result = "" ? "" : "`n") . item.Path
if !result
result := shellFolderView.Folder.Self.Path
Return result
}
[/code]