• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 在Windows下讓不同用戶使用不同的分辨率(C# 2005)

    發表于:2007-05-25來源:作者:點擊數: 標簽:用戶windows分辨率不同使用
    在 windows 下要實現不同用戶擁有不同分辨率其實可以自己動手來實現,看看如下實例吧: 首先制作一個能改變屏幕分辨率的C#程序,源代碼如下,使用了VS.NET 2005 BETA 1: 1、新建Windows Application工程,取名為ScreenResolution 2、粘貼各文件的代碼: Pro
    windows下要實現不同用戶擁有不同分辨率其實可以自己動手來實現,看看如下實例吧:


    首先制作一個能改變屏幕分辨率的C#程序,源代碼如下,使用了VS.NET 2005 BETA 1:
    1、新建Windows Application工程,取名為ScreenResolution
    2、粘貼各文件的代碼:
    Program.cs



    --------------------------------------------------------------------------------
    #region Using directives


    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;


    #endregion


    namespace ScreenResolution
    {
    static class Program
    {
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
    Application.EnableVisualStyles();
    Application.EnableRTLMirroring();
    Application.Run(new Form1());
    }
    }
    }



    --------------------------------------------------------------------------------


    Form1.cs


    --------------------------------------------------------------------------------



    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Data;
    using System.Runtime.InteropServices;


    namespace ScreenResolution
    {


    partial class Form1 : System.Windows.Forms.Form
    {
    public enum DMDO
    {
    DEFAULT = 0,
    D90 = 1,
    D180 = 2,
    D270 = 3
    }


    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
    struct DEVMODE
    {
    public const int DM_DISPLAYFREQUENCY = 0x400000;
    public const int DM_PELSWIDTH = 0x80000;
    public const int DM_PELSHEIGHT = 0x100000;
    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;
    }


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


    static extern int ChangeDisplaySettings([In] ref DEVMODE lpDevMode, int dwFlags);
    //private System.ComponentModel.Container components = null;
    public Form1()
    {
    InitializeComponent();
    }
    // protected override void Dispose(bool disposing)
    // {
    // if (disposing)
    // {
    // if (components != null)
    // {
    // components.Dispose();
    // }
    // }
    // base.Dispose(disposing);
    // }


    #region Windows Form Designer generated code
    // private void InitializeComponent()
    // {
    // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
    // this.ClientSize = new System.Drawing.Size(292, 273);
    // this.Text = "改變屏幕分辨率的例子";
    //
    // }
    #endregion


    // static void Main()
    // {
    // Form1 r = new Form1();
    // r.ChangeRes();
    // Application.Run(new Form1());
    // }


    void ChangeRes(int chMode)
    {
    Form1 t = new Form1();
    long RetVal = 0;
    DEVMODE dm = new DEVMODE();
    dm.dmSize = (short)Marshal.SizeOf(typeof(DEVMODE));
    if (chMode == 1)
    {
    dm.dmPelsWidth = 1600;
    dm.dmPelsHeight = 1024;
    dm.dmDisplayFrequency = 85;
    }
    else if (chMode == 2)
    {
    dm.dmPelsWidth = 1024;
    dm.dmPelsHeight = 768;
    dm.dmDisplayFrequency = 85;
    }
    dm.dmFields = DEVMODE.DM_PELSWIDTH | DEVMODE.DM_PELSHEIGHT | DEVMODE.DM_DISPLAYFREQUENCY;
    RetVal = ChangeDisplaySettings(ref dm, 0);
    }


    private void Form1_Load(object sender, EventArgs e)
    {
    ChangeRes(1);
    }


    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
    ChangeRes(2);
    }
    }
    }


    3、在Design視圖下將WindowsState設置成Minimized,ShowInTaskbar設置成False


    其次根據每個用戶的需要修改ChangeRes方法里對分辨率的設置,生成工程后將可執行文件放在此用戶的啟動文件夾內


    總結:
    程序的原理很簡單,在用戶登錄時將分辨率設置成用戶的期望值,程序在用戶登出前始終運行,但用戶不會察覺,在用戶登出時,程序被終止,分辨率被設置回特定值,以此實現統一登錄分辨率并且各用戶有自己的分辨率。


    改進:
    如果用戶較多,可以通過程序參數來改變屏幕分辨率,避免多次生成工程并產生多個版本的混亂。


    測試平臺:
    Windows Server 2003,Visual C# 2005 Beta 1


    原文轉自:http://www.kjueaiud.com

    評論列表(網友評論僅供網友表達個人看法,并不表明本站同意其觀點或證實其描述)
    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>