1 (изменено: becauseim, 2016-01-27 17:42:45)

Тема: AHK: Открытие последнего измененного файла

Следующий сценарий убивает заданный процесс, после чего открывает последний измененный файл с заданным расширением из заданной директории:

#f4::
#Persistent
Process, Close, notepad.exe	
MostRecentTime:=
Loop, D:\*.txt
	{
		FileGetTime, ThisFileTime
		if (MostRecentTime < ThisFileTime)
		{
			MostRecentTime := ThisFileTime
			FilePath:=A_LoopFileFullPath
		}
	}
Run, %FilePath%
return

Помогите, пожалуйста, добавить к сравнению еще одну директорию, или две. Т.е. проверить последний измененный файл из нескольких директорий. А также установить принудительное закрытие неотвечающего окна вместо закрытия процесса, т.е. окна с содержанием в заголовке словосочетания Not Responding.

2

Re: AHK: Открытие последнего измененного файла

#Persistent

list=
(
d:\test1\*.txt
d:\test2\*.txt
)

#f4::
;Process, Close, notepad.exe
MostRecentTime:=
loop,parse,list,`n
  Loop,% a_loopfield
  {
  	FileGetTime, ThisFileTime
  	if (MostRecentTime < ThisFileTime)
  	{
  		MostRecentTime := ThisFileTime
  		FilePath:=A_LoopFileFullPath
  	}
  }
tooltip,% FilePath
;Run, %FilePath%
return

На счет "Not Responding" непонятно, почему окно зависает? Оно зависает при попытке закрыть его или просто так не из-за чего?

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

3 (изменено: becauseim, 2016-01-28 15:08:18)

Re: AHK: Открытие последнего измененного файла

Alectric, спасибо! Зависает до того, как я вызываю работу скрипта. Полагаю, закрыть окно следует командой WinClose, однако не знаю, как проверить наличие словосочетания в конце заголовка окна.

upd: Насколько понимаю, решается установкой SetTitleMatchMode 2. Ранее казалось, что не работало.

4 (изменено: becauseim, 2016-04-04 19:40:07)

Re: AHK: Открытие последнего измененного файла

Alectric, ранее не обращал пристального внимания, но, кажется, Ваш сценарий не работает должным образом, т.е. открывается вовсе не последний измененный файл.

Пример того, как предполагается работа скрипта по открытию последнего созданного или измененного файла:

Файл D:\test1\file100.txt изменен в 00:01,
файл D:\test2\file200.txt создан в 07:00,
файл D:\test1\file300.txt изменен в 07:05.

Сценарий должен открыть файл D:\test1\file300.txt

5

Re: AHK: Открытие последнего измененного файла

becauseim, не понятен ваш ход мыслей. В вышеприведённом примере последний созданный или изменённый файл как раз D:\test1\file300.txt, а не D:\test1\file100.txt, ведь 07:05 наступает после 00:01, если речь идёт об одних сутках.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Открытие последнего измененного файла

teadrinker, да, действительно, запутался. Поправил.

7

Re: AHK: Открытие последнего измененного файла

Если же я ошибаюсь, может ли кто-то проверить у себя работоспособность сценария от Alectric?
Т.к. при тестировании его работа отвечала задумке, но на реальной практике, к сожалению, дала сбой.
Действительно ли при сравнивании даты сценарий учитывает все перечисленные пути расположения файлов заданного расширения?

8

Re: AHK: Открытие последнего измененного файла

Так сам и проверь.
Вставь в цикл перед FileGetTime, ThisFileTime

msgbox % A_LoopFileLongPath

9

Re: AHK: Открытие последнего измененного файла

Malcev, проверил, убедился, что скрипт работает некорректно. Исходный вариант сценария с одним заданным путем работает, насколько я помню, исправно. В таком случае, прошу помощи в реализации добавления к сравнению еще нескольких директорий. Также отмечу, что так и не получилось добавить действие по закрытию неотвечающих окон перед открытием последнего измененного/созданного файла. Так у меня не сработало:


SetTitleMatchMode 2
WinClose Not Responding ahk_exe program.exe

Исходный вариант сценария с единственным заданным путем:

#f4::
#Persistent
MostRecentTime:=
Loop, D:\*.txt
	{
		FileGetTime, ThisFileTime
		if (MostRecentTime < ThisFileTime)
		{
			MostRecentTime := ThisFileTime
			FilePath:=A_LoopFileFullPath
		}
	}
Run, %FilePath%
return

10

Re: AHK: Открытие последнего измененного файла

У меня код из 2 поста работает исправно.

Также отмечу, что так и не получилось добавить действие по закрытию неотвечающих окон перед открытием последнего измененного/созданного файла.

Надо смотреть какой у них Title во время возникновения ошибки.

11

Re: AHK: Открытие последнего измененного файла

Зависшее окно закрыть таким способом нельзя, на то оно и зависшее.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12

Re: AHK: Открытие последнего измененного файла

Тогда можно попробовать WinKill.
Либо убивать процесс:

WinGet, Pid, Pid, WinTitle
Process, Close, % Pid

13 (изменено: becauseim, 2016-04-05 16:45:51)

Re: AHK: Открытие последнего измененного файла

Malcev, А если не отвечает одно окно запущенного приложения, а другое его окно работает нормально? Или под процессом подразумевается отдельное окно?

На всякий случай, отмечу, что программа Vegas Pro может работать в многооконном режиме.

*сейчас скопировал сценарий из второго поста в отдельный файл, работает, как следует. Видимо я что-то перемудрил с редактированием. Например, лист с перечислением путей у меня стоял после указания горячей клавиши.

14

Re: AHK: Открытие последнего измененного файла

Объясните, пожалуйста, для чего в данном сценарии используется директива #Persistent? Описание прочел, но будет понятнее, если подскажете, что именно не будет работать в данном скрипте без указания данной директивы.

15

Re: AHK: Открытие последнего измененного файла

Здесь она без надобности. Так как есть хотки.
Под процессом подразумевается процесс к которому данное окно принадлежит.
Если вегас не может быть запущенным в нескольких экземплярах, то можно сделать так:

Process, Close, vegas.exe

16

Re: AHK: Открытие последнего измененного файла

Malcev, Так понимаю, директиву #Persistent логичнее использовать, например, перед циклами.

Если вегас не может быть запущенным в нескольких экземплярах..

Может, я это отметил.

17

Re: AHK: Открытие последнего измененного файла

Нет.
http://www.script-coding.com/AutoHotkey/Persistent.html