Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2014, 07:56   #21
lollollollol
Форумчанин
 
Регистрация: 23.03.2013
Сообщений: 218
По умолчанию

Всё тоже самое, но на другом компе заработало.

Теперь я не могу понять, как программно определить, верный и пароль.
Как вывести сообщение с текстом ошибки, если пароль не верный?

Я все свойства переменной RDP перемучал уже
lollollollol вне форума Ответить с цитированием
Старый 05.12.2014, 08:19   #22
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Дак вот на строках 2 и 3 вылетает с ошибкой.
У тебя нет такого интерфейса. Забудь про него.
Работай только с AdvancedSettings
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.12.2014, 10:16   #23
5cek
Форумчанин
 
Регистрация: 04.07.2013
Сообщений: 118
По умолчанию

Цитата:
Сообщение от lollollollol Посмотреть сообщение
Всё тоже самое, но на другом компе заработало.

Теперь я не могу понять, как программно определить, верный и пароль.
Как вывести сообщение с текстом ошибки, если пароль не верный?

Я все свойства переменной RDP перемучал уже
там же есть все события
например:
Код:
   procedure OnLoginComplete(Sender: TObject);
   procedure OnLogonError(ASender: TObject; lError: Integer);
OnLoginComplete - Успешная авторизация
OnLogonError - Ошибка авторизации и переменная lError которая сообщает код ошибки, что означают коды можешь посмотреть на мсдн.

