1 (изменено: OmTatSat, 2018-12-04 17:12:31)

Тема: AHK: Utorrent и webui нет русского

На версии 3.3 ответ с кода прикреплённого ниже приходил на русском, при обновлении на версию 3.4.5 ответ на английском, хотя в браузере всё на русском, помогите пожалуйста победить эту напасть.

ip := "localhost"
port := "8080"
user := ""
pass := ""
url := "http://" ip ":" port "/gui/"
tokenUrl := url "token.html"
action := "?list=1"
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", tokenUrl, false)
HTTP.SetCredentials(user, pass, 0)
HTTP.Send()
token := "&token=" RegExReplace(HTTP.ResponseText, "<.+?>")
HTTP.Open("GET", url action token, false)
HTTP.SetCredentials(user, pass, 0)
HTTP.Send()
JsonString := HTTP.ResponseText

JS := new ActiveScript("JScript")
JS.eval("delete ActiveXObject; delete GetObject;") 

obj := JS.eval("(" . JsonString . ")").torrents
SetFormat,Float,0.1
Loop % obj.length
   MsgBox % HTTP.ResponseText ;" - " obj[A_Index - 1][4]/10 "%"


/*
 *  ActiveScript for AutoHotkey v1.1
 *
 *  Provides an interface to Active Scripting languages like VBScript and JScript,
 *  without relying on Microsoft's ScriptControl, which is not available to 64-bit
 *  programs.
 *
 *  License: Use, modify and redistribute without limitation, but at your own risk.
 */
class ActiveScript extends ActiveScript._base
{
    __New(Language)
    {
        if this._script := ComObjCreate(Language, ActiveScript.IID)
            this._scriptParse := ComObjQuery(this._script, ActiveScript.IID_Parse)
        if !this._scriptParse
            throw Exception("Invalid language", -1, Language)
        this._site := new ActiveScriptSite(this)
        this._SetScriptSite(this._site.ptr)
        this._InitNew()
        this._objects := {}
        this.Error := ""
        this._dsp := this._GetScriptDispatch()  ; Must be done last.
        try
            if this.ScriptEngine() = "JScript"
                this.SetJScript58()
    }

    SetJScript58()
    {
        static IID_IActiveScriptProperty := "{4954E0D0-FBC7-11D1-8410-006008C3FBFC}"
        if !prop := ComObjQuery(this._script, IID_IActiveScriptProperty)
            return false
        VarSetCapacity(var, 24, 0), NumPut(2, NumPut(3, var, "short") + 6)
        hr := DllCall(NumGet(NumGet(prop+0)+4*A_PtrSize), "ptr", prop, "uint", 0x4000
            , "ptr", 0, "ptr", &var), ObjRelease(prop)
        return hr >= 0
    }
    
    Eval(Code)
    {
        pvar := NumGet(ComObjValue(arr:=ComObjArray(0xC,1)) + 8+A_PtrSize)
        this._ParseScriptText(Code, 0x20, pvar)  ; SCRIPTTEXT_ISEXPRESSION := 0x20
        return arr[0]
    }
    
    Exec(Code)
    {
        this._ParseScriptText(Code, 0x42, 0)  ; SCRIPTTEXT_ISVISIBLE := 2, SCRIPTTEXT_ISPERSISTENT := 0x40
        this._SetScriptState(2)  ; SCRIPTSTATE_CONNECTED := 2
    }
    
    AddObject(Name, DispObj, AddMembers := false)
    {
        static a, supports_dispatch ; Test for built-in IDispatch support.
            := a := ((a:=ComObjArray(0xC,1))[0]:=[42]) && a[0][1]=42
        if IsObject(DispObj) && !(supports_dispatch || ComObjType(DispObj))
            throw Exception("Adding a non-COM object requires AutoHotkey v1.1.17+", -1)
        this._objects[Name] := DispObj
        this._AddNamedItem(Name, AddMembers ? 8 : 2)  ; SCRIPTITEM_ISVISIBLE := 2, SCRIPTITEM_GLOBALMEMBERS := 8
    }
    
