Windows 如何确定应用程序运行在哪个屏幕/监视器上?
在多屏幕系统中,我希望我的一些应用程序能够记住上次运行的屏幕,并再次在同一屏幕上运行Windows 如何确定应用程序运行在哪个屏幕/监视器上?,windows,delphi,delphi-2007,multiscreen,Windows,Delphi,Delphi 2007,Multiscreen,在多屏幕系统中,我希望我的一些应用程序能够记住上次运行的屏幕,并再次在同一屏幕上运行 我如何确定当前屏幕/监视器是什么,记住屏幕可能具有不同的分辨率?这些程序是用Delphi 2007编写的。您可以使用该方法获取任何形式的当前监视器。该方法将返回一个包含您需要的所有信息的类 uses MultiMon; ... ... ... var LMonitor : TMonitor; LMonitorInfo : TMonitorInfoEx; begin ZeroMemory(@LMon
我如何确定当前屏幕/监视器是什么,记住屏幕可能具有不同的分辨率?这些程序是用Delphi 2007编写的。您可以使用该方法获取任何形式的当前监视器。该方法将返回一个包含您需要的所有信息的类
uses
MultiMon;
...
...
...
var
LMonitor : TMonitor;
LMonitorInfo : TMonitorInfoEx;
begin
ZeroMemory(@LMonitorInfo, SizeOf(LMonitorInfo));
LMonitorInfo.cbSize := SizeOf(LMonitorInfo);
LMonitor:=Screen.MonitorFromWindow(Self.Handle); //pass the handle of the form
if not GetMonitorInfo(LMonitor.Handle, @LMonitorInfo) then
RaiseLastOSError;
ShowMessage(Format('The form is in the monitor Index %d - %s', [LMonitor.MonitorNum, LMonitorInfo.szDevice]));
end;
VCL公开这些信息,例如通过表单的属性。这是一种公开监视器的各种属性的类型:其编号、是否为主监视器、其边界和工作矩形等 不过,您要做的只是将表单恢复到以前运行的位置。我认为你不需要记住监视器信息。只需执行以下操作:
GetWindowPlacement
和SetWindowPlacement
李>
David是正确的,因为我不需要监视器信息来做我想做的事情。只是为了文档。DeskTopWidth和DeskTopHeight给出了桌面大小
我现在在家,只有两个分辨率相同的屏幕。如果我有4个屏幕,其中一个分辨率不同,那么看看工作中会发生什么将会很有趣。如果这不起作用,那么我可能还必须查看监视器的信息。如果有人想知道为什么分辨率不同,第四个是投影仪。不要忘记应用程序可以在多个屏幕上运行。在过去,我简单地捕获了应用程序的位置和大小,以及它是否在最大限度地运行——在应用程序启动时,只需恢复大小和位置。当然,在应用程序启动时,您需要查看结果是否会显示在屏幕上,以便它们是否在不再连接的屏幕上运行,以避免从当前桌面启动应用程序。我也完全按照Gary所做的做。不需要记住你的窗口在哪个监视器上,记住它在哪里。考虑使用GET/StWistWoWoLoad。这就解决了这些问题。我认为Get/SetWindowPlacement是一个不错的选择,因为它已经处理了bullet#3。