在VB.NET中改变显示器的分辩率

显示

在VB.NET中,我们很容易获得显示器的分辩率,但是,要改变显示器的分辩率就比较麻烦了。由于.NET的类库没有将EnumDisplaySettings 和ChangeDisplaySettings这两个API函数进行封装,但是我们得调用它们函数,相对于VB6来说,VB.NET调用API函数是有一些小的改动!
下面,我们就尝试一下在VB.NET中,使用这两个API函数。
新建一个项目,在Form1上添加两个按钮,一个名为btnGetDisp,将其Text属性设置为“得到分辩率”;另一个按钮名为btnSetDisp,Text属性为“设置分辩率”。然后在代码窗口里添加以下代码:

Private Const CCDEVICENAME As Short = 32
Private Const CCFORMNAME As Short = 32
Private Const DM_PELSWIDTH As Integer = &H80000
Private Const DM_PELSHEIGHT As Integer = &H100000

'刷新频率常量
Private Const DM_DISPLAYFREQUENCY As Integer = &H400000

'调用API函数
Private Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA"
(ByVal lpszDeviceName As Integer, ByVal iModeNum As Integer, ByRef lpDevMode As DEVMODE) As Boolean
'调用API函数
Private Declare Function ChangeDisplaySettings Lib "user32" Alias "ChangeDisplaySettingsA"
(ByRef lpDevMode As DEVMODE, ByVal dwflags As Integer) As Integer

'定义结构
Private Structure DEVMODE
<VBFixedString(CCDEVICENAME), System.Runtime.InteropServices.MarshalAs
(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=CCDEVICENAME)> Public dmDeviceName As String
Dim dmSpecVersion As Short
Dim dmDriverVersion As Short
Dim dmSize As Short
Dim dmDriverExtra As Short
Dim dmFields As Integer
Dim dmOrientation As Short
Dim dmPaperSize As Short
Dim dmPaperLength As Short
Dim dmPaperWidth As Short
Dim dmScale As Short
Dim dmCopies As Short
Dim dmDefaultSource As Short
Dim dmPrintQuality As Short
Dim dmColor As Short
Dim dmDuplex As Short
Dim dmYResolution As Short
Dim dmTTOption As Short
Dim dmCollate As Short
<VBFixedString(CCFORMNAME), System.Runtime.InteropServices.MarshalAs
(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst:=CCFORMNAME)> Public dmFormName As String
Dim dmUnusedPadding As Short
Dim dmBitsPerPel As Short
Dim dmPelsWidth As Integer
Dim dmPelsHeight As Integer
Dim dmDisplayFlags As Integer
Dim dmDisplayFrequency As Integer
End Structure

'改变分辩率过程,参数一宽度,参数二高度
Private Sub ChangeDisp(ByRef iWidth As Single, ByRef iHeight As Single)
Dim blnWorked As Boolean
Dim i As Integer
Dim DevM As Form1.DEVMODE
i = 0
Do
blnWorked = EnumDisplaySettings(0, i, DevM)
i = i + 1
Loop Until (blnWorked = False)

With DevM
.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_DISPLAYFREQUENCY
.dmPelsWidth = iWidth
.dmPelsHeight = iHeight
'刷新频率为85
.dmDisplayFrequency = 85
End With
Call ChangeDisplaySettings(DevM, 0)
End Sub

Private Sub btnGetDisp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGetDisp.Click
Dim X As Short = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width
Dim Y As Short = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Height
MsgBox("您的显示器分辨率是" & X & " X " & Y)
End Sub

Private Sub btnSetDisp_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSetDisp.Click
If MsgBox("您确认要将显示器分辨率改为1024x768吗?", MsgBoxStyle.OKCancel, "系统消息") = MsgBoxResult.OK Then
'调用改变分辩率过程
ChangeDisp(1024, 768)
End If
End Sub

程序运行如下图所示,点击设置分辩率,将会把显示器分辨率改为1024x768,是不是很简单?

时间: 2024-10-31 00:18:48

在VB.NET中改变显示器的分辩率的相关文章

C#中改变显示器的分辨率和刷新率

