СергейК
СергейК личный блог
22 марта 2021, 12:55

Автологин для квика на javascript

Надоело логиниться в квик каждый день по 10 раз, всё время за логином-паролем лазить в файл и копипастить. Сделал скрипт, к-й это автоматизирует. Работает на javascript, так что от версии Windows зависеть не должно.

Сам скрипт кладётся в файл типа C:\Util\Js\Q.js или куда угодно, только не у всех на виду. На этот скрипт делается ярлык, он кладётся на рабочий стол куда-то в угол, и ему прописывается горячая клавиша типа Ctrl-Alt-X или любая другая буква. После этого вы запускаете квик, появляется окно логина, нажимаете Ctrl-Alt-X и через полсекунды оно срабатывает. Важно, что ярлык должен быть на рабочем столе, иначе горячая клавиша не работает. 

Вообще вводить данные в другую программу можно двумя способами: copy&paste и эмуляция клавиш. Я в данном случае пошёл по второму пути, хотя и первый тоже реализуем и даже чем-то лучше, т.к. там не надо парится с языком. Из-за этого, если вы хотите использовать этот скрипт, нужно проверить ряд моментов и при необходимости внести исправления. 

⦁ В варианте, к-й я выкладываю, логин/пароль должны быть прописаны прямо в скрипте, но можно и читать из файла. У меня дома рабочий вариант вообще ищет их в rtf-файле где много всяких данных. Если логин/пароль положить во внешний файл, то их можно конечно и закодировать. 
⦁ Чтобы отработало правильно, надо чтобы текущий язык ввода (по сути язык ввода по умолчанию в системе) в квике был русский. Если это не так, то вначале надо поменять bEngSystem=true
⦁ У меня логин русский, а пароль английский, так что между ними производится переключение клавиатуры. Если у вас что угодно из этого не так, надо в нужных местах убрать или добавить переменную LangSwitch, к-я содержит клавиши «Alt-Shift». Если у вас опять же язык переключается по-другому, там надо прописать другие клавиши.
⦁ У меня вводится и логин и пароль. Если у вас вводится только пароль, то поменять тоже нужно и не сложно. 

В общем, можно было бы написать более универсальную версию, чтобы определяеть, когда надо переключать языки автоматом, но мне не нужно, а кому надо разберутся. Или же можно переписать через copy&paste. Делать полностью автоматизированный логин, когда вообще ничего нажимать не нужно я не хочу, потому что тогда любой, кто получит доступ к вашему компьютеру сможет получить доступ и к вашим деньгам, просто кликнув на квике. Так хоть комбинацию клавиш знать надо. 

bEngSystem=false; //язык системы по умолчанию
LangSwitch="%+!";

WshShell=WScript.CreateObject("WScript.Shell");
InitKeys();
KeysSeq=GetData();
if (KeysSeq) EnterData(KeysSeq);

//------------------------------------------------------------------------

function GetData(){
//(Возможно) читаем данные из файла и преобразуем в последовательность клавиш
//"!" означает паузу для специальных клавиш, к-е требуют время обработки
var DataFN, oStream, Data, Pos1, Pos2, Line;

if (0){ //данные в файле
	DataFN='C:/...';
	FSO=new ActiveXObject("Scripting.FileSystemObject"); 
	oStream=FSO.OpenTextFile(DataFN, 1); Line=oStream.ReadAll(); oStream.Close();
	}
else Line='имя:password';

//Tab должен быть и вначале, потому что при фокусировке квика текущее поле - список серверов
Line="{Tab}!"+Line.replace(/:/g, "{Tab}!"+LangSwitch); 
//Переключение языка в самом начале если логин русский
if (bEngSystem) Line=LangSwitch+Line; 
//конвертация русских символов
Line=Line.replace(/[А-Яа-я]/g, RusCB);

return Line;
}

