Страница 17 из 20

Добавлено: Вт ноя 12, 2024 12:46
AkulaBig
Orion9 писал(а): Верните свой удаленный скрипт, хочется на него взглянуть :)
Да от него на нынешний момент только основа осталась. Как подключить библиотеку. Он выложен в теме AutoIt на ру.борде.
Orion9 писал(а):Я примерно понял технику: запустить ahk из vbs, передав ему имя. Может и попробую когда, если возникнет потребность :wink:
Совершенно верно. В этой теме и на офсайте есть рыба. Но при реализации куча нюансов вылезла.

Добавлено: Чт ноя 14, 2024 00:11
ProgMan13
В секции [Script] опция проверки результата скрипта на UTF8:
CheckUTF8Result=1

http://progman13.wincmd.ru/downloads/WinScriptAdv.zip

Добавлено: Чт ноя 14, 2024 09:43
AkulaBig
А можно чуть поподробнее, как пользоваться этой опцией? Установил обновление. Не зависимо от значения CheckUTF8Result перед выводом результата в колонку стала появляться надпись WSA.

Добавлено: Чт ноя 14, 2024 10:52
Orion9
Браво, ProgMan13, теперь всё заработало :)

И визуально работает чуть быстрее, чем тот же скрипт на Autorun. Будет время, потестирую получше.

AkulaBig
Я так понял, что это сделали примочку для внешних движков. Vbs это не касается.

Добавлено: Чт ноя 14, 2024 13:51
AkulaBig
Orion9 писал(а): Я так понял, что это сделали примочку для внешних движков. Vbs это не касается.
Понятно. Да, ошибка перестала выскакивать. Самое интересное, что изменение значения ключа не на что не влияет. Его вообще можно не прописывать. Скорость ничуть не изменилась. Но появился неприятный момент. Появляется значение WSA, которое потом меняется на правильное значение. Из-за этого пока не зашло.

Добавлено: Чт ноя 14, 2024 16:51
Orion9
Его вообще можно не прописывать
Если его не прописывать, то будут кракозябры вместо русских имен.

Для правильной работы мне потребовалось указать этот ключ и в скрипте сделать вывод в stdout в кодировке 650001. Все другие варианты - либо ANSI, либо кракозябры.

А что такое WSA и почему вы его ловите? Колонка с vbs-скриптом у меня работает нормально независомо от ключа CheckUTF8Result.

Добавлено спустя 8 минут:

А, кажется, увидел. Появляется такая надпись перед заполнением данных, но работе не мешает.

Добавлено: Чт ноя 14, 2024 17:45
AkulaBig
Orion9 писал(а): Если его не прописывать, то будут кракозябры вместо русских имен.
Для правильной работы мне потребовалось указать этот ключ и в скрипте сделать вывод в stdout в кодировке 650001. Все другие варианты - либо ANSI, либо кракозябры.
Теперь понятно. Вы как Штирлиц. Пытать вас приходится :roll:
Как прописать кодировку в выводе? Сейчас-то мне конвертировать приходится через bin. Еще знаю UDF-функционал encoding. Но я понял надо кодовую страницу вывода задать?
Orion9 писал(а): Колонка с vbs-скриптом у меня работает нормально
Я это с первого раза понял и тестирую au3.
Orion9 писал(а): А что такое WSA и почему вы его ловите?
А, кажется, увидел. Появляется такая надпись перед заполнением данных, но работе не мешает.
Работе не мешает, но использовать такой вывод несерьезно.

Добавлено: Чт ноя 14, 2024 19:38
Orion9
Я это с первого раза понял и тестирую au3
Ну откуда же я знал, что вы на au3 пишите? :lol: Говорил же вам верните скрипт ) Хотя если он на AutoIt, то в нем я совершенное не силен.
Но я понял надо кодовую страницу вывода задать?
Да.

В Autohotkey это задается командой FileEncoding перед выводом в stdout, т.е. в самом скрипте это выглядит как:

Код: Выделить всё

FileEncoding 65001
content := filename

Добавлено: Чт ноя 14, 2024 21:22
AkulaBig
Orion9 писал(а): В Autohotkey
Спасибо. Я думал вы на au3 пишите. Придется самому разбираться.
Orion9 писал(а):AutoIt, то в нем я совершенное не силен.
Какая разница на каком языке писать, если понимаешь алгоритмы программирования. В свое время был у нас препод, который толком не знал, какую кнопку на компе нажать. Но его одного взяли в совместное предприятие и он на премию за алгоритмы купил квартиру, обставил ее. Естественно и женщина хорошая сразу нашлась. А крутые кодеры так и продолжали за зарплату на кнопки давить.
Наверное пока не буду этим вопросом заниматься, так как совсем не устраивает вывод ненужных данных перед заполнением колонок.

