几种获取屏幕大小的方式。

今天要把一个窗口显示到屏幕的中间,以前貌似做过这个功能,但是已经忘了,于是在网上搜了下,知道了如下三种方式:

方式一:

	CRect   rect; 
	::SystemParametersInfo(SPI_GETWORKAREA,   0,   &rect,   0);


方式二:

	int x = ::GetSystemMetrics(SM_CXSCREEN);
	int y = ::GetSystemMetrics(SM_CYSCREEN);


方式三:

	RECT   rc   =   {0}; 
	::GetClientRect(::GetDesktopWindow(),   &rc);



其中方式二和方式三获取的都是整个屏幕的大小(包括了任务栏等)。 方式一获取的是工作区域的大小(除去了任务栏等)。


转载于:https://www.cnblogs.com/monotone/archive/2012/10/17/2770599.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是获取多个屏幕宽高的几种方法: 1. 使用 System.Windows.Forms.Screen 类 可以使用 System.Windows.Forms.Screen 类来获取所有显示器的屏幕大小和位置信息。这个类的 AllScreens 属性返回一个 Screen 数组,其中包含每个显示器的信息。可以使用 WorkingArea 属性获取每个显示器的工作区大小,使用 Bounds 属性获取每个显示器的全屏大小。 示例代码: ```csharp Screen[] screens = Screen.AllScreens; foreach (Screen screen in screens) { Console.WriteLine("Device Name: " + screen.DeviceName); Console.WriteLine("Working Area: " + screen.WorkingArea.ToString()); Console.WriteLine("Bounds: " + screen.Bounds.ToString()); } ``` 2. 使用 WMI (Windows Management Instrumentation) 可以使用 WMI (Windows Management Instrumentation) 查询来获取所有显示器的屏幕大小和位置信息。可以使用 Win32_DesktopMonitor 类和 Win32_VideoController 类来获取这些信息。 示例代码: ```csharp ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DesktopMonitor"); foreach (ManagementObject monitor in searcher.Get()) { Console.WriteLine("Screen Width: " + monitor["ScreenWidth"].ToString()); Console.WriteLine("Screen Height: " + monitor["ScreenHeight"].ToString()); } searcher = new ManagementObjectSearcher("SELECT * FROM Win32_VideoController"); foreach (ManagementObject videoController in searcher.Get()) { Console.WriteLine("Video Width: " + videoController["CurrentHorizontalResolution"].ToString()); Console.WriteLine("Video Height: " + videoController["CurrentVerticalResolution"].ToString()); } ``` 3. 使用 WinAPI 可以使用 WinAPI 来获取所有显示器的屏幕大小和位置信息。可以使用 EnumDisplayMonitors 和 GetMonitorInfo 函数来获取这些信息。 示例代码: ```csharp delegate bool MonitorEnumProc(IntPtr hMonitor, IntPtr hdcMonitor, ref RECT lprcMonitor, IntPtr dwData); [DllImport("user32.dll")] static extern bool EnumDisplayMonitors(IntPtr hdc, IntPtr lprcClip, MonitorEnumProc lpfnEnum, IntPtr dwData); [DllImport("user32.dll")] static extern bool GetMonitorInfo(IntPtr hMonitor, ref MONITORINFO lpmi); [StructLayout(LayoutKind.Sequential)] public struct RECT { public int left; public int top; public int right; public int bottom; } [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)] public struct MONITORINFO { public int cbSize; public RECT rcMonitor; public RECT rcWork; public uint dwFlags; } static bool MonitorEnum(IntPtr hMonitor, IntPtr hdcMonitor, ref RECT lprcMonitor, IntPtr dwData) { MONITORINFO mi = new MONITORINFO(); mi.cbSize = Marshal.SizeOf(mi); if (GetMonitorInfo(hMonitor, ref mi)) { Console.WriteLine("Device Name: " + mi.szDevice); Console.WriteLine("Monitor Area: " + mi.rcMonitor.ToString()); Console.WriteLine("Work Area: " + mi.rcWork.ToString()); } return true; } EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, MonitorEnum, IntPtr.Zero); ``` 这些方法都可以用来获取多个屏幕的宽高。其中,第一种方法是最简单的,第二种方法可以获取更多信息,第三种方法可以使用更底层的 WinAPI。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值