src/Carnac.Logic/ScreenManager.cs
(开头部分) 2KB这里只显示每个文件的开头 60 行。登录后可以解锁完整代码。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using Carnac.Logic.Native;
namespace Carnac.Logic
{
public class ScreenManager : IScreenManager
{
[DllImport("user32.dll")]
private static extern bool EnumDisplayDevices(string lpDevice, uint iDevNum, ref DISPLAY_DEVICE lpDisplayDevice, uint dwFlags);
[DllImport("User32.dll")]
private static extern bool EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode);
public IEnumerable<DetailedScreen> GetScreens()
{
var screens = new List<DetailedScreen>();
int index = 1;
var d = new DISPLAY_DEVICE();
d.cb = Marshal.SizeOf(d);
try
{
for (uint id = 0; EnumDisplayDevices(null, id, ref d, 0); id++)
{
d.cb = Marshal.SizeOf(d);
var x = new DISPLAY_DEVICE();
x.cb = Marshal.SizeOf(x);
//Get the actual monitor
EnumDisplayDevices(d.DeviceName, 0, ref x, 0);
if (string.IsNullOrEmpty(x.DeviceName) || string.IsNullOrEmpty(x.DeviceString))
continue;
var screen = new DetailedScreen { FriendlyName = x.DeviceString, Index = index++ };
var mode = new DEVMODE();
mode.dmSize = (ushort)Marshal.SizeOf(mode);
if (EnumDisplaySettings(d.DeviceName, -1, ref mode))
{
screen.Width = (int)mode.dmPelsWidth;
screen.Height = (int)mode.dmPelsHeight;
screen.Top = mode.dmPosition.y;
screen.Left = mode.dmPosition.x;
}
screens.Add(screen);
}
}
catch (Exception)
{
//log this
}
var biggestScreen = screens.OrderByDescending(s => s.Width).FirstOrDefault();
if (biggestScreen != null)
后面还有 16 行代码,解锁后查看完整代码
24 小时内免费解锁 3 个项目,之后 1 算力/个。 规则说明
AI 解读 AI
登录后可用,每次 10 算力,解读结果公开显示在下面。
还没有人解读过这个文件。