Версия AutoIt: 3.3.14.2
Описание:
- имеется открытое и активное окно блокнота (notepad2), в котором перед запуском скрипта всегда открыт 1 несохранённый текстовый файл с названием 1 и расширением cue
- но путь всегда разный, так как файлы будут всегда разными и находиться будут всегда в разных каталогах
- окно блокнота остаётся активным всё время (во время работы скрипта я никаких окон трогать не буду)
возможен ли скрипт, после запуска которого автоматически выполнялись бы разные действия?
видимо, с какой-то очень мелкой задержкой между действиями, чтобы все корректно выполнялись. действия нужны именно в таком порядке:
1) нажатие ctrl + v
2) замена текста
CDImage.wav
на
1.flac
заменяемый фрагмент всегда имеется только в единственном экземпляре (в первой строке)
3) после каждого такого текстового фрагмента:
AUDIO
вставка такой новой строки (в её начале 4 пробела):
5 символов AUDIO:
- всегда расположены в конце строк
- могут быть в разных количествах (от двух и более)
4) однократный запуск вот этого стороннего готового скрипта (суть его в перемещении строк нужным образом):
5) нажатие ctrl + s
6) нажатие alt + f4
Примечания:
- перед запуском скрипта курсор расположен в самом начале файла
- окно блокнота принадлежит файлу notepad.exe
- window class: Notepad2
- window caption: всегда разный. в конце всегда такие символы:
1.cue - Notepad2
- кодировка: utf-8 (не должна меняться)
- match case: во всех случаях должен учитываться
- не знаю, возможно ли это, но хотелось бы обойтись без множественных сохранений и переоткрываний текстового файла во время работы скрипта
размещённый ниже код - это единственное, что я более-менее по теме сумел найти и при этом получить что-то работающее
с оговоркой, что это только мелкий кусочек от нужного результата, да и то не особо помогающий:
Описание:
- имеется открытое и активное окно блокнота (notepad2), в котором перед запуском скрипта всегда открыт 1 несохранённый текстовый файл с названием 1 и расширением cue
- но путь всегда разный, так как файлы будут всегда разными и находиться будут всегда в разных каталогах
- окно блокнота остаётся активным всё время (во время работы скрипта я никаких окон трогать не буду)
возможен ли скрипт, после запуска которого автоматически выполнялись бы разные действия?
видимо, с какой-то очень мелкой задержкой между действиями, чтобы все корректно выполнялись. действия нужны именно в таком порядке:
1) нажатие ctrl + v
2) замена текста
CDImage.wav
на
1.flac
заменяемый фрагмент всегда имеется только в единственном экземпляре (в первой строке)
3) после каждого такого текстового фрагмента:
AUDIO
вставка такой новой строки (в её начале 4 пробела):
Код:
TITLE ""
- всегда расположены в конце строк
- могут быть в разных количествах (от двух и более)
4) однократный запуск вот этого стороннего готового скрипта (суть его в перемещении строк нужным образом):
Код:
#include <Array.au3>
#include <WinAPISys.au3>
Global $hWnd, $sData, $Window = '[REGEXPCLASS:(?i).*?Pad.*?]'
$hWnd = WinActive($Window)
If Not $hWnd Then Exit
_FixAccelHotKeyLayout()
$sData = ClipGet()
_Send('c')
Local $TSong, $Size, $sTextMod, $sText = ClipGet()
If $sText Then
$Pos = StringInStr($sText, 'INDEX', 2, -1)
$TSong = StringRegExp($sText, '.*\V', 3, $Pos)
$Size = UBound($TSong)
Select
Case $Size > 1 And Not @error
$sTextMod = StringRegExp($sText, '((.*\R\h+?)+' &$TSong[0]&')', 1)
If IsArray($sTextMod) Then $sText = $sTextMod[0]
For $i = 1 To $Size - 1
$sText = StringReplace($sText, 'TITLE ""', 'TITLE "' & $TSong[$i] & '"', 1)
Next
ClipPut($sText)
If BitAND(WinGetState($hWnd), 16) Then ContinueCase
_Send('v{HOME}')
ContinueCase
Case Else
ClipPut($sData)
Exit
EndSelect
EndIf
Func _FixAccelHotKeyLayout()
Static $iKbrdLayout, $aKbrdLayouts
If Execute('@exitMethod') <> '' Then
Local $iUnLoad = 1
For $i = 1 To $aKbrdLayouts[0]
If Hex($iKbrdLayout) = Hex('0x' & StringRight($aKbrdLayouts[$i], 4)) Then
$iUnLoad = 0
ExitLoop
EndIf
Next
If $iUnLoad Then
_WinAPI_UnloadKeyboardLayout($iKbrdLayout)
EndIf
Return
EndIf
$iKbrdLayout = 0x0409
$aKbrdLayouts = _WinAPI_GetKeyboardLayoutList()
_WinAPI_LoadKeyboardLayout($iKbrdLayout, $KLF_ACTIVATE)
OnAutoItExitRegister('_FixAccelHotKeyLayout')
EndFunc
Func _Send($Letter)
SendKeepActive($hWnd)
Send('{CTRLDOWN}a' &$Letter& '{CTRLUP}')
SendKeepActive('')
EndFunc
5) нажатие ctrl + s
6) нажатие alt + f4
Примечания:
- перед запуском скрипта курсор расположен в самом начале файла
- окно блокнота принадлежит файлу notepad.exe
- window class: Notepad2
- window caption: всегда разный. в конце всегда такие символы:
1.cue - Notepad2
- кодировка: utf-8 (не должна меняться)
- match case: во всех случаях должен учитываться
- не знаю, возможно ли это, но хотелось бы обойтись без множественных сохранений и переоткрываний текстового файла во время работы скрипта
размещённый ниже код - это единственное, что я более-менее по теме сумел найти и при этом получить что-то работающее
с оговоркой, что это только мелкий кусочек от нужного результата, да и то не особо помогающий:
Код:
#Include <File.au3>
If (_ReplaceStringInFile("C:\test.cue", "example-1", "example-2") = 0) Then
ConsoleWriteError("cannot find [example-1] in [test.cue]" & @CRLF)
EndIf