Так же приложу свой пример работы с RDP, может поможет:
Открытие сеанс без терминального окна, т.е. когда rdp сервер настроен на запуск одного приложения:
Код:
    rc2:=TMsRDPClient6NotSafeForScripting.Create(nil);
    rc2.Width:=0;
    rc2.Height:=0;
    rc2.Parent:=Form2;
    rc2.Server:=cbbedit1.Text;
    rc2.AdvancedSettings6.RDPPort:=StrToInt(cbbEdit5.Text);
    rc2.RemoteProgram.RemoteProgramMode:=True;
   //Важно что бы уровень аутентификации соответствовал серверному
    rc2.AdvancedSettings6.AuthenticationLevel:=2;
    rc2.UserName:=Edit3.Text;
    rc2.AdvancedSettings6.ClearTextPassword:=Edit4.Text;
    rc2.AdvancedSettings6.RedirectDrives:=True;
    rc2.DesktopWidth:=Screen.Width;
    rc2.DesktopHeight:=Screen.Height;
    rc2.AdvancedSettings6.SmartSizing := true;
    rc2.Connect;
    //Здесь путь к приложению на сервере
    rc2.RemoteProgram.ServerStartProgram('C:\Program Files (x86)\1cv82\8.2.19.90\bin\1cv8s.exe', '', 'C:\Program Files (x86)\1cv82\8.2.19.90\bin\', true, '', false);
Запуск терминального окна
Код:
    frm := TForm1.Create(Form2);
    frm.Caption := 'RemouteRDP - '+cbbedit1.Text+':'+cbbEdit5.Text;
    frm.Show;
    frm.rc2.Server:=cbbedit1.Text; // адрес сервера
    frm.rc2.AdvancedSettings6.RDPPort:=StrToInt(cbbEdit5.Text);
    frm.rc2.UserName:=Edit3.Text; // логин
    frm.rc2.AdvancedSettings6.ClearTextPassword:=Edit4.Text; // пароль
    frm.rc2.AdvancedSettings6.AuthenticationLevel:=2;
    frm.rc2.FullScreen:=False; // Отключаем полноэкранный режим
    frm.rc2.AdvancedSettings6.RedirectDrives:=True;
    frm.rc2.AdvancedSettings6.RedirectClipboard := True;
    frm.rc2.AdvancedSettings6.RedirectPOSDevices := True;
    frm.rc2.AdvancedSettings6.RedirectPrinters := True;
    frm.rc2.AdvancedSettings6.RedirectSmartCards := True;
    frm.rc2.AdvancedSettings6.PublicMode := False;
    frm.rc2.Connect; // подключаемся
5cek вне форума Ответить с цитированием
Старый 05.12.2014, 11:58   #24
lollollollol
Форумчанин
 
Регистрация: 23.03.2013
Сообщений: 218
По умолчанию

Угу, про
Цитата:
procedure OnLoginComplete(Sender: TObject);
знаю, но я не кидаю форму на компонент, а создаю через переменную
Код:
RDP: TMsRdpClient7;
И не могу понять как отловить это событие.
Вот так оно описано
Код:
    property OnLoginComplete: TNotifyEvent read FOnLoginComplete write FOnLoginComplete;
Как дальше с ним работать?



Пытался так, не срабатывает

Код:
procedure TMsRdpClient7OnLogonError(ASender: TObject; lError: Integer);
begin
  Form1.Memo1.Lines.Add(Inttostr(RDP.Connected)+':'+inttostr(lError));

end;

Последний раз редактировалось lollollollol; 05.12.2014 в 12:18.
lollollollol вне форума Ответить с цитированием
Старый 08.12.2014, 00:54   #25
lollollollol
Форумчанин
 
Регистрация: 23.03.2013
Сообщений: 218
По умолчанию

актуально...
lollollollol вне форума Ответить с цитированием
Старый 08.12.2014, 10:21   #26
5cek
Форумчанин
 
Регистрация: 04.07.2013
Сообщений: 118
По умолчанию

Цитата:
Сообщение от lollollollol Посмотреть сообщение
Угу, про

знаю, но я не кидаю форму на компонент, а создаю через переменную
Код:
RDP: TMsRdpClient7;
И не могу понять как отловить это событие.
Вот так оно описано
Код:
    property OnLoginComplete: TNotifyEvent read FOnLoginComplete write FOnLoginComplete;
Как дальше с ним работать?



Пытался так, не срабатывает

Код:
procedure TMsRdpClient7OnLogonError(ASender: TObject; lError: Integer);
begin
  Form1.Memo1.Lines.Add(Inttostr(RDP.Connected)+':'+inttostr(lError));

end;
Для того что бы отловить, создаешь процедуру с такими же переменными:
К примеру моя процедура OnLoginComplete:
создал её в public формы, название дал такое же:
в разделе public:
Код:
  procedure OnLoginComplete(Sender: TObject);
описание:
Код:
procedure TForm2.OnLoginComplete(Sender: TObject);
var Str: String;
begin
  if Sender is TMsRDPClient6NotSafeForScripting then
  begin
    Str := (Sender as TMsRDPClient6NotSafeForScripting).Server+':'+
    IntToStr((Sender as TMsRDPClient6NotSafeForScripting).AdvancedSettings6.RDPPort)+
    '('+IntToStr((Sender as TMsRDPClient6NotSafeForScripting).Tag)+')';
    AddToLog(Str+': УСпешная авторизация по адрессу ');
  end;
end;
Далее при создании класса RDP, делаешь назначение для процедуры класса:
Код:
frm.rc2.OnLoginComplete := OnLoginComplete;
Готово.

Последний раз редактировалось 5cek; 08.12.2014 в 10:27.
5cek вне форума Ответить с цитированием
Старый 08.12.2014, 14:27   #27
lollollollol
Форумчанин
 
Регистрация: 23.03.2013
Сообщений: 218
По умолчанию

Спасибо, теперь осталось научиться отловить ошибку, и получить её код.

Когда ввожу не верный логин пароль, событие OnLogonError НЕ отрабатывает, а когда ввожу ВЕРНЫЙ, отрабатывает, сообщая код -2.

Т.е. я смотрю не то событие.

Какое событие отвечает за ОШИБКУ авторизации?
lollollollol вне форума Ответить с цитированием
Старый 08.12.2014, 16:40   #28
5cek
Форумчанин
 
Регистрация: 04.07.2013
Сообщений: 118
По умолчанию

Цитата:
Сообщение от lollollollol Посмотреть сообщение
Спасибо, теперь осталось научиться отловить ошибку, и получить её код.

Когда ввожу не верный логин пароль, событие OnLogonError НЕ отрабатывает, а когда ввожу ВЕРНЫЙ, отрабатывает, сообщая код -2.

Т.е. я смотрю не то событие.

Какое событие отвечает за ОШИБКУ авторизации?
OnLogonError и отвечает, покажи как делаешь.
5cek вне форума Ответить с цитированием
Старый 08.12.2014, 17:50   #29
lollollollol
Форумчанин
 
Регистрация: 23.03.2013
Сообщений: 218
По умолчанию

Ну всё в точности как показано тобою. Он отрабатывает только если авторизация успешна, и передаёт -2.


Т.е. событие отлавливается. Но только в момент успешной авторизации.
Код:

  RDP.OnLogonError:=OnLogonError;


procedure TForm1.OnLogonError(ASender: TObject; lError: Integer);
var
  Str: String;
begin
  if ASender is TMsRdpClient7 then //Вот сюда ставлю бряк, но он срабатывает только при успешной авторизации.
  begin
    MessageBox(0,Pchar((ASender as TMsRdpClient7).Server),Pchar(inttostr(lError)),0);
  end;
end;
lollollollol вне форума Ответить с цитированием
Старый 09.12.2014, 12:37   #30
5cek
Форумчанин
 
Регистрация: 04.07.2013
Сообщений: 118
По умолчанию

Я вспомнил что ты возможно используешь терминальный вывод, т.е. у тебя открывается не просто программа с сервера, а ты открываешь именно рабочий стол, если это так, то тебе не вывести ошибку авторизации, её покажет удаленный рабочий стол.
А -2 действительно есть такое, у меня тоже иногда проскакивает, на неё лучше условие поставить.
5cek вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как задать эти две даты...не могу понять что за 100-наносекундный интервал...и что это за дата 1 января 0001 года der90 PHP 4 25.04.2014 13:46
не могу понять, что за ошибка (С++) mpdasa Помощь студентам 1 25.06.2012 19:56
не могу понять что не так aferistz Общие вопросы C/C++ 5 23.09.2010 02:21
не могу понять, что за скрипт ZET78 JavaScript, Ajax 0 18.08.2010 00:10
Не могу понять, что требуется? Shuraken Общие вопросы Delphi 2 10.08.2007 11:41