Что нового

действия с текстом и нажатия комбинаций клавиш в активном окне

Автор
A

Alexey

Новичок
Сообщения
171
Репутация
0
не могу открыть: Server not found
впрочем, всё равно это проблему не решит

может быть, всё-таки стоило бы попробовать идею насчёт взятия за основу старого скрипта?
 
A

Alofa

Гость
OffTopic:
Alexey сказал(а):
не могу открыть: Server not found...
Это Ссылка на Яндекс диск. Вот в дополнении Ссылка на mail облако.
Да что же у вас ничего не работает, что работает у меня? (крик души)



Добавлено:
Сообщение автоматически объединено:

Короче, вот последняя доработка скрипта, далее я пас. У меня все работает.
Код:
#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


OffTopic:
P.s: Давненько я подобными автокликерами не занимался.
 
Автор
A

Alexey

Новичок
Сообщения
171
Репутация
0
вроде бы сработало:
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 месяцев старый скрипт, выполняющий, грубо говоря, примерно тоже самое
2) в государственной блокировке яндэкса я тоже виноват?
так что не стоит портить себе настроение по пустякам. иногда в возникающих проблемах виноват не собеседник, а обстоятельства
 
A

Alofa

Гость
Alexey
Да, чуть не забыл. Вот тот же скрипт, только без всплывающих MsgBox-сообщений.
Код:
#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
 
Автор
A

Alexey

Новичок
Сообщения
171
Репутация
0
Alofa, благодарю за помощь
за несколько дней не было случая, чтобы скрипт проявил себя плохо

всплывающих MsgBox-сообщений не доводилось наблюдать, но такой вариант скрипта точно не помешает
 
Автор
A

Alexey

Новичок
Сообщения
171
Репутация
0
в скрипте выявилась ошибка. в данном примере TRACK 08 должен содержать Rush, а не ush:
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
полагаю, что дело в наличии символа "1" в самом начале следующего названия
что-то подобное раньше уже было

этот же пример я проверил со старым скриптом - там этой ошибки нет
 
A

Alofa

Гость
Alexey сказал(а):
... что-то подобное раньше уже было...
Нет тут другой косяк и даже не мой.
Код:
; Замените строку:
$aTitles = StringRegExp($aText[1], '[\R\s]*(.+)', 3)
; на эту:
$aTitles = StringRegExp($aText[1], '\s*(.+)', 3)

Почему-то метасимвол "\R", при обращении к нему как к символьному классу съедает букву "R".
Из справки. Описание "[...]"
... 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)).
 
Автор
A

Alexey

Новичок
Сообщения
171
Репутация
0
Замените строку
спасибо, букву "R" теперь не съедает

1) без этого метасимвола хуже в чём-то станет?
2) если нет, то какую роль он в скрипте выполнял? я немного посмотрел тут, но понять не смог
 
Верх