分辨率|刷新|显示 下面的代码实现修改显示器分辨率和刷新频率的功能: using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Data;using System.Runtime.InteropServices; namespace ScreenResolution{   public class Fo

VB.net中HOOK的应用(CNET中文网)

中文 VB.net中HOOK的应用 在vb.net版做版主有一阵子了,一直在思考怎么能更好地帮助大家理解vb.net的新概念与编程方法.小小的回贴很难说清楚很多问题,所以利用一下文档中心这片广阔的天地,进行更深入的探讨.本人水平有限,不免错误与遗漏多多,请朋友们批评指正. 基本的想法是,写一系列的文章,讲解一下vb.net与vb的区别,vb.net中的新概念,vb.net控件的使用,vb.net解决问题的新方法.如果时间允许,我希望自己能快快开展这个工作.更重要的是网友们的支持与鼓励会是我继续的

VB.NET中层次数据绑定TreeView的实现

treeview|数据 提要:在VB6中,常将TreeView用来表示层次数据,但相关的与数据库进行交互的代码,需要大量的采用手工编码;在VB.Net中,由于数据绑定功能的加强及语言特性的增强,可以很容易的实现TreeView与层次数据的绑定,本文将首先建立一个继承自TreeView的 dbTreeView,然后用一个单位(部门)的层次数据与dbTreeView进行数据绑定,并提供了与数据库进行交互的代码. 1.从层次数据的表达方式开始 在本例中,部门表(department)中有五个字段,如下

VB.NET中声音的播放 Montaque(原作)

VB.NET中声音的播放    Montaque(原作)          由VB6升级为.NET后,有些人不清楚声音的处理,比如程序出错的时候,自定义一个声音播放,或者程序的背景音乐.包括游戏音乐等等.下面介绍几种在VB.NET中计较简单可以实现的方案: 1.  Beep 最简单的一种方法,通过计算机的扬声器发出声响, 声响的音高与持续时间取决于硬件和系统软件,从而随计算机不同而不同. Beepg跟Msgbox等方法位于Microsoft.VisualBasic.Interaction 中,一

VB.NET中声音的播放

由VB6升级为.NET后,有些人不清楚声音的处理,比如程序出错的时候,自定义一个声音播放,或者程序的背景音乐.包括游戏音乐等等.下面介绍几种在VB.NET中计较简单可以实现的方案: 1.  Beep 最简单的一种方法,通过计算机的扬声器发出声响, 声响的音高与持续时间取决于硬件和系统软件,从而随计算机不同而不同. Beepg跟Msgbox等方法位于Microsoft.VisualBasic.Interaction 中,一般默认系统会自动加载.调用很简单,看下面的例子. Dim I As Inte

把握VB.NET中的流FileStream

stream 当你第一次用VB.NET读写文件的时候,你肯定会发现VB.NET摒弃了传统的文件I/O支持,感觉不习惯.其实,在.NET里面,微软用丰富的"流"对象取代了传统的文件操作,而"流",是一个在Unix里面经常使用的对象. 我们可以把流当作一个通道,程序的的数据可以沿着这个通道"流"到各种数据存储机构(比如:文件,字符串,数组,或者其他形式的流等).为什么我们会摒弃用了那么久的IO操作,而代之为流呢?其中很重要的一个原因就是并不是所有的数

在VB.NET中使用MS Access存储过程 — 第二部份

access|存储过程 在VB.NET中使用MS Access存储过程 - 第二部份 作者: David Wasserman, MCP4/18/2002译者:Qianqian(thousandvb@yeah.net)5/10/2002 文章源代码: msaccess_sp2.zip介绍欢迎来到MS Access存储过程的第二部分讨论.第一部分详细地描述了如何使用ADO.NET和Visual Basic.NET在Access中创建存储过程. 第二部分将会示范如何通过数据库访问层访问在第一部分已经创

在VB.NET中调试存储过程

存储过程 调试是编写应用程序的一个主要部分.Visual Studio .NET为自带的调试器提供了大量的增强性能,包括统一的调试界面.Web service调试以及跨语言调试.这种调试器的一个最有用的新功能体现在对存储过程的调试性能上.本文我将介绍在VS.NET中对SQL Server 2000存储过程进行调试的几种可选方法,以及你可能会遇到的一些配置问题. 许多商家使用SQL Server作为数据库,并将存储过程作为将数据返回VB中的机制,因此对存储过程进行逐步调试的能力成为开发的关键.Vi

VB.NET中的类

我在以前的文章里曾经提到:VB.NET的出现使得VB6在类的概念及其操作上发生了巨大的变化.现在就让我们进到这些变化中来进行更深入的探讨.首先让我们看看类到底意味着什么. 不妨假设我把你带回到了学院,现在你走进一个教室,我要求你解释一下什么是类(class),你可能会这样回答:"一组学生形成一个班(class)."呵呵,如果这样回答,你真是歪打正着了:没错,在这里,组就是最关键的词.用面向对象的编程思想来看,类就是存储数据同时给一组相关代码赋予协调功能的方式.类是面向对象编程的核心.