You are here: آموزش توابع API ویندوز گروه Display

گروه Display

آموزش توابع API   ویندوز           گروه: Display

منبع: انجمن تخصصی برنامه نویسان ایران  

 

EnumDisplaySettings,




نام تابع: EnumDisplaySettings

اعلان: Declare Function EnumDisplaySettings Lib "user32.dll" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As String, ByVal iModeNum As Long, lpDevMode As DEVMODE) As Long

سيستم عامل: NT , 2000 , 98 , 95

توضيحات: ستينگ صفحه نمايش را نشان ميدهد شما با اين تابع ميتوانيد دقت صفحه نمايش(رزلوشن) و تعداد رنگ (كيفيت رنگ) و فركانس سوپ و اطلاعات اضافي ديگر.

مقدار بازگشتي: اگر تابع موفق باشد مقدار غير صفر برميگرداند و در غير اين صورت مقدار صفر برگشت داده ميشود(بوسيله تابع GetLastError شما ميتوانيد نوع خطا را در ويندوز NT,2000 بيابيد)

پارامترها: lpszDeviceName در ويندوز 95 و 98 اين استرينگ نول (خالي)است. ولي در ويندوز NT,2000 اين استرينگ اگر نول باشد صفحه نمايش فعلي را مشخص ميكند ويا ميتوانديكي ازمقادير زير باشد"\\.\DisplayX" كه مقدار X 1يا2ويا 3 ميباشد. iModeNum نوع مد گرافيكي كه ميخواهيم ستينگ آن را دريافت نماييم كه يكي از دو مقدار زير ميباشد ENUM_CURRENT_SETTINGS ستينگ گرافيك فعلي و فعال ENUM_REGISTRY_SETTINGS ستينگ گرافيك ذخيره شده در رجيستري ويندوز lpDevMode يك متغير از نوع DEVMODE كه اطلاعات دريافتي از ستينگ گرافيك را نگهداري مينمايد. و فقط از اين استراكچر مقادير فوق مفيد هستند dmBitsPerPixel, dmPelsWidth, dmPelsHeight, dmDisplayFlags, و dmDisplayFrequency قبل از صدا كردن تابع بايد طول استراكچر را داخل آن ست نمود. (به مثال توجه نماييد)

ثابتهاي مورد استفاده: Const ENUM_CURRENT_SETTINGS = -1 Const ENUM_REGISTRY_SETTINGS = -2

کتابخانه: User32

توابع مرتبط: ChangeDisplaySettings

نکات: ---

کد نمونه:

Option Explicit Const WM_DISPLAYCHANGE = &H7E Const HWND_BROADCAST = &HFFFF& Const EWX_LOGOFF = 0 Const EWX_SHUTDOWN = 1 Const EWX_REBOOT = 2 Const EWX_FORCE = 4 Const CCDEVICENAME = 32 Const CCFORMNAME = 32 Const DM_BITSPERPEL = &H40000 Const DM_PELSWIDTH = &H80000 Const DM_PELSHEIGHT = &H100000 Const CDS_UPDATEREGISTRY = &H1 Const CDS_TEST = &H4 Const DISP_CHANGE_SUCCESSFUL = 0 Const DISP_CHANGE_RESTART = 1 Const BITSPIXEL = 12 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 Declare Function EnumDisplaySettings Lib "user32" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As Long, ByVal iModeNum As Long, lpDevMode As Any) As Boolean 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 Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long Private Declare Function CreateDC Lib "gdi32" Alias "CreateDCA" (ByVal lpDriverName As String, ByVal lpDeviceName As String, ByVal lpOutput As String, ByVal lpInitData As Any) As Long Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Dim OldX As Long, OldY As Long, nDC As Long Sub ChangeRes(X As Long, Y As Long, Bits As Long) Dim DevM As DEVMODE, ScInfo As Long, erg As Long, an As VbMsgBoxResult 'Get the info into DevM erg = EnumDisplaySettings(0&, 0&, DevM) 'This is what we're going to change DevM.dmFields = DM_PELSWIDTH Or DM_PELSHEIGHT Or DM_BITSPERPEL DevM.dmPelsWidth = X 'ScreenWidth DevM.dmPelsHeight = Y 'ScreenHeight DevM.dmBitsPerPel = Bits '(can be 8, 16, 24, 32 or even 4) 'Now change the display and check if possible erg = ChangeDisplaySettings(DevM, CDS_TEST) 'Check if succesfull Select Case erg& Case DISP_CHANGE_RESTART an = MsgBox("You've to reboot", vbYesNo + vbSystemModal, "Info") If an = vbYes Then erg& = ExitWindowsEx(EWX_REBOOT, 0&) End If Case DISP_CHANGE_SUCCESSFUL erg = ChangeDisplaySettings(DevM, CDS_UPDATEREGISTRY) ScInfo = Y * 2 ^ 16 + X 'Notify all the windows of the screen resolution change SendMessage HWND_BROADCAST, WM_DISPLAYCHANGE, ByVal Bits, ByVal ScInfo MsgBox "Everything's ok", vbOKOnly + vbSystemModal, "It worked!" Case Else MsgBox "Mode not supported", vbOKOnly + vbSystemModal, "Error" End Select End Sub Private Sub Form_Load() Dim nDC As Long 'retrieve the screen's resolution OldX = Screen.Width / Screen.TwipsPerPixelX OldY = Screen.Height / Screen.TwipsPerPixelY 'Create a device context, compatible with the screen nDC = CreateDC("DISPLAY", vbNullString, vbNullString, ByVal 0&) 'Change the screen's resolution ChangeRes 640, 480, GetDeviceCaps(nDC, BITSPIXEL) End Sub Private Sub Form_Unload(Cancel As Integer) 'restore the screen resolution ChangeRes OldX, OldY, GetDeviceCaps(nDC, BITSPIXEL) 'delete our device context DeleteDC nDC End Sub