作为启动 RDP 程序运行时如何停止初始形式最大化?

Posted

技术标签:

【中文标题】作为启动 RDP 程序运行时如何停止初始形式最大化?【英文标题】:How to stop initial form maximising when run as startup RDP program? 【发布时间】:2012-03-31 13:56:01 【问题描述】:

我的 VB6 应用程序中的启动表单在终端服务(远程桌面)会话中启动时表现异常,主机和客户端都是 XP Pro 计算机。表单本来是要居中的,但它实际上是最大化的,它的内容在左上角,看起来很奇怪。请注意,仅当应用程序路径用于 RDP 客户端“程序”选项卡下的“连接时启动以下程序”字段时才会发生这种情况。

显然,如果您正在运行具有 TS 配置工具的服务器,则有一个解决方案:http://www.windows-server-answers.com/microsoft/Windows-Terminal-Services/29117908/start-program-on-connection--it-isnt-centered.aspx

但两台机器都是 XP Pro,所以我无法获得 TS 配置。

在此处查看示例 VB6 项目:Link to zip file on Google Docs

如果您只是创建上述项目的EXE(正常运行时以居中的非最大化形式运行),并在程序选项卡下设置“连接时启动以下程序”字段时使用此EXE路径使用 RDP 客户端,您会发现应用程序以最大化的形式启动,其内容位于左上角。

【问题讨论】:

【参考方案1】:

显然终端服务器正在使用ShellExecute 函数启动您的启动应用程序,将SW_MAXIMIZE 传递给nShowCmd 而不是SW_SHOWDEFAULT

您可以在Form_Resize 事件中像这样通过简单的 hack 来修复它

Option Explicit

Private m_bActivated            As Boolean

Private Sub Command_Click()

Me.Text = "HELLO"

End Sub

Private Sub Form_Resize()
    If Not m_bActivated Then
        m_bActivated = True
        WindowState = vbNormal
    End If
End Sub

【讨论】:

您是如何确定正在传递 SW_MAXIMIZE - Process Explorer?如果他们被告知,MS 会在更新中解决这个问题吗? 我猜到了。没有时间使用以TestForRDP.exe 开头的引导应用程序来重现它,该应用程序使用ShellExecuteSW_MAXIMIZE,但将Form1 的边框样式设置为Fixed Dialog 不起作用——这是一个线索。

以上是关于作为启动 RDP 程序运行时如何停止初始形式最大化?的主要内容,如果未能解决你的问题,请参考以下文章

Windows Servis 应用无法识别 RDP 会话上的智能卡

使用XP客户端访问远程桌面WEB主机时,提示“此RDP文件已损坏 远程连接无法启动”原因及如何解决?

在启动时将 Qt 应用程序作为 Linux 守护程序运行

如何添加启动 RDP 会话的实验室流程步骤?

如果应用程序正在启动,如何停止后台任务?

tomcat 内存大小配置