首页 > 代码库 > delphi多屏显示区域查找
delphi多屏显示区域查找
windows下多屏支持一个简单的思路就是找到显示器的区域(EnumDisplayMonitors),并把相应的窗口移动到目标区域(windows API: MoveWindow)。下面是一个简单的查找显示区域方法,gRects为查找到的显示区域,gMCount为查找到的个数。
1 unit EnumMonitor; 2 3 interface 4 uses 5 MultiMon, windows; 6 const 7 MONITOR_MAX_COUNT = 10; //显示器个数上限 8 9 var10 //显示区域11 gRects: array[0..MONITOR_MAX_COUNT - 1] of TRect;12 //查找到的显示器个数13 gMCount: Integer = 0;14 15 //刷新显示器信息16 procedure RefreshMontor;17 18 implementation19 20 var21 isFirst: Boolean = True; //是否是第一个,查找时用到22 23 function EnumMon(AMonitor: HMONITOR; ADC: HDC; ARect: PRect; AParam: LPARAM): Boolean; stdcall;24 var25 info: MONITORINFO;26 begin27 Result := True;28 //如果显示器个数超过预设个数,停止查找29 if gMCount >= MONITOR_MAX_COUNT then30 begin31 Result := false;32 Exit;33 end;34 35 info.cbSize := SizeOf(MONITORINFO);36 GetMonitorInfo(AMonitor, @info);37 //如果是主显示器,判断是不是第一次查找,如果是第二次,则结束查找38 if(info.dwFlags = MONITORINFOF_PRIMARY)then39 begin40 if isFirst then41 begin42 isFirst := false;43 gMCount := 1;44 gRects[0] := info.rcMonitor;45 Result := True;46 Exit;47 end48 else begin49 //标志复位50 isFirst := true;51 Result := false;52 end53 end;54 55 gRects[gMCount] := info.rcMonitor;56 Inc(gMCount);57 end;58 59 procedure RefreshMontor;60 begin61 gMCount := 0;62 isFirst := true;63 FillChar(gRects, SizeOf(gRects), 0);64 EnumDisplayMonitors(0, nil, EnumMon, 0);65 end;66 67 initialization68 RefreshMontor;69 70 finalization71 gMCount := 0;72 FillChar(gRects, SizeOf(gRects), 0);73 end.
delphi多屏显示区域查找
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。