Автор Тема: действия с текстом и нажатия комбинаций клавиш в активном окне  (Прочитано 1602 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1389
  • Репутация: 201
  • Пол: Мужской
  • Windows 7 /10 [x64]
    • Награды
  • Версия AutoIt: 3.3.12.0
Скиньте ссылку на "notepad2" которым пользуетесь.

Русское сообщество AutoIt


Оффлайн Alexey [?]

  • Новичок
  • *
  • Сообщений: 170

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды

Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1389
  • Репутация: 201
  • Пол: Мужской
  • Windows 7 /10 [x64]
    • Награды
  • Версия AutoIt: 3.3.12.0
Вариант №3:
(нажмите для показа/скрытия)
« Последнее редактирование: Май 05, 2018, 08:07:28 от Alofa »

Оффлайн Alexey [?]

  • Новичок
  • *
  • Сообщений: 170

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
если в скрипте ничего не менять, то единственное, что происходит - это появление мелкого окна:
в заголовке у него script.ехе; в центре у него красный круг с белым крестом внутри, возле которых просто 1 символ: 1 (ниже кнопка ОК)

если в строке 4 поменять Notepad2.exe на Notepad.exe, то всё тоже самое, только вместо символа "1" символ "5"

Русское сообщество AutoIt


Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1389
  • Репутация: 201
  • Пол: Мужской
  • Windows 7 /10 [x64]
    • Награды
  • Версия AutoIt: 3.3.12.0
... тоже самое...
Это для кого как :)
Подправил скрипт, испробуйте

... только вместо символа "1" символ "5"
Если вылезет такая ошибка, покажите ее нам.
« Последнее редактирование: Май 04, 2018, 20:54:13 от Alofa »

Оффлайн Alexey [?]

  • Новичок
  • *
  • Сообщений: 170

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
при попытке скомпилировать в ехе-файл:

Aut2Exe Error
Line 23
If @error Then Exit MsgBox(262144+16, Default, 'Ошибка №5' & @CRLF & '$aText[1]:' @CRLF & '[' & $aText[1] & ']')
If @error Then Exit MsgBox(262144+16, Default, 'Ошибка №5' & @CRLF & '$aText[1]:' ^ ERROR

Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1389
  • Репутация: 201
  • Пол: Мужской
  • Windows 7 /10 [x64]
    • Награды
  • Версия AutoIt: 3.3.12.0
« Последнее редактирование: Май 05, 2018, 13:57:18 от Alofa »

Оффлайн Alexey [?]

  • Новичок
  • *
  • Сообщений: 170

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
после запуска скрипта в течение буквально секунды происходит несколько событий, которые нормально успеть рассмотреть нельзя
но кое-что удалось примерно понять:
- происходит вставка примерно 20 каких-то нечитаемых символов в то место, куда должно перемещаться Title 01
форум постоянно пишет Ожидание предварительного просмотра... при попытке вставить в ответ те символы (они доступны в буфере обмена и почти все выглядят просто как квадраты)

- затем блокнот выдаёт запрос "save changes to file?", на который успеть среагировать невозможно
- после чего блокнот закрывается
- если затем этот текстовый файл открыть, то он оказывается пустым (размер 2 байта, первая строка пустая, конец файла в строке 2)

Русское сообщество AutoIt


Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1389
  • Репутация: 201
  • Пол: Мужской
  • Windows 7 /10 [x64]
    • Награды
  • Версия AutoIt: 3.3.12.0
... происходит вставка примерно 20 каких-то нечитаемых символов...
Ну вот теперь еще проблема с кодировкой нарисовалась.

Alexey вспомните "эксперимент" - это был вообще правильный алгоритм действий?

Если да, то вот вам Вариант №4:
(нажмите для показа/скрытия)

Оффлайн Alexey [?]

  • Новичок
  • *
  • Сообщений: 170

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
текстовый файл был скриптом отредактирован, сохранён и закрыт. получилось вот это:
Цитировать
FILE "1.flac" WAVE
  TRACK 01 AUDIO
    TITLE "FILE "CDImage.wav" WAVE"
    INDEX 01 00:00:00
  TRACK 02 AUDIO
    TITLE "TRACK 01 AUDIO"
    INDEX 01 03:54:00
  TRACK 03 AUDIO
    TITLE "INDEX 01 00:00:00"
    INDEX 01 07:30:02
хоть итог и некорректен, но это вроде как первый реально позитивный результат

Цитировать
это был вообще правильный алгоритм действий?
на данный момент это вроде бы не особо важно, но раз уж вопрос задан, отвечаю:

- пункт "вставьте и сохраните" не вполне верный, так как мне нужно каждый раз скрипту для обработки давать несохранённый текстовый файл
- пункт "деактивируйте последнее (нужное нам) окно блокнота" не вполне верный, так как в реальных условиях использования готового скрипта окно не будет специально деактивироваться

Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1389
  • Репутация: 201
  • Пол: Мужской
  • Windows 7 /10 [x64]
    • Награды
  • Версия AutoIt: 3.3.12.0
... хоть итог и некорректен...
А какие данные при этом были в буфере и какие в окне блокнота на момент запуска скрипта?

Оффлайн Alexey [?]

  • Новичок
  • *
  • Сообщений: 170

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
в буфере (последняя строка пустая):
Цитировать
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

Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1389
  • Репутация: 201
  • Пол: Мужской
  • Windows 7 /10 [x64]
    • Награды
  • Версия AutoIt: 3.3.12.0
Понятия не имею почему у меня вот Так, а у вас эдак.
« Последнее редактирование: Май 06, 2018, 15:03:07 от Alofa »

Оффлайн Alexey [?]

  • Новичок
  • *
  • Сообщений: 170

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
не могу открыть: Server not found
впрочем, всё равно это проблему не решит

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

Оффлайн Alofa [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 1389
  • Репутация: 201
  • Пол: Мужской
  • Windows 7 /10 [x64]
    • Награды
  • Версия AutoIt: 3.3.12.0
OffTopic
не могу открыть: Server not found...
Это Ссылка на Яндекс диск. Вот в дополнении Ссылка на mail облако.
Да что же у вас ничего не работает, что работает у меня? (крик души)


Добавлено: Май 06, 2018, 15:09:35
Короче, вот последняя доработка скрипта, далее я пас. У меня все работает.
Код: AutoIt [Выделить]
#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


OffTopicP.s: Давненько я подобными автокликерами не занимался.
« Последнее редактирование: Май 06, 2018, 16:15:20 от Alofa »

Русское сообщество AutoIt


 

Похожие темы

  Тема / Автор Ответов Последний ответ
1 Ответов
2504 Просмотров
Последний ответ Август 06, 2012, 00:36:40
от DarWiM
1 Ответов
1515 Просмотров
Последний ответ Март 06, 2013, 19:28:41
от InnI
0 Ответов
1433 Просмотров
Последний ответ Июнь 14, 2013, 20:12:29
от madmasles
4 Ответов
1992 Просмотров
Последний ответ Март 05, 2014, 14:04:11
от Yuriy
1 Ответов
1580 Просмотров
Последний ответ Май 30, 2014, 13:32:39
от InnI
5 Ответов
3717 Просмотров
Последний ответ Апрель 07, 2015, 18:41:20
от darklord422
2 Ответов
1970 Просмотров
Последний ответ Июнь 01, 2015, 11:28:10
от ---Zak---
7 Ответов
1338 Просмотров
Последний ответ Декабрь 18, 2015, 00:19:29
от m4e
7 Ответов
2972 Просмотров
Последний ответ Февраль 18, 2016, 15:42:10
от Alofa
0 Ответов
401 Просмотров
Последний ответ Август 11, 2017, 10:03:51
от dimcomp