PDA

View Full Version : بدست آوردن و تغيير رزوليشن سيستم در vb.net



ghaffar1
شنبه 30 آبان 1388, 09:08 صبح
ممنون ميشم اگه منو راهنمايي كنين كه تو vb.net چطوري رزوليشن سيستم رو بدست بيارم و بعدش بتونم اونو تغيير بدم.

majid_vb_2008
شنبه 30 آبان 1388, 09:27 صبح
تغییر resolution مانیتور در ابتدای برنامه
ابتدا يك كلاس مي سازيم و كد زير رو توي اون وارد مي كنيم.

Imports System

Imports System.Windows.Forms

Imports System.Runtime.InteropServices

Public Class Resolution



<StructLayout(LayoutKind.Sequential)> _

Public Structure DEVMODE1

<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> _

Public dmDeviceName As String

Public dmSpecVersion As Short

Public dmDriverVersion As Short

Public dmSize As Short

Public dmDriverExtra As Short

Public dmFields As Integer

Public dmOrientation As Short

Public dmPaperSize As Short

Public dmPaperLength As Short

Public dmPaperWidth As Short

Public dmScale As Short

Public dmCopies As Short

Public dmDefaultSource As Short

Public dmPrintQuality As Short

Public dmColor As Short

Public dmDuplex As Short

Public dmYResolution As Short

Public dmTTOption As Short

Public dmCollate As Short

<MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> _

Public dmFormName As String

Public dmLogPixels As Short

Public dmBitsPerPel As Short

Public dmPelsWidth As Integer

Public dmPelsHeight As Integer

Public dmDisplayFlags As Integer

Public dmDisplayFrequency As Integer

Public dmICMMethod As Integer

Public dmICMIntent As Integer

Public dmMediaType As Integer

Public dmDitherType As Integer

Public dmReserved1 As Integer

Public dmReserved2 As Integer

Public dmPanningWidth As Integer

Public dmPanningHeight As Integer

End Structure



Class User_32



<DllImport("user32.dll")> _

Public Shared Function EnumDisplaySettings(ByVal deviceName As String, ByVal modeNum As Integer, ByRef devMode As DEVMODE1) As Integer

End Function



<DllImport("user32.dll")> _

Public Shared Function ChangeDisplaySettings(ByRef devMode As DEVMODE1, ByVal flags As Integer) As Integer

End Function

Public Const ENUM_CURRENT_SETTINGS As Integer = -1

Public Const CDS_UPDATEREGISTRY As Integer = 1

Public Const CDS_TEST As Integer = 2

Public Const DISP_CHANGE_SUCCESSFUL As Integer = 0

Public Const DISP_CHANGE_RESTART As Integer = 1

Public Const DISP_CHANGE_FAILED As Integer = -1

End Class



Class CResolution



Public Sub New(ByVal a As Integer, ByVal b As Integer)

Dim screen As Screen = Screen.PrimaryScreen

Dim iWidth As Integer = a

Dim iHeight As Integer = b

Dim dm As DEVMODE1 = New DEVMODE1

dm.dmDeviceName = New String(New Char(32) {})

dm.dmFormName = New String(New Char(32) {})

dm.dmSize = CType(Marshal.SizeOf(dm), Short)

If Not (0 = User_32.EnumDisplaySettings(Nothing, User_32.ENUM_CURRENT_SETTINGS, dm)) Then

dm.dmPelsWidth = iWidth

dm.dmPelsHeight = iHeight

Dim iRet As Integer = User_32.ChangeDisplaySettings(dm, User_32.CDS_TEST)

If iRet = User_32.DISP_CHANGE_FAILED Then

MessageBox.Show("Unable to process your request")

MessageBox.Show("Description: Unable To Process Your Request. Sorry For This Inconvenience.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)

Else

iRet = User_32.ChangeDisplaySettings(dm, User_32.CDS_UPDATEREGISTRY)

Select Case iRet

Case User_32.DISP_CHANGE_SUCCESSFUL



Case User_32.DISP_CHANGE_RESTART



MessageBox.Show("Description: You Need To Reboot For The Change To Happen." & Microsoft.VisualBasic.Chr(10) & " If You Feel Any Problem After Rebooting Your Machine" & Microsoft.VisualBasic.Chr(10) & "Then Try To Change Resolution In Safe Mode.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)

Case Else

MessageBox.Show("Description: Failed To Change The Resolution.", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information)



End Select

End If

End If

End Sub

End Class

End Class

بعدش کد زیر رو هر جا که می خوای برنامه ات وضوح نمایش رو تغییر بده قرار می دیم.


Dim ChangeRes As Resolution.CResolution

Dim XRes As Short = System.Windows.Forms.Screen.PrimaryScreen.Bounds.W idth

Dim YRes As Short = System.Windows.Forms.Screen.PrimaryScreen.Bounds.H eight

ChangeRes = New Resolution.CResolution(800, 600)


برای اینکه وضوح نمایش رو به حالت اول برگردونی هم می تونی از کد زیر استفاده کنید.


ChangeRes = New Resolution.CResolution(XRes, YRes)


توجه بجاي


ChangeRes = New Resolution.CResolution(800, 600)




هر وضوح تصویر استانداردی می تونید قرار بدهید

saadi2
شنبه 30 آبان 1388, 13:50 عصر
http://barnamenevis.org/forum/showthread.php?p=826724#post826724