在Windows下让不同用户使用不同的分辨率(C# 2005)

window|分辨率

在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

时间: 2024-08-21 04:08:30

在Windows下让不同用户使用不同的分辨率(C# 2005)的相关文章

Windows下MongoDB配置用户权限实例_MongoDB

MongoDB默认设置为无权限访问限制注:研究成果基于Windows平台 在部署mongodb成功后,进入控制台: \ 输入命令:mongod use admin,你会发现该DB下包含了一个system.user表,呵呵,没错,这个表就等同于MsSql中的用户表,用来存放超级管理员的,那我们就往它里面添加一个超级管理员试试看里我添加一个超级管理员用户,username为admin,password也为admin,即然我们添加了超级管理员,那咱们就来测试下,看看咱们再次连接MongoDB需不需要提

Windows下MySQL root用户忘记密码重置方法

同时打开2个命令行窗口,并按如下操作: <1>.在第一个"命令行窗口"输入:  代码如下 复制代码 cd  D:\Program Files\MySQL\MySQL Server 5.5\bin net stop mysql mysqld --skip-grant-tables <2>.在第二个"命令行窗口"输入:  代码如下 复制代码 cd  D:\Program Files\MySQL\MySQL Server 5.5\bin mysql

windows下配置文件共享时如何为不同用户配置不同的权限

需求:windows下配置文件共享,针对不同用户要不同权限,如: 环境: Windows Server 2003 有4个用户分别为(usera.userb.userc.userd) 有4个文件夹目录分别为(ua.ub.uc.ud) 需求: usera仅能访问ua目录下文件,具有ua目录下写权限. userb仅能访问ub目录下文件,具有ub目录下写权限. userc仅能访问uc目录下文件,不具有uc目录下写权限. userd仅能访问ud目录下文件,不具有ud目录下写权限. 配置步骤: 1.首先分别

Linux下和Windows下创建Oracle数据库,表空间,Oracle用户

通过SSH工具或是XShell工具进入远程Linux下. 其中,通过SSH工具登录的界面如下: 其中Host Name是远程服务器的ip地址.User Name是服务器的一个用户名,端口号默认22,Connect进去后可以填写服务器的密码. 通过XShell工具登录的界面如下: 点击上面的New按钮,填写HOST主机地址,即服务器的IP地址,点击OK即可.   输入命令:    cd /    到根目录下 启动tomcat usr/local/tomcat/bin/startup.sh(这是to

Windows XP中在注册表下查看隐藏用户

在XP中,从控制面板的用户帐户,和计算机管理中的本里用户和组的用户,以及从注册表中的 KEY_LOCAL_MACHINE\SAM\SAM\Domains\account\Users\Names下看到的用户的数量是有区别的.在控制面 版中看到的是最少的,而在计算机管理中的本里用户和组的用户能看到一些隐藏的用户,但是对于部分通 过后门或者木马添加的帐户,在一般情况是是只能通过注册表才能查看到的. 打开注册表:开始->运行->regedit.msc 在注册表的默认情况下,我们是不能看到隐藏用户.以下

PHPUnit 在 Windows 下的配置及使用教程

由于我们项目涉及到php,因此需要对php代码进行单元测试.经过一番了解,决定用PHPUnit来测试php.PHPUnit花了不少时间摸索如何配置PHPUnit,看官网的文档也是一把泪.但知道怎么配置后,其实还是很简单的. 系统:Windows 10 专业版 PHP版本:PHP 5.5.12 服务器工具:WAMPSERVER 2.5 PHPUnit版本:PHPUnit 4.8 一.配置PHPUnit 首先到PHPUnit官网(点此进入)下载相应的版本.我们使用的是php 5.5,于是选择PHPU

Windows下Apache+Tomcat+MySQL+jsp+php的服务器整合配置经验总结

apache|js|mysql|window|服务器 Windows下Apache+Tomcat+MySQL+jsp+php的服务器整合配置经验总结 1.作者:moonsbird 题目:Windows下Apache+Tomcat+MySQL+jsp+php的服务器整合配置经验总结 时间:2004.8.19 最初发表于西南交通大学锦城驿站 2.本文是作者学习几年来学习jsp/配置服务器环境的经验总结.可以转载,但请注明出处. 开始学习jsp很久了,网上有许多关于jsp整合的例子,但存在着许多问题.

Windows下22个实用的代码编辑器

1.Notepad++ 官方网站 http://notepad-plus.sourceforge.net/ 最新版本 v 5.3.2 免费版 这可能是 Windows 里最好的免费文本编辑器了,具有简单的功能,从语法高亮.代码折叠到 FTP,Notepad++ 可以应付绝大多数情况,我最喜欢的功能是文件状态自动检测:当 Notepad++ 运行时,它会自动检查所有当前打开文件的变动,让你知道是否有文件被更新或删除.Notepad++ 基于 Scintilla 编辑引擎. 2.JEdit 官方网站

Windows 控件限制用户的基本法门(C#.NET 篇)

window|控件 /****************************************************************** Windows 控件限制用户的基本法门(.NET 篇) C#.NET 的在下面 ------------------------------------------------------------------- 本代码演示 控制用户的输入的基本方式(屏蔽非数字字符输入) .net 下限制用户输入,看见很多人是在 键盘,或 textBox