c# 通过WMI 获取多个屏幕的宽和高
时间: 2024-03-09 19:44:32 浏览: 17
可以使用以下代码通过 WMI 获取多个屏幕的宽和高:
```csharp
using System;
using System.Management;
class Program
{
static void Main(string[] args)
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_DesktopMonitor");
foreach (ManagementObject monitor in searcher.Get())
{
int width = Convert.ToInt32(monitor["ScreenWidth"]);
int height = Convert.ToInt32(monitor["ScreenHeight"]);
Console.WriteLine("Width: {0}, Height: {1}", width, height);
}
}
}
```
这个程序使用 `Win32_DesktopMonitor` WMI 类来获取系统中所有的显示器信息,并打印出每个显示器的宽和高。注意,这个程序需要管理员权限才能运行。
相关问题
C# 获取多个屏幕的宽高 有几种方法
以下是获取多个屏幕宽高的几种方法:
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。
使用python通过wmi获取审核策略
可以使用Python通过WMI获取审核策略。具体实现可以参考以下代码:
```python
import wmi
c = wmi.WMI()
for policy in c.Win32_AuditPolicy():
print(policy.AuditPolicyID, policy.AuditPolicyState)
```
这段代码会输出所有的审核策略ID和状态。