    _GetObjectUnk(Name)
    {
        return !IsObject(dsp := this._objects[Name]) ? dsp  ; Pointer
            : ComObjValue(dsp) ? ComObjValue(dsp)  ; ComObject
            : &dsp  ; AutoHotkey object
    }
    
    class _base
    {
        __Call(Method, Params*)
        {
            if ObjHasKey(this, "_dsp")
                try
                    return (this._dsp)[Method](Params*)
                catch e
                    throw Exception(e.Message, -1, e.Extra)
        }
        
        __Get(Property, Params*)
        {
            if ObjHasKey(this, "_dsp")
                try
                    return (this._dsp)[Property, Params*]
                catch e
                    throw Exception(e.Message, -1, e.Extra)
        }
        
        __Set(Property, Params*)
        {
            if ObjHasKey(this, "_dsp")
            {
                Value := Params.Pop()
                try
                    return (this._dsp)[Property, Params*] := Value
                catch e
                    throw Exception(e.Message, -1, e.Extra)
            }
        }
    }
    
    _SetScriptSite(Site)
    {
        hr := DllCall(NumGet(NumGet((p:=this._script)+0)+3*A_PtrSize), "ptr", p, "ptr", Site)
        if (hr < 0)
            this._HRFail(hr, "IActiveScript::SetScriptSite")
    }
    
    _SetScriptState(State)
    {
        hr := DllCall(NumGet(NumGet((p:=this._script)+0)+5*A_PtrSize), "ptr", p, "int", State)
        if (hr < 0)
            this._HRFail(hr, "IActiveScript::SetScriptState")
    }
    
    _AddNamedItem(Name, Flags)
    {
        hr := DllCall(NumGet(NumGet((p:=this._script)+0)+8*A_PtrSize), "ptr", p, "wstr", Name, "uint", Flags)
        if (hr < 0)
            this._HRFail(hr, "IActiveScript::AddNamedItem")
    }
    
    _GetScriptDispatch()
    {
        hr := DllCall(NumGet(NumGet((p:=this._script)+0)+10*A_PtrSize), "ptr", p, "ptr", 0, "ptr*", pdsp)
        if (hr < 0)
            this._HRFail(hr, "IActiveScript::GetScriptDispatch")
        return ComObject(9, pdsp, 1)
    }
    
    _InitNew()
    {
        hr := DllCall(NumGet(NumGet((p:=this._scriptParse)+0)+3*A_PtrSize), "ptr", p)
        if (hr < 0)
            this._HRFail(hr, "IActiveScriptParse::InitNew")
    }
    
    _ParseScriptText(Code, Flags, pvarResult)
    {
        VarSetCapacity(excp, 8 * A_PtrSize, 0)
        hr := DllCall(NumGet(NumGet((p:=this._scriptParse)+0)+5*A_PtrSize), "ptr", p
            , "wstr", Code, "ptr", 0, "ptr", 0, "ptr", 0, "uptr", 0, "uint", 1
            , "uint", Flags, "ptr", pvarResult, "ptr", 0)
        if (hr < 0)
            this._HRFail(hr, "IActiveScriptParse::ParseScriptText")
    }
    
    _HRFail(hr, what)
    {
        if e := this.Error
        {
            this.Error := ""
            throw Exception("`nError code:`t" this._HRFormat(e.HRESULT)
                . "`nSource:`t`t" e.Source "`nDescription:`t" e.Description
                . "`nLine:`t`t" e.Line "`nColumn:`t`t" e.Column
                . "`nLine text:`t`t" e.LineText, -3)
        }
        throw Exception(what " failed with code " this._HRFormat(hr), -2)
    }
    
    _HRFormat(hr)
    {
        return Format("0x{1:X}", hr & 0xFFFFFFFF)
    }
    
