最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#如何動態(tài)設(shè)置屏幕分辨率

 更新時間:2016年04月06日 15:00:43   作者:Learning hard  
這篇文章主要為大家詳細介紹了C#動態(tài)設(shè)置屏幕分辨率的方法,我們可以使用Screen類設(shè)置屏幕分辨率,感興趣的小伙伴們可以參考一下

下面就不啰嗦了,直接看代碼如何解決這個問題的。

首先,大家應(yīng)該明確,現(xiàn)在沒有可用的API來給我們動態(tài)地設(shè)置屏幕分辨率,我們要實現(xiàn)這個需求,我們只能在C#程序中調(diào)用Win32 API 函數(shù)來解決這個問題的,這里用C#代碼調(diào)用Win32 API 就涉及到一個問題的,即.NET 互操作性的問題,關(guān)于這個大家可以參考我的互操作性系列文章。這里我就不過多解釋了。

我們要解決這個問題,首先大家肯定也會遇到一個經(jīng)常遇到的問題,即如何獲得用戶的分辨率,對于這個問題,.NET中提供的單獨的類給我們調(diào)用,我們可以使用Screen這個類,具體看下面的示例代碼:

 Screen screen = Screen.PrimaryScreen;
      int screenWidth= screen.Bounds.Width;
      int screenHeight = screen.Bounds.Height;

然后就是如何改變屏幕的分辨率呢?要更改顯示設(shè)置可以通過使用兩個 Win32 API 來完成,這兩個 API 都具有指向 DEVMODE 結(jié)構(gòu)的指針,它們分別包含與顯示設(shè)置有關(guān)的所有信息:

使用 EnumDisplaySettings 讀取當(dāng)前顯示設(shè)置,并枚舉所有受支持的顯示設(shè)置。

使用 ChangeDisplaySettings 切換到新的顯示設(shè)置。

第一步、我們要先定義DEVMODE 結(jié)構(gòu)體,該結(jié)構(gòu)的結(jié)構(gòu)必須與DEVMODE的結(jié)構(gòu)一致,下面是C#中對DEVMODE 結(jié)構(gòu)體的定義代碼:

// 映射 DEVMODE 結(jié)構(gòu)
  // 可以參照 DEVMODE結(jié)構(gòu)的指針定義:
  // http://msdn.microsoft.com/en-us/library/windows/desktop/dd183565(v=vs.85).aspx
  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
  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 int dmPositionX;
    public int dmPositionY;
    public int dmDisplayOrientation;
    public int dmDisplayFixedOutput;
    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 short dmBitsPerPel;
    public int dmPelsWidth;
    public int dmPelsHeight;
    public int dmDisplayFlags;
    public int dmDisplayFrequency;
    public int dmICMMethod;
    public int dmICMIntent;
    public int dmMediaType;
    public int dmDitherType;
    public int dmReserved1;
    public int dmReserved2;
    public int dmPanningWidth;
    public int dmPanningHeight;
  };

第二步、在托管環(huán)境下對Win 32 函數(shù)進行聲明:

// Win32 函數(shù)在托管環(huán)境下的聲明
  public class NativeMethods
  {
    // 平臺調(diào)用的申明
    [DllImport("user32.dll")]
    public static extern int EnumDisplaySettings(
     string deviceName, int modeNum, ref DEVMODE devMode);
    [DllImport("user32.dll")]
    public static extern int ChangeDisplaySettings(
       ref DEVMODE devMode, int flags);

    // 控制改變屏幕分辨率的常量
    public const int ENUM_CURRENT_SETTINGS = -1;
    public const int CDS_UPDATEREGISTRY = 0x01;
    public const int CDS_TEST = 0x02;
    public const int DISP_CHANGE_SUCCESSFUL = 0;
    public const int DISP_CHANGE_RESTART = 1;
    public const int DISP_CHANGE_FAILED = -1;

    // 控制改變方向的常量定義
    public const int DMDO_DEFAULT = 0;
    public const int DMDO_90 = 1;
    public const int DMDO_180 = 2;
    public const int DMDO_270 = 3;
  }

