A
Alofa
Гость
А какие данные при этом были в буфере и какие в окне блокнота на момент запуска скрипта?Alexey сказал(а):... хоть итог и некорректен...
А какие данные при этом были в буфере и какие в окне блокнота на момент запуска скрипта?Alexey сказал(а):... хоть итог и некорректен...
FILE "CDImage.wav" WAVE
TRACK 01 AUDIO
INDEX 01 00:00:00
TRACK 02 AUDIO
INDEX 01 03:54:00
TRACK 03 AUDIO
INDEX 01 07:30:02
Title 01
Title 02
Title 03
Это Ссылка на Яндекс диск. Вот в дополнении Ссылка на mail облако.Alexey сказал(а):не могу открыть: Server not found...
#include <WinAPIProc.au3>
#include <WinAPISys.au3>
Local $hWnd, $ahWnd, $hControl, $hToolbar, $aText[2], $aTitles, $sClip
Local $sFlacFile = '1.flac', $aProcessList = ProcessList('Notepad.exe')
Local $iPID = $aProcessList[$aProcessList[0][0]][1]
If Not $iPID Then Exit MsgBox(262144 + 16, Default, 1)
$ahWnd = _WinAPI_EnumProcessWindows($iPID) ; Вычисляем окно последнего запущенного процесса
If @error Then Exit MsgBox(262144 + 16, Default, 2)
$hWnd = WinActivate($ahWnd[$ahWnd[0][0]][0])
If (Not $hWnd) Then Exit MsgBox(262144 + 16, Default, 3)
_FixAccelHotKeyLayout()
$sClip = ClipGet()
$aText[0] = StringStripWS($sClip, 3) ; Пункт 1) - Берем текст из буфера на прямую, без вставки в поле блокнота
_WunSend('{CTRLDOWN}ax{CTRLUP}', $hWnd)
$aText[1] = ClipGet()
If (Not $aText[0]) Or (Not $aText[1]) Then Exit MsgBox(262144 + 16, Default, 4)
$aText[0] = StringRegExpReplace($aText[0], '(?i)(FILE\h*")[^"]+("\h*WAVE)', '${1}' & $sFlacFile & '$2') ; Пункт 2) замена текста CDImage.wav на 1.flac
$aTitles = StringRegExp($aText[1], '[\R\s]*(.+)', 3)
If @error Then Exit MsgBox(262144 + 16, Default, 'Ошибка №5' & @CRLF & '$aText[1]:' & @CRLF & '[' & $aText[1] & ']')
For $i = 0 To UBound($aTitles) - 1 ; Пункт 3) и 4)
$aText[0] = StringRegExpReplace($aText[0], '(?i)(AUDIO)(\s+INDEX)', '$1' & @CRLF & ' TITLE "' & $aTitles[$i] & '"$2', 1)
Next
ClipPut($aText[0])
_WunSend('{CTRLDOWN}vs{CTRLUP}', $hWnd)
WinKill($hWnd) ; Закрыть окно
ClipPut($sClip)
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 ;==>_FixAccelHotKeyLayout
Func _WunSend($sLetter, $hWnd)
SendKeepActive($hWnd)
Send($sLetter)
SendKeepActive('')
EndFunc ;==>_Send
поздно вечером и далее в ближайшие дни буду ещё много раз перепроверять и отпишусь о результатахFILE "1.flac" WAVE
TRACK 01 AUDIO
TITLE "Title 01"
INDEX 01 00:00:00
TRACK 02 AUDIO
TITLE "Title 02"
INDEX 01 03:54:00
TRACK 03 AUDIO
TITLE "Title 03"
INDEX 01 07:30:02
1) у меня замечательно работает последние 26 месяцев старый скрипт, выполняющий, грубо говоря, примерно тоже самоеДа что же у вас ничего не работает, что работает у меня?
#include <WinAPIProc.au3>
#include <WinAPISys.au3>
Local $hWnd, $ahWnd, $hControl, $hToolbar, $aText[2], $aTitles, $sClip
Local $sFlacFile = '1.flac', $aProcessList = ProcessList('Notepad.exe')
Local $iPID = $aProcessList[$aProcessList[0][0]][1]
If Not $iPID Then Exit 1 ; MsgBox(262144 + 16, Default, 1)
$ahWnd = _WinAPI_EnumProcessWindows($iPID) ; Вычисляем окно последнего запущенного процесса
If @error Then Exit 2 ; MsgBox(262144 + 16, Default, 2)
$hWnd = WinActivate($ahWnd[$ahWnd[0][0]][0])
If (Not $hWnd) Then Exit 3 ; MsgBox(262144 + 16, Default, 3)
_FixAccelHotKeyLayout()
$sClip = ClipGet()
$aText[0] = StringStripWS($sClip, 3) ; Пункт 1) - Берем текст из буфера на прямую, без вставки в поле блокнота
_WunSend('{CTRLDOWN}ax{CTRLUP}', $hWnd) ; Ctrl+a, Ctrl+x
$aText[1] = ClipGet()
If (Not $aText[0]) Or (Not $aText[1]) Then Exit 4 ; MsgBox(262144 + 16, Default, 4)
$aText[0] = StringRegExpReplace($aText[0], '(?i)(FILE\h*")[^"]+("\h*WAVE)', '${1}' & $sFlacFile & '$2') ; Пункт 2) замена текста CDImage.wav на 1.flac
$aTitles = StringRegExp($aText[1], '[\R\s]*(.+)', 3)
If @error Then Exit 5 ; MsgBox(262144 + 16, Default, 'Ошибка №5' & @CRLF & '$aText[1]:' & @CRLF & '[' & $aText[1] & ']')
For $i = 0 To UBound($aTitles) - 1 ; Пункт 3) и 4)
$aText[0] = StringRegExpReplace($aText[0], '(?i)(AUDIO)(\s+INDEX)', '$1' & @CRLF & ' TITLE "' & $aTitles[$i] & '"$2', 1)
Next
ClipPut($aText[0])
_WunSend('{CTRLDOWN}vs{CTRLUP}', $hWnd) ; Ctrl+v, Ctrl+s
WinKill($hWnd) ; Закрыть окно
ClipPut($sClip)
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 ;==>_FixAccelHotKeyLayout
Func _WunSend($sLetter, $hWnd)
SendKeepActive($hWnd)
Send($sLetter)
SendKeepActive('')
EndFunc ;==>_Send
полагаю, что дело в наличии символа "1" в самом начале следующего названияFILE "1.flac" WAVE
TRACK 01 AUDIO
TITLE "I Feel You"
INDEX 01 00:00:00
TRACK 02 AUDIO
TITLE "Walking In My Shoes"
INDEX 01 04:35:35
TRACK 03 AUDIO
TITLE "Condemnation"
INDEX 01 10:10:40
TRACK 04 AUDIO
TITLE "Mercy In You"
INDEX 01 13:30:72
TRACK 05 AUDIO
TITLE "Judas"
INDEX 01 17:48:65
TRACK 06 AUDIO
TITLE "In Your Room"
INDEX 01 23:03:17
TRACK 07 AUDIO
TITLE "Get Right With Me"
INDEX 01 29:30:05
TRACK 08 AUDIO
TITLE "ush"
INDEX 01 33:22:72
TRACK 09 AUDIO
TITLE "1 Caress"
INDEX 01 38:00:42
TRACK 10 AUDIO
TITLE "Higher Love"
INDEX 01 41:33:32
Нет тут другой косякAlexey сказал(а):... что-то подобное раньше уже было...
; Замените строку:
$aTitles = StringRegExp($aText[1], '[\R\s]*(.+)', 3)
; на эту:
$aTitles = StringRegExp($aText[1], '\s*(.+)', 3)
... Note that in a character class, only \d, \D, \h, \H, \p{}, \P{}, \s, \Q...\E, \S, \v, \V, \w, \W, and \x sequences retain their special meaning, while \b means the backspace character (Chr(8)).
спасибо, букву "R" теперь не съедаетЗамените строку
Не должно.Alexey сказал(а):... без этого метасимвола хуже в чём-то станет?..