Тема: AHK: MS Word AutoSaver
Доброго времени суток. При работе с большими файлами в Word 2013 у меня часто перестает работать встроенная в него функция автоматического сохранения. В итоге Word через какое-то время зависает и закрывается. После чего оказывается, что последнее автоматическое сохранение произведено программой пару часов назад, а не каждые пять минут, как задано в настройках. Из-за этого часть набранного текста не сохранялась. Искал готовое решение в виде скрипта, который бы после запуска выполнял сохранение либо всех открытых в Word файлов, либо одного, заданного файла, с указанным интервалом (по типу эмуляции ctrl+s с задаваемыми интервалами), чтобы отказаться от встроенного автоматического сохранения (подозреваю что из-за него и падает Word). Наткнулся на что-то подобное: MS Word+Excel AutoSaver. Прошу помочь с ним разобраться, у меня этот скрипт по какой-то неведомой причине не работает. Либо предложить какие-то другие варианты решения этой серьезной проблемы. Ниже привожу код, представленный на указанной по ссылке странице англоязычного форума.
#Persistent
#NoEnv
SetTitleMatchMode,2
CoordMode, mouse, Screen
OnExit, writefile
appname := "Document saver"
Menu, Tray, Icon, Shell32.dll, 21
Menu, Tray, NoStandard
Menu, Tray, Add, %appname%,mnuAbout
Menu, Tray, Add
Menu, Tray, Add, Settings,mnusettings
Menu, Tray, Add, exit, mnuexit
menu, tray, default, %appname%
menu,tray, tip, %appname%
Gui, Add, Text, x5 y10 w h20 , Enter the caption of the window to save or click Find
Gui, Add, Edit, vedit1 x5 y35 w215 h20 Gtxtchange,
Gui, Add, Button, vbuttonGet x+5 y w40 h20 Ggettitle, Find
Gui, Add, Button, vbuttonAdd x5 y+10 w50 h20 gAdd default, Add
Gui, Add, Button, vbuttonDel x+5 y w50 h20 gDelet, Delete
Gui, Add, Button, vbuttonminimize x+5 y w50 h20 gminimize, Minimize
Gui, Add, Button, vbuttonAbout x+5 y w50 h20 Gmnuabout, About
Gui, Add, Button, vbuttonExit x+5 y w40 h20 Gmnuexit, Exit
Gui, Add, ListBox, Vlistbox1 x5 y w260 h150 glistboxClick,
gosub readfile
Gui, Show, , %appname%
Control, disable , , button2, %appname%
Control, disable , , button3, %appname%
Hotkey, ^c, off
SetTimer, timeBegin, 180000
filechanged = false
Return
readfile:
Loop, Read, %A_ScriptDir%\autosave.ini
{
;msgbox %A_loopreadline%
ArrayCount += 1 ; Keep track of how many items are in the array.
GuiControl,, ListBox1, %A_loopreadline%
filearray%arraycount% = %A_loopreadline%
}
return
txtchange:
Control, enable , , button2, %appname%
return
writefile:
if filechanged = true
{
fileDelete %A_ScriptDir%\autosave.ini
ControlGet, outputList, List,, ListBox1,%appname%
FileAppend , %outputlist%, %A_ScriptDir%\autosave.ini
}
ExitApp
gettitle:
Hotkey, ^c, On
SetTimer, WatchCursor, 200
return
WatchCursor:
MouseGetPos, , , id, control
WinGetTitle, title, ahk_id %id%
WinGetClass, class, ahk_id %id%
;ToolTip, ahk_id %id%`nahk_class %class%`n%title%`nControl: %control%
tooltip, Caption = %title%`npress CONTROL + C to copy window caption
return
^c::
SetTimer, WatchCursor, off
tooltip
;sleep 1000
clipboard =
clipboard = %title%
tooltip, window caption saved to clipboard`npress CONTROL + V to paste
Hotkey, ^c, Off ; disable hotkey
ControlSetText, edit1, %title%, %appname%
winactivate, %appname%
sleep 3000
tooltip
return
add:
gui,submit, nohide
GuiControl,, ListBox1, %edit1%
ArrayCount += 1 ; Keep track of how many items are in the array.
filearray%arraycount% = %edit1%
filechanged = true
Control, disable , , button2, %appname%
return
ListBoxclick:
Control, enable , , button3
return
GuiClose:
mnuExit:
ExitApp
mnuAbout:
msgbox ,0,%appname%,
(
Saves documents
when the PC es iddle`n
Created by Salome Cruz
salocruz@yahoo.com
)
return
#s::
sleep 40000 ; presing win + S will save all documents chosen
gosub programstosave
return
timeBegin:
MouseGetPos, xpos, ypos
if A_TimeIdle > 180000 ; if PC is inactive more than 3 minutes save documents
{
; ToolTip, inactividad
tooltip
gosub programstosave
SetTimer, timeBegin, off ; after saving documents rest 15 minutes before saving again
sleep 900000 ; I don´t want to save them every 3 minutes
SetTimer, timeBegin, on
}
else
{
; ToolTip, hay actividad
sleep 1000
tooltip
}
return
programstosave:
loop, %arraycount%
{
IfWinExist,% filearray%A_Index%
{
gosub save
Sleep 40000
}
;msgbox % filearray%A_Index%
}
return
save:
if A_TimeIdle > 10000 ; if there is no activity in 10 seconds keep saving
{
WinActivate
ToolTip, guardando archivo
Sleep 3000
tooltip
Send ^s ; control + S p/programs in inglish
; Send ^g ; control + G p/programas en español
;FileAppend , guardado %A_hour%:%A_Min%, %scriptdir%\log.txt
}
return
guiescape:
Minimize:
gui , hide
return
mnusettings:
gui, show
return
delet: ; **** this sub delets a selected item from a listbox or dropdownbox **
ControlGet, selected, choice,, listbox1, ; 1 get the selected item
if selected =
return
ControlGet, outputList, List,, listbox1, ; 2 make a list of all its items
GuiControl,, Listbox1, | ; 3 third clear the listbox
Loop, Parse, outputList, `n ; 4 four parse the outputlist
{ ; 5 add to the listbox every field
if (selected <> A_LoopField) ; in the outputlist exept the selected
GuiControl,, ListBox1, %A_LoopField%
}
filechanged = true
Reload
return