我正在使用VS2017,并使用Windows Forms应用程序为各种RDP设置文件创建了一个非常简单的‘启动器’。这只是调用直接链接到.rdp文件的Process.Start,或者直接链接到mstsc.exe
应用程序(和RDP会话)在标准PC上显示并正常工作。然而,我在高DPI设备上遇到了一个问题,比如Surface Books/pros。
RDP客户端不能正确伸缩是一个众所周知的问题,我们已经使用manifest/reg更改方法修复了这个问题。这已确认工作正常。双击.rdp配置文件也可以正常工作。
( https://www.blackforce.co.uk/2016/04/18/remote-desktop-rdp-resolution-on-a-surface-book )
我自己的应用程序也能以正确的比例正确显示。然而,当我使用Process.Start启动RDP时,RDP客户端的伸缩性很差,就像清单修复之前的情况一样。我试着单独打开客户端,使用.rdp文件,结果是一样的。我手动打开相同的.rdp文件,而不是通过我的应用程序,客户端的缩放是正确的。
任何人都可以复制它,或者建议为什么mstsc清单文件在以这种方式启动时会被忽略?我也尝试过使用ProcessStartInfo来设置UseShellExecute,但结果仍然是一样的。
发布于 2017-10-20 11:12:33
Windows桌面应用程序(如RDP )可以通过清单设置或在初始化期间通过API调用指定DPI缩放模式("DPI感知模式“)。当应用程序所在的显示器的比例因子发生变化时,它们的行为就会有所不同。您可以阅读有关此here的更多信息。
我推测(我还没有尝试过证实这一猜测) RDP进程正在使用清单来声明它的DPI感知(根据Monitor DPI感知),并且当您通过Process.Start启动一个进程时,指定的应用程序的DPI感知正在改变……可能与调用进程的DPI感知有关?
我会使用系统内部流程资源管理器来确定RDP应用程序按预期运行时的DPI感知,然后将其与从应用程序启动时RDP应用程序的DPI感知进行比较。如果是这种情况,请查看是否可以指定要在Process.Start中启动的进程的DPI感知。您可以尝试的另一件事是将WinForms应用程序的DPI感知设置为与RDP应用程序(每个监视器)相同的DPI感知,看看这是否有帮助。
此外,我假设您运行的操作系统大于8.1,因为在8.1中引入了对每个监视器的支持。
https://stackoverflow.com/questions/46811211
复制相似问题