作为启动 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
开头的引导应用程序来重现它,该应用程序使用ShellExecute
和SW_MAXIMIZE
,但将Form1
的边框样式设置为Fixed Dialog
不起作用——这是一个线索。以上是关于作为启动 RDP 程序运行时如何停止初始形式最大化?的主要内容,如果未能解决你的问题,请参考以下文章
Windows Servis 应用无法识别 RDP 会话上的智能卡