blog by ficti0n: Как запустить Radmin Viewer из своей программы с авто вводом имени и пароля (код Delphi 7)

вторник, 30 сентября 2014 г.

Как запустить Radmin Viewer из своей программы с авто вводом имени и пароля (код Delphi 7)

  Понадобилось мне запускать из своей программы Radmin Viewer 3.4 с автоматическим вводом имени и пароля. В стандартные функции у радмина предусмотрено только задание хоста и порта для подключения.

Выдержка с оф сайта радмина:
 "
/connect
Соединение с удаленным компьютером без использования адресной книги.
/connect:<адрес>:<порт>
Где: 
адрес 
- IP адрес удаленного компьютера или DNS имя. 
порт 
- номер порта, который использует Radmin Server, установленный на удаленном компьютере.
Пример:
/connect:212.44.120.10:4899
"

Передать имя пользователя и пароль разработчики посчитали небезопасным. 

Суть метода взаимодействия с чужими окнами из своего приложения не нова и заключается  в том, что нужно  в появившееся окно авторизации радмина вставить в соответствующие поля имя пользователя и пароль.

Procedure Input_to(ip:string);
 var
  wn,wn2: HWND;
begin
    sleep(1000);
//найти окно с именем "Система безопасности Radmin: ip"
    wn:=FindWindow(nil,PChar('Система безопасности Radmin: '+ip)); 
//найти окно в имени класса которого встречается 'Edit', 1й по счету
    wn2:=SearchChildWND(wn,'Edit',Pchar(rpass),0); 
//и поместить туда имя пользователя
    if wn2 <>0 then SetWindowText_(wn2,Pchar(ruser),length(ruser)); 
 
//найти окно с именем "Система безопасности Radmin: ip"
    wn:=FindWindow(nil,PChar('Система безопасности Radmin: '+ip)); 
//найти окно в имени класса которого встречается 'Edit', 2й по счету  
    wn2:=SearchChildWND(wn,'Edit',Pchar(rpass),1); 
//и поместить туда пароль
    if wn2 <>0 then SetWindowText_(wn2,Pchar(rpass),length(rpass));
//Нажимаем Enter
    keybd_event(VK_RETURN , 0, 0, 0); //Нажатие Enter.
    keybd_event(VK_RETURN , 0, KEYEVENTF_KEYUP, 0); //Отпускание Enter.
end;
Сама программа запускается так:
ShellExecute(Handle, 'open', Pchar('Путь к radmin,exe'), Pchar('/connect:IP:4899'), nil, SW_SHOWNORMAL);
З.Ы.  Был найден vbs скрипт, который это делал, но я уже накодил свою процедуру. Продублирую и скрипт тут на всякий случай.


set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "radmin.exe /connect:10.0.0.1 /locolor /updates:10 /fullscreen"
WScript.Sleep 4000
WshShell.AppActivate "Enter password for 10.0.0.1"
WScript.Sleep 500
WshShell.SendKeys "yourpassword"
WshShell.SendKeys "{ENTER}"