.NET中调用Windows API函数强制显示器指定分辨率

原创 2011年04月27日 13:26:00

案例:在软件开发过程中有时候需要使显示器的分辨率能够自适应软件设计图片或窗体的大小,因此想在软件启动的过程中重新设定显示的显示分辨率,同时当软件退出时恢复原来的分辨率设置.
分析:由于用到设置显示器分辨率的问题,因此要用到GDI的Windows API:
函数:ChangeDisplaySettings(LPDEVMODE lpDevMode,DWORD dwflags)
结构体:DEVMODE(The DEVMODE data structure contains information about the initialization and environment of a printer or a display device)
知识点:在C#中引用Windows API和结构体的方法.  
System.Runtime.InteropServices 命名空间提供各种各样支持 COM interop 及平台调用服务的成员。
StructLayout(LayoutKind.Explicit)通过使用属性可以自定义结构在内存中的布局方式。
MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)指示如何在托管代码和非托管代码之间封送数据。
DllImport extern 修饰符用于声明在外部实现的方法。extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 属性一起使用;在这种情况下,该方法还必须声明为 static.
主要代码:
namespace WindowsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
        public struct DEVMODE
        {
            [MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)]
            public string dmDeviceName;
            public short dmSpecVersion;
            public short dmDriverVersion;
            public short dmSize;
            public short dmDriverExtra;
            public int dmFields;
            public short dmOrientation;
            public short dmPaperSize;
            public short dmPaperLength;
            public short dmPaperWidth;
            public short dmScale;
            public short dmCopies;
            public short dmDefaultSource;
            public short dmPrintQuality;
            public short dmColor;
            public short dmDuplex;
            public short dmYResolution;
            public short dmTTOption;
            public short dmCollate;
            [MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)]
            public string dmFormName;
            public short dmLogPixels;
            public int dmBitsPerPel;
            public int dmPelsWidth;
            public int dmPelsHeight;
            public int dmDisplayFlags;
            public int dmDisplayFrequency;
        }
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern int ChangeDisplaySettings([In]ref DEVMODE lpDevMode, int dwFlags);
        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        static extern bool EnumDisplaySettings(string lpszDeviceName, Int32 iModeNum, ref DEVMODE lpDevMode);
        void ChangeRes()
        {
            DEVMODE devM = new DEVMODE();
            devM.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
            bool mybool;
            mybool = EnumDisplaySettings(null, 0, ref devM);
            devM.dmPelsHeight = 768;
            devM.dmPelsWidth = 1024;
            devM.dmDisplayFrequency = 60;
            devM.dmBitsPerPel = 32;
            long result = ChangeDisplaySettings(ref devM, 0);
        }
        private void button1_Click(object sender, EventArgs e)
        {
            ChangeRes();
        }

利用 xrandr 命令修改屏幕分辨率

利用 xrandr 命令修改屏幕的分辨率
  • think0909
  • think0909
  • 2016年07月20日 21:27
  • 4213

Windows客户端开发--获取屏幕分辨率及大小相关

今天介绍一下,windows客户端开发中,屏幕分辨率,以及屏幕客户区大小的获得方法。GetSystemMetrics 函数功能:用于得到被定义的系统数据或者系统配置信息函数原型:int WINAPI...
  • wangshubo1989
  • wangshubo1989
  • 2016年10月25日 20:52
  • 32012

关于获取多个屏幕分辨率以及进行一些设置

Windows下提示显示器信息主要通过两个函数实现。一个是EnumDisplayDevices(), 另一个是EnumDisplayMonitors(). EnumDisplayDevices()枚举...
  • swartz_lubel
  • swartz_lubel
  • 2017年02月04日 23:13
  • 1367

调用API函数改变显示器分辨率

  • 2004年01月11日 00:00
  • 10KB
  • 下载

VB.NET调用Windows API函数(整理中)

1、发送Windows消息: Private Declare Auto Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal...
  • shuicaohui5
  • shuicaohui5
  • 2012年07月13日 10:06
  • 1592

得到显示器分辨率,VB.net源代码编写,VisualStudio2008创建

  • 2009年05月04日 09:21
  • 14.93MB
  • 下载

VB.NET 调用Windows API 使用方法

整理:xiyangshanlu 来源:网络 关键字:Declare,Windows API,Declare Auto,Lib 与 Alias,DllImport   Windows API调用...
  • xiyangshanlu
  • xiyangshanlu
  • 2011年11月09日 10:58
  • 6743

.Net调用API函数的库(含源文件)

  • 2007年07月26日 16:58
  • 357KB
  • 下载

asp.net 调用API函数

  • 2009年11月17日 14:11
  • 101B
  • 下载

VB6.0 调用API函数控制显示器

  • 2013年09月15日 11:29
  • 6KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:.NET中调用Windows API函数强制显示器指定分辨率
举报原因:
原因补充:

(最多只允许输入30个字)