    _OnScriptError(err) ; IActiveScriptError err
    {
        VarSetCapacity(excp, 8 * A_PtrSize, 0)
        DllCall(NumGet(NumGet(err+0)+3*A_PtrSize), "ptr", err, "ptr", &excp) ; GetExceptionInfo
        DllCall(NumGet(NumGet(err+0)+4*A_PtrSize), "ptr", err, "uint*", srcctx, "uint*", srcline, "int*", srccol) ; GetSourcePosition
        DllCall(NumGet(NumGet(err+0)+5*A_PtrSize), "ptr", err, "ptr*", pbstrcode) ; GetSourceLineText
        code := StrGet(pbstrcode, "UTF-16"), DllCall("OleAut32\SysFreeString", "ptr", pbstrcode)
        if fn := NumGet(excp, 6 * A_PtrSize) ; pfnDeferredFillIn
            DllCall(fn, "ptr", &excp)
        wcode := NumGet(excp, 0, "ushort")
        hr := wcode ? 0x80040200 + wcode : NumGet(excp, 7 * A_PtrSize, "uint")
        this.Error := {HRESULT: hr, Line: srcline, Column: srccol, LineText: code}
        static Infos := "Source,Description,HelpFile"
        Loop Parse, % Infos, `,
            if pbstr := NumGet(excp, A_Index * A_PtrSize)
                this.Error[A_LoopField] := StrGet(pbstr, "UTF-16"), DllCall("OleAut32\SysFreeString", "ptr", pbstr)
        return 0x80004001 ; E_NOTIMPL (let Exec/Eval get a fail result)
    }
    
    __Delete()
    {
        if this._script
        {
            DllCall(NumGet(NumGet((p:=this._script)+0)+7*A_PtrSize), "ptr", p)  ; Close
            ObjRelease(this._script)
        }
        if this._scriptParse
            ObjRelease(this._scriptParse)
    }
    
    static IID := "{BB1A2AE1-A4F9-11cf-8F20-00805F2CD064}"
    static IID_Parse := A_PtrSize=8 ? "{C7EF7658-E1EE-480E-97EA-D52CB4D76D17}" : "{BB1A2AE2-A4F9-11cf-8F20-00805F2CD064}"
}

class ActiveScriptSite
{
    __New(Script)
    {
        ObjSetCapacity(this, "_site", 3 * A_PtrSize)
        NumPut(&Script
        , NumPut(ActiveScriptSite._vftable("_vft_w", "31122", 0x100)
        , NumPut(ActiveScriptSite._vftable("_vft", "31125232211", 0)
            , this.ptr := ObjGetAddress(this, "_site"))))
    }
    
    _vftable(Name, PrmCounts, EIBase)
    {
        if p := ObjGetAddress(this, Name)
            return p
        ObjSetCapacity(this, Name, StrLen(PrmCounts) * A_PtrSize)
        p := ObjGetAddress(this, Name)
        Loop Parse, % PrmCounts
        {
            cb := RegisterCallback("_ActiveScriptSite", "F", A_LoopField, A_Index + EIBase)
            NumPut(cb, p + (A_Index-1) * A_PtrSize)
        }
        return p
    }
}

_ActiveScriptSite(this, a1:=0, a2:=0, a3:=0, a4:=0, a5:=0)
{
    Method := A_EventInfo & 0xFF
    if A_EventInfo >= 0x100  ; IActiveScriptSiteWindow
    {
        if Method = 4  ; GetWindow
        {
            NumPut(0, a1+0) ; *phwnd := 0
            return 0 ; S_OK
        }
        if Method = 5  ; EnableModeless
        {
            return 0 ; S_OK
        }
        this -= A_PtrSize     ; Cast to IActiveScriptSite
    }
    ;else: IActiveScriptSite
    if Method = 1  ; QueryInterface
    {
        iid := _AS_GUIDToString(a1)
        if (iid = "{00000000-0000-0000-C000-000000000046}"  ; IUnknown
         || iid = "{DB01A1E3-A42B-11cf-8F20-00805F2CD064}") ; IActiveScriptSite
        {
            NumPut(this, a2+0)
            return 0 ; S_OK
        }
        if (iid = "{D10F6761-83E9-11cf-8F20-00805F2CD064}") ; IActiveScriptSiteWindow
        {
            NumPut(this + A_PtrSize, a2+0)
            return 0 ; S_OK
        }
        NumPut(0, a2+0)
        return 0x80004002 ; E_NOINTERFACE
    }
    if Method = 5  ; GetItemInfo
    {
        a1 := StrGet(a1, "UTF-16")
        , (a3 && NumPut(0, a3+0))  ; *ppiunkItem := NULL
        , (a4 && NumPut(0, a4+0))  ; *ppti := NULL
        if (a2 & 1) ; SCRIPTINFO_IUNKNOWN
        {
            if !(unk := Object(NumGet(this + A_PtrSize*2))._GetObjectUnk(a1))
                return 0x8002802B ; TYPE_E_ELEMENTNOTFOUND
            ObjAddRef(unk), NumPut(unk, a3+0)
        }
        return 0 ; S_OK
    }
    if Method = 9  ; OnScriptError
        return Object(NumGet(this + A_PtrSize*2))._OnScriptError(a1)
    
    ; AddRef and Release don't do anything because we want to avoid circular references.
    ; The site and IActiveScript are both released when the AHK script releases its last
    ; reference to the ActiveScript object.
    
    ; All of the other methods don't require implementations.
    return 0x80004001 ; E_NOTIMPL
}

_AS_GUIDToString(pGUID)
{
    VarSetCapacity(String, 38*2)
    DllCall("ole32\StringFromGUID2", "ptr", pGUID, "str", String, "int", 39)
    return String
}

ответ

{"build":41073,"torrents": [

["6E1FFFF752303184C8DF63F3156ED028F1261765",201,"Smallfoot.2018.D.BDRip.72Op.mkv",5290449177,32,194347008,28278784,145,832,264134,8484,"",0,1416,22,51,1443713,1,5118597401,"","","Downloading 3.2 %","1",1543916147,0,"","C:\\Users\\User\\Downloads",0,"C3AD4F15"]],
"label": [],"torrentc": "1212204077"
,"rssfeeds": []
,"rssfilters": []
}
Post's attachments

Screen Shot 12-04-18 at 03.01 PM.PNG 182.18 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

2

Re: AHK: Utorrent и webui нет русского

Смотрите, что отправляет браузер при заходе на сайт и повторяете тоже самое.

3 (изменено: OmTatSat, 2019-06-21 18:54:38)

Re: AHK: Utorrent и webui нет русского

Malcev, подскажите пожалуйста, как посмотреть.

4

Re: AHK: Utorrent и webui нет русского

http://forum.script-coding.com/viewtopi … 30#p124530

5 (изменено: OmTatSat, 2019-06-21 18:35:27)

Re: AHK: Utorrent и webui нет русского

Страница наверно через яваскрипт преобразует в русский язык.
Нашел такую строку http://localhost:8080/gui/lang/ru.js
С таким ответом.

var LANG_STR=["Торрент файлы||*.torrent||Все файлы (*.*)||*.*||","OK","Отмена","Применить","Да","Нет","Закрыть","Настройки","Язык","Язык:","Конфиденциальность","Автопроверка обновлений","Обновлять до beta версий","Отправлять анонимную информацию при проверке обновлений","При загрузке",".!ut для незавершенных файлов","Размещать все файлы сразу","Запретить спящий режим во время загрузки","Настройка отображения","Подтверждать удаление торрентов","Запрос на удаление трекеров","Запрос на выход из программы","Чередовать цвета фона списка","Текущая скорость в заголовке","Ограничения скорости в статусе","При добавлении нового торрента","Не запускать загрузки автоматически","Активировать окно программы","Отображать окно с содержимым торрента","Действия при двойном щелчке","Для раздаваемых торрентов:","Для загружаемых торрентов:","Расположение загруженных файлов","Помещать загрузки в:","Спрашивать путь при добавлении","Перемещать завершенные загрузки в:","Добавить торрентам метку","Перемещать загрузки только из папки по умолчанию","Местонахождение .torrent файлов","Хранить .torrent файлы в:","Перемещать .torrent файлы завершенных задач в:","Автозагрузка .torrent файлов из:","Удалять загруженные","Порт","Порт входящих соединений:","Случайный","Случайный порт при запуске","Включить UPnP переадресацию","Включить NAT-PMP переадресацию","Прокси-сервер","Тип:","Прокси:","Порт:","Учетная запись","Логин:","Пароль:","Использовать DNS на прокси-сервере","Использовать прокси-сервер для P2P соединений","В исключения брандмауэра","Прокси-конфиденциальность","Запрет всех локальных DNS-запросов","Запрет функций с утечкой идентификационных данных","Запрет соединений, неподдерживаемых прокси","Общий лимит отдачи","Ограничить до (кб/с): [0 неограниченно]","Авторежим","Альтернативная скорость если нет загрузок (кб/с):","Общий лимит загрузки","Ограничить до (кб/с): [0 неограниченно]","Количество соединений","Общее максимальное количество соединений:","Максимум присоединенных пиров для одного торрента:","Количество слотов отдачи одного торрента:","Добавлять слоты отдачи, если скорость отдачи < 90%","Global Rate Limit Options","Ограничить скорость накладных расходов передачи","Ограничить скорость для uTP-соединений","Основные настройки BitTorrent","Включить DHT сеть","Включить scrape запросы","Вкл. DHT для новых торрентов","Включить обмен пирами","Поиск локальных пиров","Лимит скорости локальных пиров","IP/Имя хоста для отчета трекеру:","Шифрование протокола","Состояние:","Принимать нешифрованные","Управлять скоростью [uTP]","Включить поддержку UDP-трекеров","Предел передачи","Настройки предела передачи","Тип ограничения:","Ограничение полосы:","Период (дни):","История за выбранный период:","Отдано:","Загружено:","Отдано и загружено:","Период:","последние %d дн.","Обнулить","Настройки очередности","Максимальное число активных торрентов (отдачи и загрузки):","Максимальное число одновременных загрузок:",'Раздавать до    [по умолчанию: 150% и "Игнорировать"]',"Миним. соотношение (%):","Миним. время сидирования (мин):","Раздачи имеют более высокий приоритет в сравнении с загрузками","Когда коэффициент раздачи достигнут","Ограничить скорость отдачи до (кб/с): [0 остановить]","Включить планировщик","График расписания","Настройки лимитов скорости","Лимит отдачи (кб/с):","Лимит загрузки (кб/с):","Откл. DHT в режиме Стоп","Включить Web UI","Учетная запись","Логин:","Пароль:","Включить гостевой аккаунт с логином:","Настройки соединения","Использовать порт (порт соединений по умолчанию):","Разрешить доступ со следующих IP [Разделять запятой]:","Enable µTorrent Remote Access","Authentication","Username:","Password:","Продвинутые настройки [ВНИМАНИЕ: Не изменяйте их!]","Значение:","Вкл.","Выкл.","OK","Всплывающий список скоростей (разделять запятой)","Указать автоматический список скоростей:","Список раздач:","Список загрузок:","Постоянные метки [Не зависят от торрентов, разделять символом | ]","Поисковые системы [формат: имя|URL]","Основные настройки кэша","Кэш используется для хранения часто используемой информации и уменьшения количества обращений к жесткому диску. µTorrent распределяет кэш автоматически, но Вы можете настроить его самостоятельно.","Заменить авто-кэш значением, выставленным вручную (мб):","Уменьшать загрузку памяти, когда кэш не используется","Дополнительные настройки кэша","Включить кэширование записи на диск","Записывать нетронутые блоки каждые 2 минуты","Записывать завершенные части немедленно","Включить кэширование чтения с диска","Отключить кэширование чтения при низкой скорости отдачи","Удалять устаревшие блоки из кэша","Увеличивать размер кэша автоматически, при его заполнении","Отключить Windows кэширование записи на диск","Отключить Windows кэширование чтения с диска","Выполнить программу","Выполнить эту программу по завершении торрента:","Выполнить эту программу при изменении торрента:","Допустимы команды:\r\n%F - имя загруженного файла (для торрентов с одним файлом)\r\n%D - папка с сохранёнными файлами\r\n%N - название торрента\r\n%S - состояние торрента\r\n%L - метка\r\n%T - трекер\r\n%M - строка статуса (как в колонке статуса)\r\n%I - hex-кодированный инфо-хеш\r\n\r\nСостояние это комбинация из:\r\nначато = 1, проверка = 2, старт после проверки = 4,\r\nпроверено = 8, ошибка = 16, приостановлено = 32, авто = 64, загружено = 128","Свойства торрента","Трекеры [Разделять ссылки пустой строкой]","Настройки скорости","Макс. скорость отдачи (кб/с): [0 по умолчанию]","Макс. скорость загрузки (кб/с): [0 по умолчанию]","Слотов отдачи: [0 по умолчанию]","Раздавать до:  [Игнорировать общие настройки]","Заменить следующими:","Миним. соотношение (%):","Миним. время сидирования (мин):","Другие настройки","Суперсид","Включить DHT","Обмен пирами","Рассылки","URL рассылки:","Псевдоним:","Подписка","Не загружать автоматически","Автоматически загружать содержимое публикуемых рассылок","Использовать фильтр эпизода","Рассылки||Избранное||История||","All Feeds","Настройки фильтров","Имя:","Фильтр:","Кроме:","Сохр. в:","Рассылка:","Качество:","Номер эпизода: (напр. 1х12-14)","Фильтровать по оригинальному имени (не шифруя)","Не запускать загрузки автоматически","Фильтр эпизода","Назначить высший приоритет","Мин. интервал:","Метка для новых:","Добавить рассылку...","Правка рассылки...","Отключить рассылку","Включить рассылку","Обновить рассылку","Удалить рассылку","Загрузить","Открыть в браузере","Добавить в Избранное","Добавить","Удалить","ВСЕ","(Все)","(всегда)||(один раз)||12 часов||1 день||2 дня||3 дня||4 дня||1 неделя||2 недели||3 недели||1 месяц||","Добавить рассылку","Править рассылку","Remove RSS Feed(s)","Really delete the %d selected RSS Feeds?","Вы действительно хотите удалить RSS-рассылку '%s'?","Полное имя","Имя торрента","Эпизод","Формат","Кодек","Date","Рассылка","Источник URL","IP-адрес","Порт","Клиент","Флаги","%","Рейтинг","Приём","Отдача","Запросы","Ожидает","Отдано","Загружено","Ошибки хеша","Ск. пира","Макс.отдача","Макс.приём","В очереди","Неактивен","Выполнено","Первая часть","Имя файла","||# частей||Количество частей","%","Приоритет","Размер","пропущен","низкий","нормальный","высокий","Загружено:","Отдано:","Сидов:","Осталось:","Скор. загрузки:","Скор. отдачи:","Пиров:","Коэффициент:","Расположение:","Хеш-сумма:","Общие","Передача","подключенных %d из %d (всего: %d)","Пр: %s / От: %s  -  %s","Копировать","Сброс","неограниченно","Разрешать IP","Get File(s)","Не загружать","Высокий приоритет","Низкий приоритет","Нормальный приоритет","Копировать Magnet-URI","Стереть загруженные файлы","только .torrent",".torrent и файл(ы)","Перехешировать","Запустить принудительно","Метка","Пауза","Свойства","Переместить вниз очереди","Переместить вверх очереди","Удалить","Удалить и","Запустить","Остановить","Активные","Все","Готовые","Загружаемые","Неактивные","Без метки","||Доступ.||Доступность","Добавлен","Завершён","%","Получено","||Загр. скор.||Скорость загрузки","Время","Метка","Имя торрента","Позиция","Пиры","Осталось","Сиды","Сиды/Пиры","||Коэфф.||Коэффициент","Размер","Источник URL","Статус","Отдано","||Отд. скор.||Скорость отдачи","Вы действительно хотите удалить %d выбранных торрента(ов) и все связанные с ними данные?","Вы действительно хотите удалить выбранный торрент и все связанные с ним данные?","Вы действительно хотите удалить %d выбранных торрента(ов)?","Вы действительно хотите удалить выбранный торрент?","Вы действительно хотите удалить RSS-фильтр '%s'?","Проверено %:.1d%%","Загружается","Ошибка! %s","Загружен","Пауза","В очереди","Ожидает раздачи","Раздается","Остановлен","Ввод новой метки","Введите новую метку для выделенных торрентов","Создать новую метку...","Удалить метку","Общее||Трекеры||Пиры||Части||Файлы||Скорость||Журнал||","Добавить торрент","Добавить торрент по URL","Пауза","Конфигурация","Переместить вниз очереди","Переместить вверх очереди","Удалить","Менеджер рассылок","Запустить","Остановить","Файл","Добавить...","Добавить по URL...","Настройка","Конфигурация","Показать список категорий","Подробная информация","Строка состояния","Панель инструментов","Значки на вкладках","Справка","Посетить сайт","Посетить форум µTorrent","Send WebUI Feedback","About µTorrent WebUI","Торренты","Пауза для всех","Продолжить все загрузки","D: %s%z/с"," L: %z/с"," O: %z/с"," T: %Z","U: %s%z/с","б","Эб","гб","кб","мб","Пб","Тб","Дополнительно","Скорость","Соединение","Кэширование","Папки","Общие","Планировщик","Очередность","Интерфейс","Интерфейс","BitTorrent","Web интерфейс","Предел передачи","Запустить программу","Remote","Свойства||Старт/Стоп||Открыть папку||Полоса загрузки||","Отключено||Включено||Принудительно||","(Нет)||Socks4||Socks5||HTTPS||HTTP||","Отдано||Загружено||Отдано и загружено||","Мб||Гб||","1||2||5||7||10||14||15||20||21||28||30||31||","Наименование","Значение","Пн||Вт||Ср||Чт||Пт||Сб||Вс||","Понедельник||Вторник||Среда||Четверг||Пятница||Суббота||Воскресенье||","Полный","Полный - использовать общие настройки скорости","Ограничение","Ограничение - использовать настройки из планировщика","Только раздача","Только раздача - только отдавать данные (включая незавершённые)","Стоп","Стоп - остановить все, кроме принудительно запущенных","<= %d часов","Игнорировать","<= %d минут","%d дн. %d час.","%d час. %d мин.","%d мин. %d сек.","%d сек.","%d нед. %d дн.","%d год(а)/лет %d нед."];

Так себе прикинул, наверное проще будет в ручную перевести эти пару слов и регексом обрезать отображение процентов.
А то в веб ahk запросах/ответах не легко разобраться.

Post's attachments

Screen Shot 12-04-18 at 11.12 PM.PNG 186.78 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

6

Re: AHK: Utorrent и webui нет русского

Это обычный массив.

7

Re: AHK: Utorrent и webui нет русского

Посмотрите какие хедеры отправляются, кукисы, которые дают команду серверу отправлять вам js на кириллице.

8

Re: AHK: Utorrent и webui нет русского

Malcev есть один файл куки, имеет такой заголовок запроса.

Ключ	Значение
Запрос	GET /gui/?token=645t3zjCdynPuF84erp1VhfibWIFbhTwXVfx6FZXTEn6AEUTmLBg4uDtB1wAAAAA&action=setsetting&s=webui.cookie&v={"showDetails":true,"showDetailsIcons":true,"showCategories":true,"showToolbar":true,"showStatusBar":true,"useSysFont":true,"updateInterval":3000,"maxRows":0,"lang":"ru","hSplit":-1,"vSplit":-1,"torrentTable":{"colMask":995584,"colOrder":[],"colWidth":[],"reverse":false,"sIndex":-1},"peerTable":{"colMask":250402,"colOrder":[],"colWidth":[],"reverse":false,"sIndex":-1},"fileTable":{"colMask":48,"colOrder":[],"colWidth":[],"reverse":false,"sIndex":-1},"feedTable":{"colMask":222,"colOrder":[],"colWidth":[],"reverse":false,"sIndex":-1},"advOptTable":{"rowMultiSelect":false},"ckMgrTable":{"reverse":false,"sIndex":-1},"activeSettingsPane":"dlgSettings-BitTorrent","activeRssFeeds":{"rssfeed_all":1},"activeTorGroups":{"cat":{"cat_all":1},"lbl":{}},"urlCookies":[]}&t=1544023675345 HTTP/1.1
Accept	application/json
X-Requested-With	XMLHttpRequest
X-Request	JSON
Referer	http://localhost:8080/gui/
Accept-Language	ru-RU
Accept-Encoding	gzip, deflate
User-Agent	Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host	localhost:8080
DNT	1
Connection	Keep-Alive
Cache-Control	no-cache
Cookie	GUID=Ecgd2H3gek8R4fKgvqq7

Может "Accept-Language ru-RU" нужно как-то указать в AHK?

А так-то уже решил вопрос, через костыль правда, но нам же важно "ехать а не шашечки")

...
state = % obj[A_Index - 1][21]
  
  RegExMatch(state, "([A-Z][a-z]*)\D+", match)

IfInString, match, Finding peers
            state = Поиск пиров
        IfInString, match, Connecting to peers
            state = Подключение к пирам
        if match1 = Downloading
            state = Загрузка
        if match1 = Paused
            state = Пауза
        if match1 = Queued
            state = Очередь
        if match1 = Stopped
            state = Остановлен
        IfInString, match, F] Downloading
            state = [П] Загружается
        if match1 = Finished
            state = Завершено
        if match1 = Seeding
            state = Раздаётся

9

Re: AHK: Utorrent и webui нет русского

Вставьте в код после HTTP.Open:

HTTP.SetRequestHeader("Accept-Language", "ru-RU")

10 (изменено: OmTatSat, 2019-06-21 18:55:19)

Re: AHK: Utorrent и webui нет русского

Malcev, попробовал, всё так же на английском показывает((.

...
url := "http://" ip ":" port "/gui/"
tokenUrl := url "token.html"
action := "?list=1"
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", tokenUrl, false)
HTTP.SetRequestHeader("Accept-Language", "ru-RU")
HTTP.SetCredentials(user, pass, 0)
HTTP.Send()
token := "&token=" RegExReplace(HTTP.ResponseText, "<.+?>")
HTTP.Open("GET", url action token, false)
HTTP.SetCredentials(user, pass, 0)
HTTP.Send()
JsonString := HTTP.ResponseText

JS := new ActiveScript("JScript")
JS.eval("delete ActiveXObject; delete GetObject;") 

obj := JS.eval("(" . JsonString . ")").torrents
SetFormat,Float,0.1
Loop % obj.length
   MsgBox % HTTP.ResponseText
...

11

Re: AHK: Utorrent и webui нет русского

У вас же 2 раза HTTP.Open.

12 (изменено: OmTatSat, 2019-06-21 18:37:15)

Re: AHK: Utorrent и webui нет русского

Malcev да, не подумал что там их два, по этому не заметил.
Поправил так.

...
url := "http://" ip ":" port "/gui/"
tokenUrl := url "token.html"
action := "?list=1"
HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", tokenUrl, false)
HTTP.SetRequestHeader("Accept-Language", "ru-RU")
HTTP.SetCredentials(user, pass, 0)
HTTP.Send()
token := "&token=" RegExReplace(HTTP.ResponseText, "<.+?>")
HTTP.Open("GET", url action token, false)
HTTP.SetRequestHeader("Accept-Language", "ru-RU")
HTTP.SetCredentials(user, pass, 0)
HTTP.Send()
JsonString := HTTP.ResponseText

JS := new ActiveScript("JScript")
JS.eval("delete ActiveXObject; delete GetObject;") 

obj := JS.eval("(" . JsonString . ")").torrents
SetFormat,Float,0.1
Loop % obj.length
   MsgBox % HTTP.ResponseText
...

Ответ приходит на английском((.

13

Re: AHK: Utorrent и webui нет русского

А в IE если вы такой запрос отправляеие JSON приходит на русском?

14

Re: AHK: Utorrent и webui нет русского

Malcev не уверен что точно понял, но в експлорере нашел ответ похожий как в AHK - на английском.

{"build":41073,"torrents": [

["6E1FFFF752303184C8DF63F3156ED028F1261765",136,"Smallfoot.2018.D.BDRip.72Op.mkv",5290449177,1000,5290449177,68763648,12,0,0,0,"",0,2088,0,0,65536,-1,0,"","","Finished 100.0 %","1",1543994932,1543996037,"","C:\\Users\\User\\Downloads",0,"F8D3F1FD"]],
"label": [],"torrentc": "1441645204"
,"rssfeeds": []
,"rssfilters": []
,"messages": [
]
}

Или нужно как-то отдельно отправить запрос?

15

Re: AHK: Utorrent и webui нет русского

Значит в эксплорере тоже возвращает на английском.
Если хочется узнать причину можно спросить на оф.форуме.

16

Re: AHK: Utorrent и webui нет русского

А Бог с ним, вопрос через костыль но решён).
Спасибо за отзывчивость и желание помочь.