Работая с Motorola MC9190-g под управлением Windows CE 6.0 (WinCE 6.0), при Hard Reset сбивались настройки и сохраненный логин и пароль на подключение к RDP(Remote Desktop Protocol). Забить в пароль в файл RDP, нам не позволяет политика безопасности Microsoft. Выход из положения был найден маленькой программкой написанной на Lazarus.
Возможно код выглядит немного грубо, но вполне работает:
... var pi:TPROCESSINFORMATION; rdpname:HWND; begin CreateProcess( PWideChar('cetsc.exe'), 'Наш.rdp', //Путь к RDP с настройками nil,nil,False, CREATE_NEW_CONSOLE, nil, nil, nil, pi ); {Не нашел аналог WaitForInputIdle для Lazarus, так что просто ждем 3 секунды на запуск RDP и прорисовку окна} sleep(3000); rdpname:=findwindow(nil,'Remote Desktop Connection'); //Определяем Handle окна SendMessage(GetDlgItem(rdpname,1003),BM_SETCHECK, BST_CHECKED,0); // Запоминаем логин и пароль SetWindowText(GetDlgItem(rdpname,1000),'Login'); //Логин SetWindowText(GetDlgItem(rdpname,1002),'Password'); //Пароль PostMessage(GetDlgItem(rdpname,1), WM_LBUTTONDOWN, 0, 0); //Нажимаем PostMessage(GetDlgItem(rdpname,1), WM_LBUTTONUP, 0, 0); //Клавишу ОК SendMessage(GetDlgItem(RDPName,14002),BM_SETCHECK, BST_CHECKED,0); //2-e окно CheckBox PostMessage(GetDlgItem(RDPName,14004), WM_LBUTTONDOWN, 0, 0); //2-e окно Нажимаем PostMessage(GetDlgItem(RDPName,14004), WM_LBUTTONUP, 0, 0); //2-e окно Клавишу ОК SendMessage(GetDlgItem(RDPName,13488),BM_SETCHECK, BST_CHECKED,0); //3-e Окно CheckBox end; ...
Данный код запускает наш заранее подготовленный RDP файл, далее вставляет логин и пароль, отмечает CheckBox о сохранении пароля.
Теперь вместо RDP окна запускайте данное приложение и пользователя никогда ненужно будет самому вводить данные для подключения.
Если у вас есть предложения или замечания по коду, излагайте
Сохранение логина и пароля RDP на WinCE обновлено: 4 апреля, 2016 автором:
Добрый день, Олег!
Очень заинтересовало ваше решение сохранения логина/пароля.
Сам к разработке приложений отношения не имею но все же попробовал установить Lazarus, установил доп. пакет cross-i386.
В код изменений кроме имени Rdp, логина и пароля не вносил.
В параметрах сборки Lazarus выставил:
библиотеки виджетов LCL — wince
целевая ОС — wince
целевой CPU — arm
В параметрах проекта целевая ОС wince, семейство процессоров ARM.
Получаю ошибку вида «Fatal: Невозможно найти system, используемый в project1.»
Саму программу вижу впервые и сам разобраться не могу, а решение ваше как нельзя кстати подходит для меня (терминалов много и постоянное забивание паролей — большая проблема).
Добрый день Александр!
Вы пытаетесь запустить данный проект на своей ОС.
Вам необходимо скомпелировать проект и полученный exe файл скопировать на терминал и запустить его уже непосредственно на терминале.
UPD:
Скомпилировать получилось. Поставил х32 lazarus.
Приложение выдает ошибку invlid connection file specified. Сам файл положил рядом с исполняемым.
Подскажите в каком виде путь к файлу в коде указать.
(ТСД немного другие кстати 3190)
все сам поправил заработало.
теперь есть идея сделать так чтоб приложение тянуло логин и пароль из ini-файла чтоб под каждую машину свое приложение не делать
Рад что у вас все вышло. Я когда-то потратил на это уйму времени.
Я так и делал. И на каждом терминале лежал свой файл с логином и паролем.
Если будут затруднения, буду рад помочь.
не смог пока найти информации на форумах как сделать так чтоб прога цепляла логин и пароль из инишника.
если подскажите как это провернуть буду крайне благодарен!
Считываем данные примерно так:
uses
IniFiles;
Procedure LoadOptions; //Загружаем настройки
var
Options:TIniFile;
begin
Options:=TIniFile.Create('\Application\options.ini');
LoginString:=Options.ReadString('TSD','Login','Error');
PasswordString:=Options.ReadString('TSD','Password','Error');
Options.Free;
end;
Структура ini файла такая:
[TSD]
LoginString=Логин
PasswordString=Пароль
Спасибо!
Немного видоизменил код, у меня заработало так:
Options:=TIniFile.Create(‘\Application\Rdpapp\Options.ini’);
LoginStringPWC:=PWideChar(WideString(Options.ReadString(‘TSD’,’Login’,’Error’)));
PasswordStringPWC:= PWideChar(WideString(Options.ReadString(‘TSD’,’Password’,’Error’)));
Options.Free;
Очень сильно помогли!
Возникла проблема с новыми терминалами mc32N0 которые на ce7 работают.
При запуске приложения дают ошибку:
EAccessViolation at $00011BCC
UPD:
Обнаружил что проблема исчезает если логин и пароль указаны непосредственно в коде.
Проблема исчезает когда удаляю из
uses IniFiles
так понял почему-то память не хочет обращаться к инишнику
Добрый день.
Подскажите пож-ста, куда необходимо вставить ваш код?
Установил Лазарус, открыл Form1 и не могу понять, что делать дальше.
В программировании не бум бум((((
До запуска приложения дело то как раз даже не доходит.
При попытке компиляции выдает ошибки типа «Identifier not found» и «error in type definition»
думаю что не правильно сам компилятор настроил.
если не сложно можете пошагово расписать как себе настроили Lazarus для компиляции под winCE и нужно ли еще что-либо кроме самого лазаруса и аддона.
спасибо!
Александр с WinCE 7 не работал, подсказать не смогу. Попробуйте вместо ini файлов использовать обычные тестовые файлы.
Добрый день, Олег!
Взял ваш код скомпилировал его без ошибок.
Пробую запускать на MC-9090 с wince5.0
Файл запускается, но отрабатывает только запуск rdp клиента, логин/пароль не вставляет и соответственно не нажимает клавишу «ОК».
В чем может быть проблема?
Добрый день.
Убедитесь, что имя окна у RDP клиента «Remote Desktop Connection»