Добавлено: Чт ноя 14, 2024 23:02
Orion9
Какая разница на каком языке писать, если понимаешь алгоритмы программирования.
Я знаком с Autohotkey V2, но даже чтение скриптов, написанных на Autohotkey V1, может вызывать серьезные трудности из-за отличий в синтаксисе. И все же, когда я просил вас вернуть удаленный скрипт, я надеялся посмотреть на его алгоритм, прежде всего. Что вы хотите вытянуть из консольной утилиты?

Добавлено: Пт ноя 15, 2024 05:34
AkulaBig
Orion9 писал(а): Я знаком с Autohotkey V2, но даже чтение скриптов, написанных на Autohotkey V1, может вызывать серьезные трудности из-за отличий в синтаксисе.
Именно из-за этого я от него отказался. Не смог создать тестовый скрипт на версии 2. Решил, что в дальнейшем запутаюсь в нем.
Orion9 писал(а):когда я просил вас вернуть удаленный скрипт, я надеялся посмотреть на его алгоритм, прежде всего.
Я выше написал, где скрипт лежит. А у меня его нет. Он давно уже изменен.
Orion9 писал(а):Что вы хотите вытянуть из консольной утилиты?
Из консольной ничего не вытянешь. Потому что она мелькает при работе. Поэтому приходится использовать библиотеку. А значит использовать либо au3, либо ahk.

Добавлено: Пт ноя 15, 2024 06:12
Monarch-LFV
AkulaBig писал(а):Из консольной ничего не вытянешь. Потому что она мелькает при работе.
Я на VBS со сторонними утилитами обычно вытягиваю не через StdOut, а через временный файл, вызов примерно такой:

Код: Выделить всё

program="%commander_path%\...\program.exe"
WshShell.run "cmd /c """"" & program & """ -params""" & """>""" & txtfile & """", 0, True
А потом закидываю в переменную (<=32768) содержимое текстового файла, его удаляю, а с переменной делаю парсинг построчно на предмет нужной информации. Никакого окна не мелькает.

Добавлено: Пт ноя 15, 2024 10:29
Orion9
AkulaBig писал(а):Поэтому приходится использовать библиотеку. А значит использовать либо au3, либо ahk.
Ну так что вы хотели вытянуть-то? :)

Добавлено спустя 3 минуты:
Monarch-LFV писал(а):А потом закидываю в переменную (<=32768) содержимое текстового файла, его удаляю, а с переменной делаю парсинг построчно на предмет нужной информации. Никакого окна не мелькает.
Рабочий способ :)

Добавлено: Пт ноя 15, 2024 11:51
AkulaBig
Orion9 писал(а): Ну так что вы хотели вытянуть-то? :)
Ну а что можно вытянуть из MediaInfo? Тестирую разные способы получения информации и программирование на разных скриптовых языках.
Orion9 писал(а):Рабочий способ :)
Отдельно пробовал этот метод. Смущает, что надо создавать временный файл. Надо будет попробовать в составе скрипта. Хотя сначала надо будет попробовать использовать всякие прожки, скрывающие вывод.

Добавлено: Пт ноя 15, 2024 12:49
Orion9
AkulaBig
Понял. Больше для тестов. Просто Monarch-LFV верно отметил, что TCMediaInfo может вытянуть что угодно и как угодно. Благо автор плагина постарался :)

Что касается мелькания консоли, то я никакой специалист в системных делах, но ряд каких-то техник существует. В Autohotkey я нашел в сети такой подход, может вам пригодится чем)

Код: Выделить всё

RunWaitOne(command) {
local sOut
dhw := A_DetectHiddenWindows
pid :=0    
    DetectHiddenWindows true
    Run A_ComSpec " /k",, "Hide", &pid
    WinWait "ahk_pid " pid
    
    DllCall("AttachConsole", "UInt", pid)
    DetectHiddenWindows dhw

    shell := ComObject("WScript.Shell")
    exec := shell.Exec(A_ComSpec . " /C " . command)    
    sOut := exec.StdOut.ReadAll()
    
    DllCall("FreeConsole")
    if ProcessExist(pid)
       ProcessClose pid
return sOut
}