function EnterData(KeysSeq){
var ret;

WScript.Sleep(300); //Пауза позволяет убрать руки от клавиатуры до того, как скрипт начал работать

ret=WshShell.AppActivate("Идентификация пользователя"); if (ret==0) return;
WScript.Sleep(100); 

aSeq=KeysSeq.split('!');
for(var i=0; i<aSeq.length; i++){
	Seq=aSeq[i]; 
	if (Seq!=''){
		WshShell.SendKeys(Seq); WScript.Sleep(100); 
		}
	}

WshShell.SendKeys("{Enter}");
//WshShell.SendKeys("%+"); WScript.Sleep(100); //switch to Russian
//WshShell.SendKeys("{Tab}"); WScript.Sleep(100); 
//WshShell.SendKeys("^V"); WScript.Sleep(100); //paste
}

function RusCB(s){
var n, ch, i;

if (s.length==1){
	ch=s;
	}
else{ //rtf
	//код символа в Ansi
	s=s.substr(2); n=parseInt(s, 16); ch=String.fromCharCode(n);
	}

//Преобразовать в Utf и найти в русских клавишах
i=RusKeys.indexOf(Ansi2Utf(ch));
//Найти соотв. латинскую клавишу
return LatKeys.charAt(i);
}

//------------------------------------------------------------------------

function Ansi2UtfN(Code){
if (Code>=192 && Code<=255) Code+=848;
else if (Code==168) Code=1025; else if (Code==184) Code=1105;
return String.fromCharCode(Code);
}

function Utf2AnsiN(Code){
if (Code>=1040 && Code<=1103) Code-=848;
else if (Code==1025) Code=168; else if (Code==1105) Code=184;
return String.fromCharCode(Code);
}

function Ansi2Utf(Str, bRev){
var Buf='', Ch, Res='', c=0, L, n, f;

L=Str.length; f=(!bRev ? Ansi2UtfN : Utf2AnsiN);
for(n=0; n<L; n++){
	Ch=Str.charCodeAt(n); Buf+=f(Ch); c++;
	if (c>=100){Res+=Buf; Buf=''; c=0;}
	}
return Res+Buf;
}

//------------------------------------------------------------------------

function alert(S){WScript.Echo(S);}

function InitKeys(){
//Проблема в том, что влияет текущий язык в той программе!
//Можно нажимать только английские клавиши. Если надо нажимать русские, надо вычислить какие им соответствуют английские
RusKeys="йцукенгшщзхъфывапролджэячсмитьбю"; LatKeys="qwertyuiop[]asdfghjkl;'zxcvbnm,.";
RusKeys=RusKeys+RusKeys.toUpperCase(); LatKeys=LatKeys+LatKeys.toUpperCase();
}

