取自SO question我有以下代码将我的演示模式切换为“扩展”:
var proc = new Process { StartInfo = { FileName = "DisplaySwitch.exe", Arguments = "/extend" } };
proc.Start();
但是如果演示文稿显示模式尚未设置为扩展,我只想运行该代码段。无论如何以编程方式确定机器的当前演示文稿显示模式?
注意:该解决方案只需要适用于Windows 8计算机。
答案 0 :(得分:1)
我不知道你是否仍然对解决方案感兴趣。 你必须使用CCD(连接和配置显示器),你只能通过使用dllimport调用windows函数来实现。 以下是CCD https://msdn.microsoft.com/en-us/library/windows/hardware/ff539367(v=vs.85).aspx
的链接为此,您必须拨2个电话。首先,您必须获取缓冲区大小,然后显示配置。
[DllImport("User32.dll")]
public static extern StatusCode GetDisplayConfigBufferSizes(
QueryDisplayConfigFlags flags,
out int numPathArrayElements,
out int numModeInfoArrayElements);
[Flags]
public enum QueryDisplayConfigFlags : uint
{
QDC_ZERO = 0x0,
QDC_ALL_PATHS = 0x00000001,
QDC_ONLY_ACTIVE_PATHS = 0x00000002,
QDC_DATABASE_CURRENT = 0x00000004
}
public enum StatusCode : uint
{
Success = 0,
InvalidParameter = 87,
NotSupported = 50,
AccessDenied = 5,
GenFailure = 31,
BadConfiguration = 1610,
InSufficientBuffer = 122,
}
int numPathArrayElements;
int numModeInfoArrayElements;
var status = CCDWrapper.GetDisplayConfigBufferSizes(
pathType,
out numPathArrayElements,
out numModeInfoArrayElements);
[DllImport("User32.dll")]
public static extern StatusCode QueryDisplayConfig(
QueryDisplayConfigFlags flags,
ref int numPathArrayElements,
[Out] DISPLAYCONFIG_PATH_INFO[] pathInfoArray,
ref int modeInfoArrayElements,
[Out] DisplayConfigModeInfo[] modeInfoArray,
out DISPLAYCONFIG_TOPOLOGY_ID_Flags topologyId
);
[Flags]
public enum DISPLAYCONFIG_TOPOLOGY_ID_Flags: uint
{
DISPLAYCONFIG_TOPOLOGY_ZERO = 0x0,
DISPLAYCONFIG_TOPOLOGY_INTERNAL = 0x00000001,
DISPLAYCONFIG_TOPOLOGY_CLONE = 0x00000002,
DISPLAYCONFIG_TOPOLOGY_EXTEND = 0x00000004,
DISPLAYCONFIG_TOPOLOGY_EXTERNAL = 0x00000008,
DISPLAYCONFIG_TOPOLOGY_FORCE_UINT32 = 0xFFFFFFFF
}
呼叫中还需要DISPLAYCONFIG_PATH_INFO和DisplayConfigModeInfo。它们不能为空。但是这两种结构包括其他几种类型,这些类型太多而无法粘贴在这里。
如果您按照以下链接在github上找到示例项目。 droid-autorotate@Github
从那里你可以复制缺失的结构。