Что нового

Закрытие открытого файла по значению в текстовом файле

cerber412

Новичок
Сообщения
42
Репутация
0
Добрый день, друзья.
Помогите с решением непростой проблемы.

Имеется скрипт, запускающий по хронометражу различные файлы, по их адресам.
Хронометраж и адреса файлов указаны в текстовом файле 1.txt
Код:
#include <Timers.au3>
Opt("TrayAutoPause", 0)
OnAutoItExitRegister("_OnExit")

Global $sTimingsPath = @ScriptDir & "\1.txt", $aTimings, $aOut, $iWait, $iTimer, $hScriptWnd
$aTimings = FileReadToArray($sTimingsPath)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка записи в текстовый файл.")
AutoItWinSetTitle(@ScriptFullPath)
$hScriptWnd = WinGetHandle(@ScriptFullPath)

$aOut = StringRegExp($aTimings[0], "([0-9]{2}):([0-9]{2}):([0-9]{2})", 1)
If @error Then Exit MsgBox(16, "Ошибка", "Не удалось получить общее время работы.")
$iTimer = _Timer_SetTimer($hScriptWnd, $aOut[0] * 3600000 + $aOut[1] * 60000 + $aOut[2] * 1000, "_TimerExit")
$hTimer = TimerInit()

For $i = 1 To UBound($aTimings) - 1
    $aOut = StringRegExp($aTimings[$i], "([0-9]{2}):([0-9]{2}):([0-9]{2}) (.+)", 1)
    If Not @error Then
        $iWait = $aOut[0] * 3600000 + $aOut[1] * 60000 + $aOut[2] * 1000
        Do
            Sleep(10)
        Until TimerDiff($hTimer) >= $iWait
        ShellExecute($aOut[3])
    EndIf
Next

While 1
    Sleep(10)
WEnd

Func _TimerExit($hWnd, $uMsg, $IDTimer, $dwTime)
    Exit
EndFunc   ;==>_TimerExit

Func _OnExit()
    _Timer_KillTimer($hScriptWnd, $iTimer)
EndFunc   ;==>_OnExit
Но этот скрипт работает только на открытие файлов.
Как при помощи этого скрипта - закрывать определенные файлы - в определенный момент времени - если после названия файла в 1.txt стоит буква "з" ?
 

Вложения

  • 1.rar
    838 байт · Просмотры: 2

gunter123

Продвинутый
Сообщения
159
Репутация
69
Вместо "з" в конце ставьте "/" в начале пути к файлу
Код:
00:00:12
00:00:02 C:\Users\User\Desktop\1.txt
00:00:04 /C:\Users\User\Desktop\1.txt
00:00:07 C:\Users\User\Desktop\2.xlsx
00:00:10 /C:\Users\User\Desktop\2.xlsx
Код:
#include <Array.au3>
#include <Timers.au3>
Opt("TrayAutoPause", 0)
OnAutoItExitRegister("_OnExit")

Global $sTimingsPath = @ScriptDir & "\1.txt", $aTimings, $aOut, $iWait, $iTimer, $hScriptWnd
$aTimings = FileReadToArray($sTimingsPath)
If @error Then Exit MsgBox(16, "Ошибка", "Ошибка записи в текстовый файл.")
AutoItWinSetTitle(@ScriptFullPath)
$hScriptWnd = WinGetHandle(@ScriptFullPath)

$aOut = StringRegExp($aTimings[0], "([0-9]{2}):([0-9]{2}):([0-9]{2})", 1)
If @error Then Exit MsgBox(16, "Ошибка", "Не удалось получить общее время работы.")
$iTimer = _Timer_SetTimer($hScriptWnd, $aOut[0] * 3600000 + $aOut[1] * 60000 + $aOut[2] * 1000, "_TimerExit")
$hTimer = TimerInit()

Dim $aOpen[0]

For $i = 1 To UBound($aTimings) - 1
    $aOut = StringRegExp($aTimings[$i], "([0-9]{2}):([0-9]{2}):([0-9]{2}) (.+)", 1)
    If IsArray($aOut) Then
      $iWait = $aOut[0] * 3600000 + $aOut[1] * 60000 + $aOut[2] * 1000
      Do
            Sleep(10)
	  Until TimerDiff($hTimer) >= $iWait
	  If StringLeft($aOut[3], 1) <> "/" Then
		 If FileExists($aOut[3]) Then
			_ArrayAdd($aOpen, ShellExecute($aOut[3]) & "@@@" & $aOut[3])
		 Else
			ConsoleWrite("Файл не существует: " & $aOut[3] & @CRLF)
		 EndIf
	  Else
		 For $j = 0 To UBound($aOpen) - 1
			If StringTrimLeft($aOut[3], 1) = StringSplit($aOpen[$j], "@@@", 1+2)[1] Then
			   ProcessClose(StringSplit($aOpen[$j], "@@@", 1+2)[0])
			EndIf
		 Next
	  EndIf
   EndIf

Next

While 1
    Sleep(10)
WEnd

Func _TimerExit($hWnd, $uMsg, $IDTimer, $dwTime)
    Exit
EndFunc   ;==>_TimerExit

Func _OnExit()
    _Timer_KillTimer($hScriptWnd, $iTimer)
EndFunc   ;==>_OnExit
 
Автор
C

cerber412

Новичок
Сообщения
42
Репутация
0
gunter123, все работает.
Что я могу сказать...
Вы реально великий программист.
 
Верх