Есть другие решения: Автологин для Quik 8 x64.
31 Комментарий
  • Karim
    22 марта 2021, 13:11
    Можно и на QLua написать. Просто запускаешь Квик и он сам логинится.

    — Автологин терминала QUIK
    — © qui2dde.ru/
    — Версия: 1.0
    ScriptPath = getScriptPath()
    package.cpath = ScriptPath.."\\w32.dll;"
    local w32 = require(«w32»)

    — логин и пароль для терминала
    QUIK_LOGIN = "****"
    QUIK_PASSW = "****"


    function FindLoginWindow()
    hLoginWnd = w32.FindWindow("", «Идентификация пользователя»)
    if hLoginWnd == 0 then
    hLoginWnd = w32.FindWindow("", «User identification»)
    end
    return hLoginWnd
    end

    timeout = 1000 — таймаут между попытками поиска окна логина
    is_run = true

    function OnStop()
    timeout = 1
    is_run = false
    end

    function main()
    while is_run do
    sleep(timeout)

    if isConnected() == 0 then

    local hLoginWnd = FindLoginWindow()
    if hLoginWnd ~= 0 then

    local hServer = w32.FindWindowEx(hLoginWnd, 0, "", "")
    local hLogin = w32.FindWindowEx(hLoginWnd, hServer, "", "")
    local nPassw = w32.FindWindowEx(hLoginWnd, hLogin, "", "")
    local nBtnOk = w32.FindWindowEx(hLoginWnd, nPassw, "", "")

    w32.SetWindowText(hLogin, QUIK_LOGIN)
    w32.SetWindowText(nPassw, QUIK_PASSW)

    w32.SetFocus(nBtnOk)
    w32.PostMessage(nBtnOk, w32.BM_CLICK, 0, 0)

    end
    end

    end
    end

    • Petr S
      22 марта 2021, 14:05
      Karim, только вот у меня квик при старте сбрасывает все загруженные скрипты то?
      • Karim
        22 марта 2021, 14:40
        Petr S, Сочувствую, у меня все работает нормально.
      • Igr
        22 марта 2021, 15:02
        Petr S, почему? у меня не сбрасывает 
      • Gh0sT555
        23 марта 2021, 16:19
        Petr S, по всей видимости Вы запускаете QUIK не через info.exe, а батником, который удаляет все log и dat файлы, такие батники брокера любят подбрасывать клиентам, считается что ускоряет прогрузку терминала. Только вот инфа по загруженным скриптам тоже в датнике лежит, потому скрипты у Вас и сбрасываются. Запускайте просто сам экзешник, и будет Вам счастье.
    • VpnS
      23 марта 2021, 11:34
      Karim, пишет ошибку
      Syntax error while compiling D:\Quik\login.lua: D:\Quik\login.lua:3: unexpected symbol near '«'
      • Karim
        23 марта 2021, 13:12
        VpnS, У вас в третей строке ошибка. Уберите символ '«'. И не редактируйте скрипт Блокнотом, квик ругается. Используйте Notepad++
        • VpnS
          23 марта 2021, 13:16
          Karim, да, открыл в блокноте
          ругался на первую строку так же, где комментарии к проге --

          этот символ есть в строке local w32 = require(«w32»)
          • Karim
            23 марта 2021, 14:31
            VpnS, А библиотека эта у вас есть w32.dll?
            • VpnS
              23 марта 2021, 14:36
              Karim, создал и сохранил файл в Notepad++, теперь ругается на unexpected symbol near 'В'
              • Karim
                23 марта 2021, 14:43
                VpnS, И в какой строке этот символ?

                • VpnS
                  23 марта 2021, 14:56
                  Karim, я скопировал код сверху
                  только логин и пароль вставил
                  • Karim
                    23 марта 2021, 15:02
                    VpnS, Скрин скинь, как квик ругается. И библиотека w32.dll у вас есть?
                    • VpnS
                      23 марта 2021, 15:19
                      Karim, видимо нет
                      где взять и куда забросить?
                      • Karim
                        23 марта 2021, 15:22
                        VpnS, в личку почту скинь, я отправлю. Или на сайте поищи, адрес в начале скрипта.
                        • VpnS
                          23 марта 2021, 15:28
                          Karim, а скидывать в тело программы квика?
                          • Karim
                            23 марта 2021, 15:34
                            VpnS, zonalka@bk.ru это моя почта. Отправь что нибудь, я скину библиотеку.
                            • VpnS
                              23 марта 2021, 19:12
                              СергейК, поменял кавычки, скрип запустился, ошибок нет
                              но не соединяет, вообще ничего не происходит
  • Lone Wolf
    22 марта 2021, 13:27
    Самый простой способ:
    система\соединение\ 
    поставить галочку восстанавливать связь автоматически.
  • Technotrade
    22 марта 2021, 15:27
    А какой автологин надо запускать чтобы квик сам логинился и автоматом сам по себе начинал деньги на счёт зарабатывать?
    • Karim
      22 марта 2021, 15:30
      Technotrade, это вам нужно робота в Сочах прикупить )))
  • Андрей
    22 марта 2021, 19:18
    Людям приходится выдумывать костыли, в то время как в любых нормальных терминалах запоминание логина пароля есть уже как само собой разумеющееся
  • Тим
    23 марта 2021, 11:05
    Это нарушение правил информационной безопасности!!! Точно такое же как и запоминание пароля терминалом! И еще если пользуетесь пунто свитчером, то ваши пароли также могут утечь в неизвестном направлении.
  • Dmitryy
    23 марта 2021, 11:34
    Тоже делал подобное на C#, логин и пароль хранятся в Environment Variables, код тут — github.com/dmitryy/QuikLauncher

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн