我試過以下程式碼,但是screen.width和screen.height得到的值卻是一樣的!?
還有其他的辦法嗎?
x = Screen.Width / Screen.TwipsPerPixelX
y = Screen.Height / Screen.TwipsPerPixelY
還有其他的辦法嗎?
x = Screen.Width / Screen.TwipsPerPixelX
y = Screen.Height / Screen.TwipsPerPixelY
文章標籤
全站熱搜
部落格全站分類:數位生活

小吳 VBQA 程式設計討論
程式碼是對的. 我試了一下, 沒有問題才對 !!
不可能啦~~一定是你哪弄錯了.... 可能x跟y沒先宣告.....或是怎樣~~~~ 因為我用這方法很久了... 軟體也在市面上賣很久了~~
嗚~真的嗎? 我是宣告在module內 Public x,y As Integer 我再找其他電腦試試看好了,真是奇怪:~~ (還是跟所在form的屬性有關連到???)
太奇怪了,我剛又試了一下 第一次run程式,解析度正確抓到了 但是重新再run一次,竟然兩個值就變成一模一樣了! 都是600 不然就都是800 我現在要重開機再試了:~~
其實我是想在程式開始run時自動將解析度調成640X480(原本可能是800X600) 然後程式離開時,回復成原本的解析度... 但是只有再程式第一次run時才有效 第二次之後,所抓取到的螢幕寬高都會變成相同的600or相同的480 以下是我的程式碼 '設定桌面解析度的API宣告 '************************************************************ 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 = 0 ' 重開機 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 Form_Load() '1.解析度設定為640X480 '************************************************************ Dim I As Long Dim B As Long Dim Ans As Long Dim A As Long width_point = Screen.Width / Screen.TwipsPerPixelX '取得螢幕解析度 height_point = Screen.Height / Screen.TwipsPerPixelY A = EnumDisplaySettings(0, 0, DevM) 'Initial Setting DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT DevM.dmPelsWidth = 640 '設定成想要的解析度 DevM.dmPelsHeight = 480 B = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY) 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 Private Sub exit_Click() '1.解析度設定為640X480 '************************************************************ 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 = width_point '設成原本的解析度 DevM.dmPelsHeight = height_point 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 End Sub
Private Sub exit_Click() '1.解析度設定為640X480 '************************************************************ 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 = width_point '設成原本的解析度 DevM.dmPelsHeight = height_point B = ChangeDisplaySettings(DevM,CDS_UPDATEREGISTRY) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 我想問題應該是出在我離開時,沒有正確把解析度登錄到系統內 但即使我把他改呈現在這個CDS_UPDATEREGISTRY參數 下一次run時,screen.width仍然是和screen.height一樣 不知道該怎麼解決呢? 謝謝!! 專案demo最後三天努力趕工中:~~ 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 End Sub