
在 Delphi 中,如果你的电脑连接了多个显示器,可以通过以下步骤判断某个程序在哪个显示器上运行。
方法概述:
- 获取程序窗口的位置(例如窗体的 
Left、Top坐标)。 - 使用 
Screen.MonitorFromWindow函数来确定该窗口所属的显示器。 
关键概念:
- TMonitor:表示一个显示器,包含该显示器的边界(
BoundsRect)和工作区域(WorkAreaRect)。 - Screen.Monitors[]:存储当前连接的所有显示器。
 - MonitorFromWindow:根据窗口句柄获取所属的显示器。
 
示例代码:
假设我们需要判断当前窗体 Form1 所在的显示器。
uses
  Winapi.Windows, Vcl.Forms, Vcl.Controls, System.SysUtils;
procedure TForm1.CheckMonitor;
var
  Monitor: TMonitor;
  MonitorIndex: Integer;
begin
  // 获取窗体所在的显示器
  Monitor := Screen.MonitorFromWindow(Self.Handle, mdNearest);
  // 获取显示器的索引
  MonitorIndex := Monitor.MonitorNum;
  // 输出显示器信息
  ShowMessage(Format('The form is running on monitor %d with resolution %dx%d',
    [MonitorIndex, Monitor.BoundsRect.Width, Monitor.BoundsRect.Height]));
end;
 
解释:
Screen.MonitorFromWindow(Self.Handle, mdNearest):这是核心函数。Self.Handle代表窗体句柄,mdNearest表示如果窗口跨多个显示器,则选择最近的显示器。Monitor.MonitorNum:获取显示器的索引号。Monitor.BoundsRect:获取显示器的分辨率和位置。
显示器检测选项:
mdNearest:获取最近的显示器。mdPrimary:获取主显示器。
获取当前所有显示器的信息:
如果你想列出所有连接的显示器并获取相关信息,可以通过 Screen.Monitors[] 来完成。
procedure ListAllMonitors;
var
  I: Integer;
begin
  for I := 0 to Screen.MonitorCount - 1 do
  begin
    ShowMessage(Format('Monitor %d: Resolution = %dx%d, Work Area = %dx%d',
      [I + 1,
      Screen.Monitors[I].BoundsRect.Width,
      Screen.Monitors[I].BoundsRect.Height,
      Screen.Monitors[I].WorkAreaRect.Width,
      Screen.Monitors[I].WorkAreaRect.Height]));
  end;
end;
 
 
总结:
- 使用 
Screen.MonitorFromWindow判断当前窗口运行在哪个显示器上。 - 通过 
Screen.Monitors[]获取所有显示器的信息。 



















