正如主题所说,我试图在delphi中使用此代码连接到服务器
procedure TmainF.Button1Click(Sender: TObject);
var
rdp1 : TMsRdpClient7NotSafeForScripting ;
begin
rdp1 := TMsRdpClient7NotSafeForScripting.Create(self);
rdp1.Parent := mainF;
rdp1.Server:=server_name;
rdp1.UserName := user.Text;
rdp1.AdvancedSettings7.ClearTextPassword := password.Text;
rdp1.ConnectingText := 'connecting';
rdp1.DisconnectedText := 'disconnected';
rdp1.AdvancedSettings7.AuthenticationLevel:=0;
rdp1.AdvancedSettings7.EnableCredSspSupport:=true;
rdp1.Connect;
end;
代码工作正常但是如果用户输入了错误的用户名或密码
rdp对象显示远程桌面登录提示框以重新输入用户名或密码,如图像
我想在连接之前验证用户名和密码 或者阻止此框并显示来自我的应用的自定义消息
我尝试使用OnLogonError()程序,但它没有触发任何代码 我读了这个Question,但代码是c#,我与.getocx()混淆了,我无法在(MSTSCLib_TLB.pas)中找到(PromptForCredentials)
任何帮助:( ??
抱歉我的英语不好。答案 0 :(得分:2)
接口IMsRdpClientNonScriptable5
具有以下方法:
Get_AllowPromptingForCredentials()
Set_AllowPromptingForCredentials()
如果您使用参数设置为Set_AllowPromptingForCredentials()
来致电false
,则不会显示该对话框。
至于如何获取此接口的实例 - 简单,您只需转换RDP客户端对象的ControlInterface
:
Ircns5 := rdp1.ControlInterface as IMsRdpClientNonScriptable5;
if Assigned(Ircns5) then
Ircns5.Set_AllowPromptingForCredentials(False);
答案 1 :(得分:0)
您可以在建立连接之前将用户名和密码传递给Windows API函数“LogonUser”。为此,必须在用户的网络上提供身份验证实体。
{$APPTYPE CONSOLE}
uses SysUtils, Windows;
var
hToken : THandle;
begin
if (ParamCount <> 3) then
begin
WriteLn ('LogonUserTest.exe [user name] [domain] [password]');
Halt ($FF);
end; { if }
try
Win32Check (LogonUser (PChar (ParamStr (1)), PChar (ParamStr (2)),
PChar (ParamStr (3)), Logon32_Logon_Interactive,
LOGON32_PROVIDER_DEFAULT, hToken));
WriteLn ('LogonUser success');
CloseHandle (hToken);
except
on E: Exception do
Writeln (E.ClassName, ': ', E.Message);
end; { try / except }
end.