引用 | 編輯
oway
2006-06-19 22:33 |
樓主
▼ |
||
x0
這是我不久前下載 VS2005 時使用 VB.Net 嘗試寫出來的功能,分享出來給各位參考使用,希望對各位有用,如果各位覺得不錯,煩請賞我一朵花好嗎 下面的 Form 裡面,只有一個 Label 及兩個 Button 元件而已: Public Class Form1 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:=CCDEV .. 訪客只能看到部份內容,免費 加入會員 x2
|
引用 | 編輯
chen9999
2006-06-19 23:47 |
1樓
▲ ▼ |
你確定是 "你自己寫的" ?
Option Explicit Private Declare Function EnumDisplaySettings Lib "user32" Alias _ "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, _ ByVal iModeNum As Long, lpDevMode As Any) As Long Private Declare Function ChangeDisplaySettings Lib "user32" Alias _ "ChangeDisplaySettingsA" (lpDevMode As Any, ByVal dwflags As Long) As Long Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, _ ByVal dwReserved As Long) As Long Const EWX_REBOOT = 2 ' 重開機 Const CCDEVICENAME = 32 Const CCFORMNAME = 32 Const DM_PELSWIDTH = &H80000 Const DM_PELSHEIGHT = &H100000 Const DISP_CHANGE_SUCCESSFUL = 0 Const DISP_CHANGE_RESTART = 1 Const CDS_UPDATEREGISTRY = 1 Private Type DEVMODE dmDeviceName As String * CCDEVICENAME dmSpecVersion As Integer dmDriverVersion As Integer dmSize As Integer dmDriverExtra As Integer dmFields As Long dmOrientation As Integer dmPaperSize As Integer dmPaperLength As Integer dmPaperWidth As Integer dmScale As Integer dmCopies As Integer dmDefaultSource As Integer dmPrintQuality As Integer dmColor As Integer dmDuplex As Integer dmYResolution As Integer dmTTOption As Integer dmCollate As Integer dmFormName As String * CCFORMNAME dmUnusedPadding As Integer dmBitsPerPel As Integer dmPelsWidth As Long dmPelsHeight As Long dmDisplayFlags As Long dmDisplayFrequency As Long End Type Private DevM As DEVMODE Private Sub Command1_Click() Dim i As Long Dim b As Long Dim ans as Long Dim a As Long a = EnumDisplaySettings(0, 0, DevM) 'Initial Setting DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT DevM.dmPelsWidth = 800 '設定成想要的解析度 DevM.dmPelsHeight = 600 b = ChangeDisplaySettings(DevM, 0) 'Changed Only this time If b = DISP_CHANGE_RESTART Then ans = MsgBox("要重開機設定才能完成,重開?", vbOKCancel) If ans = 1 Then b = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY) 'after this , Will Update in Registry Call ExitWindowsEx(EWX_REBOOT, 0) End If Else If b <> DISP_CHANGE_SUCCESSFUL Then Call MsgBox("設定有誤", vbCritical) End If End If End Sub 變數名稱都相同.......不太可能吧 我想我應該不用說出原文在那, 除非那個原文是你做的. x0 |
引用 | 編輯
oway
2006-06-20 01:32 |
2樓
▲ ▼ |
下面是引用chen9999於2006-06-19 23:47發表的 :您貼的那一篇我在大陸網站也有看過,好多地方都有的, 我並沒有說我是原創,我只是說我使用 VB.Net 2005 嘗試寫出來,將它分享出來而已, 這功能的教學資料在網路上許多地方都找的到的,如下面的網址都是: http://www.microsoft.com/china/community/Column/28.mspx http://www.aspxboy.com/private/260/default.aspx http://www.faq-it.org/archives/vb/97a324b65f66323708e93266830b0fcc.php 但那些都不是 VB.Net 2005 的範例,雖然語法差不多,但還是沒有完全一樣, 因此我分享的是我改成 2005 能用的版本。 補充: ChangeDisplaySettings() 是一個 API 而已,原創是微軟,從 Win98 的時候就存在, VB 的用法較複雜,相較之下,BCB 的用法就簡單多了,如下幾行就可以達成了: DEVMODE DevM; 看來我還是不要貼 VB 的範例好了,因為網路上太好找了。 x1 |
引用 | 編輯
jansonshie
2010-01-06 15:20 |
3樓
▲ ▼ |
但這都針對一個螢幕,哪如何變更第二台螢幕的解析度呢?
x0 |
引用 | 編輯
zsx123665
2013-05-15 12:45 |
5樓
▲ ▼ |
複製程式
Private Sub ChangeDisp(ByRef iWidth As Single, ByRef iHeight As Single) Dim blnWorked As Boolean Dim DevM As New DEVMODE blnWorked = EnumDisplaySettings(0, 0, DevM) With DevM .dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_DISPLAYFREQUENCY .dmPelsWidth = iWidth .dmPelsHeight = iHeight '.dmDisplayFrequency = 75 '更新頻率定為 75 End With Call ChangeDisplaySettings(DevM, 0) End Sub 改成:Dim DevM As New DEVMODE 避免發生 Null x0 |