设置显示模式 设置分辨率

From: 空军  http://bbs.csdn.net/topics/320032069

//: ScreenMode.cs - 设置显示模式
//: Thu 2005.08.25

namespace Skyiv
{
  using System;
  using System.Windows.Forms;
  using System.Runtime.InteropServices;

  class ScreenMode : Form
  {
    enum DMDO { DEFAULT = 0, D90 = 1, D180 = 2, D270 = 3 }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    struct DEVMODE
    {
      public  const int DM_BITSPERPEL       = 0x040000;
      public  const int DM_PELSWIDTH        = 0x080000;
      public  const int DM_PELSHEIGHT       = 0x100000;
      public  const int DM_DISPLAYFREQUENCY = 0x400000;
      private const int CCHDEVICENAME       = 32;
      private const int CCHFORMNAME         = 32;

      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHDEVICENAME)]
      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 DMDO   dmDisplayOrientation;
      public int    dmDisplayFixedOutput;

      public short  dmColor;
      public short  dmDuplex;
      public short  dmYResolution;
      public short  dmTTOption;
      public short  dmCollate;

      [MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCHFORMNAME)]
      public string dmFormName;
      public short  dmLogPixels;
      public int    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;

      public override string ToString()
      {
        return string.Format
        (
          "{0,4}×{1,-4} {2,2}Bits {3,3}Hz  {4}",
          dmPelsWidth,
          dmPelsHeight,
          dmBitsPerPel,
          dmDisplayFrequency,
          dmDeviceName
        );
      }
    }

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern bool EnumDisplaySettings(int lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode);

    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    static extern int ChangeDisplaySettings([In] ref DEVMODE lpDevMode, int dwFlags);

    ListBox lbxPels;

    // 构造函数
    public ScreenMode()
    {
      Text                   = "显示属性";

      lbxPels                = new ListBox();
      lbxPels.Parent         = this;
      lbxPels.Dock           = DockStyle.Fill;
      lbxPels.BeginUpdate();
      DEVMODE DevMode        = new DEVMODE();
      for (int i = 0; EnumDisplaySettings(0, i, ref DevMode); i++)
      {
        lbxPels.Items.Add(DevMode);
      }
      lbxPels.EndUpdate();

      Button btnSet          = new Button();
      btnSet.Parent          = this;
      btnSet.Text            = "设置显示模式";
      btnSet.Dock            = DockStyle.Top;
      btnSet.Click          += new EventHandler(SetScrnMode);

      Button btnGet          = new Button();
      btnGet.Parent          = this;
      btnGet.Text            = "当前显示属性";
      btnGet.Dock            = DockStyle.Top;
      btnGet.Click          += new EventHandler(GetScrnInfo);
    }

    // 设置显示模式
    void SetScrnMode(object sender, EventArgs e)
    {
      if (lbxPels.SelectedItem != null)
      {
        DEVMODE DevMode = (DEVMODE)lbxPels.SelectedItem;
        ChangeDisplaySettings(ref DevMode, 0);
      }
    }

    // 当前显示属性
    void GetScrnInfo(object sender, EventArgs e)
    {
      Screen scrn = Screen.PrimaryScreen;
      MessageBox.Show(
        string.Format
        (
          "主设备: {1}{0}设备名: {2}{0}边 界: {3}{0}工作区: {4}",
          Environment.NewLine,
          scrn.Primary,
          scrn.DeviceName,
          scrn.Bounds,
          scrn.WorkingArea
        ),
        "当前显示属性",
        MessageBoxButtons.OK,
        MessageBoxIcon.Information
      );
    }

    // 程序入口
    [STAThread]
    static void Main()
    {
      Application.Run(new ScreenMode());
    }
  }
}





在Linux操作系统下,有三种常见的方法可以修改分辨率。 第一种方法是直接在设置(setting)中进行修改。进入设置界面的显示display)选项,可以直接修改分辨率。\[1\] 第二种方法是通过终端(Terminal)进行修改。使用命令"xrandr"可以查看当前的分辨率以及可设置分辨率。通过命令行输入相应的指令,可以修改分辨率。\[1\] 第三种方法是通过修改/boot/grub/目录下的menu.lst文件来实现。通过查看menu.lst文件的内容,可以找到控制分辨率和色彩模式的参数。可以使用文本编辑器如gedit、vim等来修改menu.lst文件,将vga=788这一行改成你喜欢的任意模式,以适应你的显示器支持的分辨率。\[2\] 另外,还可以使用xrandr命令来创建新的显示模式,将相应的参数作为xrandr --newmode的参数。这样可以添加新的分辨率选项供选择。\[3\] #### 引用[.reference_title] - *1* *2* [linux 下更改分辨率](https://blog.csdn.net/SueMagic/article/details/89399959)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [linux 设置分辨率(转)](https://blog.csdn.net/weixin_30725467/article/details/98729087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值