Сохранение логина и пароля RDP на WinCE

1

Работая с 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 окна запускайте данное приложение и пользователя никогда ненужно будет самому вводить данные для подключения.

Если у вас есть предложения или замечания по коду, излагайте smile

Сохранение логина и пароля RDP на WinCE обновлено: 4 апреля, 2016 автором: Oleg E.
Share

16 комментариев “Сохранение логина и пароля RDP на WinCE

  1. Добрый день, Олег!
    Очень заинтересовало ваше решение сохранения логина/пароля.
    Сам к разработке приложений отношения не имею но все же попробовал установить 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 и не могу понять, что делать дальше.
        В программировании не бум бум((((

  2. До запуска приложения дело то как раз даже не доходит.
    При попытке компиляции выдает ошибки типа «Identifier not found» и «error in type definition»
    думаю что не правильно сам компилятор настроил.
    если не сложно можете пошагово расписать как себе настроили Lazarus для компиляции под winCE и нужно ли еще что-либо кроме самого лазаруса и аддона.
    спасибо!

  3. Александр с WinCE 7 не работал, подсказать не смогу. Попробуйте вместо ini файлов использовать обычные тестовые файлы.

  4. Добрый день, Олег!
    Взял ваш код скомпилировал его без ошибок.
    Пробую запускать на MC-9090 с wince5.0
    Файл запускается, но отрабатывает только запуск rdp клиента, логин/пароль не вставляет и соответственно не нажимает клавишу «ОК».
    В чем может быть проблема? sad

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *