4

我正在尝试使用 c# 通过远程桌面登录服务器。我可以使用AxMSTSCLib下面的和代码启动连接。但是,我被困在我们域的安全通知上。

手动登录时,需要您在登录完成前单击通知上的“确定”。我一直无法通过我的应用程序找到与此确定按钮进行交互的方法。我已经尝试过的变体SendKeys,使用互操作服务发送键事件,找到光标位置并发送鼠标点击事件......

我在这里没有想法了。

rdp.Server = server;
rdp.Domain = domain;
rdp.UserName = userName;

IMsTscNonScriptable secured = (IMsTscNonScriptable)rdp.GetOcx();
secured.ClearTextPassword = password;
rdp.StartConnected = 1;

rdp.Connect();

谢谢

4

2 回答 2

2

好吧,有一种方法可以按照您的要求进行。您需要下载一份 Windows 7 Embedded Standard ( WES7 wSP1 )。WES7 包含其他版本的 Windows 7 所没有的东西——对话框过滤器。它作为服务运行,并允许您指定要自动执行的某些窗口事件,而无需用户交互。

Dialog Filter Editor 随 Windows Embedded Standard 7 工具一起安装在 EmbeddedSDK\bin 文件夹中。

你所要做的就是:

  1. 通过将必要的对话框过滤器文件复制到 C:\Windows\System32,将服务添加到您的 Windows。有 x86 和 x64 版本,所以选择正确的架构。

  2. 注册文件,使服务自动运行。

  3. 将使用编辑器创建的ConfigurationList.xml文件添加到C:\ProgramData\Microsoft\DialogFilter。此位置默认隐藏,因此请确保在 Windows 资源管理器中显示隐藏文件并取消隐藏受保护的系统文件。

我实际上已经创建了 ConfigurationList.xml 文件,因此您可以简单地复制以下代码并将其保存为“ConfigurationList.xml”:

<?xml version="1.0" encoding="utf-8"?> 
<CL:dialogs xmlns:CL="urn:Dialogs"> 
    <dialog> 
    <ProcessImageName>rundll32.exe</ProcessImageName> 
    <Title>Remote Desktop Connection</Title> 
    <Class>#32770</Class> 
    <Buttons> 
      <Button>OK</Button> 
      <Button>Cancel</Button> 
      <Button>Close</Button> 
    </Buttons> 
    <Actions> 
      <Action>OK</Action> 
    </Actions> 
  </dialog> 
</CL:dialogs>

如您所见,该操作设置为在建立 RDP 连接时弹出的 RDP 对话框中自动按下OK 按钮。

有关直接来自 MS 的对话框过滤器的更多信息: https ://msdn.microsoft.com/en-US/library/ff794135(v=winembedded.60).aspx

于 2015-11-05T09:42:52.380 回答
1

刚刚找到了一种更简单的方法:有一个名为ClickOff的免费小应用程序,它的工作方式与 Windows Embedded Standard 7 DialogFilter非常相似。

您可以在此处下载ClickOff v1.90 。

安装ClickOff后,您可以定义要捕获的窗口以及单击其中的哪个按钮。唯一的问题是您必须将其添加到您的启动应用程序中。

我已经创建了一个 clickoff.lst 文件,该文件在 30 秒 RDP 超时弹出窗口上单击确定。该文件应放在C:\Users\USERNAME\AppData\Roaming\ClickOff中。这是文件的内容:

1.900
WINDOWTITLE="Remote Desktop Connection" BUTTONTEXT="OK" MSGTEXT="CompName\\UserName wants to connect to this machine.\r\n\r\nClick OK to disconnect your session immediately or click cancel to stay connected.\r\n\r\nOtherwise, you will be disconnected in 30 seconds." BUTTONID="1" MSGID="65535" DLGID="0" CLKEVENT="17" CLKMETHOD="3" TIMESCLICKED="0" WAIT="0" BPOSX="0" BPOSY="0" ;

干杯。

于 2016-03-03T15:45:02.343 回答