第三步、調(diào)用EnumDisplaySettings和ChangeDisplaySettings這兩個函數(shù)來實現(xiàn)動態(tài)改變屏幕分辨率,具體代碼如下:

  // 改變分辨率
    public ChangeResolution(int width, int height)
    {
      // 初始化 DEVMODE結(jié)構(gòu)
      DEVMODE devmode = new DEVMODE();
      devmode.dmDeviceName = new String(new char[32]);
      devmode.dmFormName = new String(new char[32]);
      devmode.dmSize = (short)Marshal.SizeOf(devmode);

      if (0 != NativeMethods.EnumDisplaySettings(null, NativeMethods.ENUM_CURRENT_SETTINGS, ref devmode))
      {
        devmode.dmPelsWidth = width;
        devmode.dmPelsHeight = height;

        // 改變屏幕分辨率
        int iRet = NativeMethods.ChangeDisplaySettings(ref devmode, NativeMethods.CDS_TEST);

        if (iRet == NativeMethods.DISP_CHANGE_FAILED)
        {
          MessageBox.Show("不能執(zhí)行你的請求", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        else
        {
          iRet = NativeMethods.ChangeDisplaySettings(ref devmode, NativeMethods.CDS_UPDATEREGISTRY);

          switch (iRet)
          {
              // 成功改變
            case NativeMethods.DISP_CHANGE_SUCCESSFUL:
              {
                break;
              }
            case NativeMethods.DISP_CHANGE_RESTART:
              {
                MessageBox.Show("你需要重新啟動電腦設(shè)置才能生效", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                break;
              }
            default:
              {
                MessageBox.Show("改變屏幕分辨率失敗", "信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
                break;
              }
          }
        }
      }
    }

為了大家更加形象地看到程序的運行結(jié)果,下面是一個演示效果:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • c#實現(xiàn)sunday算法實例

    c#實現(xiàn)sunday算法實例

    Sunday算法思想跟BM算法很相似,在匹配失敗時關(guān)注的是文本串中參加匹配的最末位字符的下一位字符,下面是用C#實現(xiàn)sunday的實例代碼,有需要的朋友可以參考一下
    2013-08-08
  • C#數(shù)據(jù)結(jié)構(gòu)之最小堆的實現(xiàn)方法

    C#數(shù)據(jù)結(jié)構(gòu)之最小堆的實現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于C#數(shù)據(jù)結(jié)構(gòu)之最小堆的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • C#關(guān)于System.Collections空間詳解

    C#關(guān)于System.Collections空間詳解

    這篇文章主要介紹了C#關(guān)于System.Collections空間,需要的朋友可以參考下
    2014-07-07
  • .NET使用C#設(shè)置Excel單元格數(shù)值格式

    .NET使用C#設(shè)置Excel單元格數(shù)值格式

    這篇文章主要為大家詳細介紹了如何使用C#在.NET程序中實現(xiàn)對Excel單元格數(shù)字格式的設(shè)置,幫助實現(xiàn)更完善的Excel文件處理,感興趣的小伙伴可以了解下
    2024-12-12
  • C#如何自動識別文件的編碼

    C#如何自動識別文件的編碼

    相信每位程序員在日常學(xué)習(xí)工作中,文件編碼識別是必不可少的,一旦編碼錯誤就會出現(xiàn)讓人頭疼的亂碼,那么下面這篇文章將給大家介紹如何通過C#來自動識別文件的編碼。文中給出了詳細的示例代碼,對大家的理解很有幫助,下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2016-12-12
  • C#正則函數(shù)用法實例【匹配、替換、提取】

    C#正則函數(shù)用法實例【匹配、替換、提取】

    這篇文章主要介紹了C#正則函數(shù)用法,結(jié)合實例形式分析了C#基于正則的匹配、替換、提取相關(guān)操作技巧,需要的朋友可以參考下
    2017-01-01
  • C#隨機設(shè)置900-1100毫秒延遲的方法

    C#隨機設(shè)置900-1100毫秒延遲的方法

    這篇文章主要介紹了C#隨機設(shè)置900-1100毫秒延遲的方法,涉及C#中Thread.Sleep方法的使用技巧,需要的朋友可以參考下
    2015-04-04
  • C#的鋸齒數(shù)組以及C++實現(xiàn)代碼

    C#的鋸齒數(shù)組以及C++實現(xiàn)代碼

    鋸齒數(shù)組首先是二維數(shù)組,第一維的維數(shù)是確定的。之所以在C#中能夠出現(xiàn)靈活的鋸齒數(shù)組,是因為,C#的數(shù)組是引用類型(本質(zhì)上存放的是指針)。根據(jù)這個引用類型(指針)的概念,C++中用指針數(shù)組同樣可以實現(xiàn)
    2013-09-09
  • C# 操作 MongoDB的示例demo

    C# 操作 MongoDB的示例demo

    這篇文章主要介紹了C# 操作 MongoDB的示例demo,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-12-12
  • Unity C#執(zhí)行bat腳本的操作

    Unity C#執(zhí)行bat腳本的操作

    這篇文章主要介紹了Unity C#執(zhí)行bat腳本的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評論

永福县| 铁力市| 色达县| 水富县| 茌平县| 永顺县| 安顺市| 西林县| 娱乐| 甘肃省| 安泽县| 古交市| 万全县| 镇沅| 新龙县| 文成县| 嘉兴市| 景谷| 运城市| 五原县| 中西区| 郸城县| 兰西县| 武冈市| 静安区| 梧州市| 商河县| 英德市| 延长县| 芦山县| 南郑县| 霍城县| 磐安县| 铜山县| 淄博市| 舞钢市| 上蔡县| 宣城市| 拉孜县| 西峡县| 民县|