سوالي دارم درباره refresh rate مانيتور

سلام به همه بچه هاي مجيد آنلايني

من برنامه اي آموزشي درست كردم با يكي از برنامه هاي مولتي مديا ، طوري اينرو طراحي كردم كه زماني كه اجرا شد رزوليشن مانيتور به 1152 در 864 تبديل مي شه اما بعد از اين تبديل refresh rate مانيتور به حداقل خودش بر مي گرده كه باعث اذيت شدن شديد چشم مي شه و مسلما براي يك برنامه آموزشي اين اتفاقي خيلي بديه

حالا چه جوري مي تونم يك برنامه يا يك قايل exe اي درست كنم كه وقتي اجرا شد refresh rate ‌مانيتور يوزر يا كسي كه اجراش كرد رو به حداكثري كه مانيتورش ساپورت مي كنه تبديل كنه. مثلا به 75 يا 85 هرتز تبديل بشه
 

the_king

مدیرکل انجمن
سلام به همه بچه هاي مجيد آنلايني

من برنامه اي آموزشي درست كردم با يكي از برنامه هاي مولتي مديا ، طوري اينرو طراحي كردم كه زماني كه اجرا شد رزوليشن مانيتور به 1152 در 864 تبديل مي شه اما بعد از اين تبديل refresh rate مانيتور به حداقل خودش بر مي گرده كه باعث اذيت شدن شديد چشم مي شه و مسلما براي يك برنامه آموزشي اين اتفاقي خيلي بديه

حالا چه جوري مي تونم يك برنامه يا يك قايل exe اي درست كنم كه وقتي اجرا شد refresh rate ‌مانيتور يوزر يا كسي كه اجراش كرد رو به حداكثري كه مانيتورش ساپورت مي كنه تبديل كنه. مثلا به 75 يا 85 هرتز تبديل بشه

کد زیر در ویژوال بیسیک این عمل را انجام می دهد :

کد:
Option Explicit

Private Const CCHDEVICENAME As Long = 32
Private Const CCHFORMNAME As Long = 32
Private Const CDS_TEST As Long = &H2
Private Const DM_DISPLAYFREQUENCY As Long = &H400000
Private Const DM_BITSPERPEL As Long = &H40000
Private Const DM_PELSHEIGHT As Long = &H100000
Private Const DM_PELSWIDTH As Long = &H80000
Private Const ENUM_CURRENT_SETTINGS As Long = (-1)

Private Type DEVMODE
    dmDeviceName As String * CCHDEVICENAME
    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 * CCHFORMNAME
    dmUnusedPadding As Integer
    dmBitsPerPel As Integer
    dmPelsWidth As Long
    dmPelsHeight As Long
    dmDisplayFlags As Long
    dmDisplayFrequency As Long
End Type

Private Declare Function ChangeDisplaySettings Lib "user32.dll" Alias "ChangeDisplaySettingsA" (ByRef lpDevMode As DEVMODE, ByVal dwFlags As Long) As Long
Private Declare Function EnumDisplaySettings Lib "user32.dll" Alias "EnumDisplaySettingsA" (ByVal lpszDeviceName As String, ByVal iModeNum As Long, ByRef lpDevMode As DEVMODE) As Long

Private Sub [B]MaxRefreshRate[/B]()
    Dim DM As DEVMODE
    Dim DM2 As DEVMODE
    Dim Index As Long
    Dim Result As Long
    Dim RefreshRate As Long
    Index = 0
    DM.dmSize = Len(DM)
    DM2.dmSize = Len(DM2)
    EnumDisplaySettings vbNullString, ENUM_CURRENT_SETTINGS, DM2
    Do
        Result = EnumDisplaySettings(vbNullString, Index, DM)
        If Result = 0 Then Exit Do
        If DM.dmPelsWidth = DM2.dmPelsWidth Then
            If DM.dmPelsHeight = DM2.dmPelsHeight Then
                If DM.dmBitsPerPel = DM2.dmBitsPerPel Then
                    If DM.dmDisplayFrequency > DM2.dmDisplayFrequency Then
                        DM2 = DM
                    End If
                End If
            End If
        End If
        Index = Index + 1
    Loop
    If DM2.dmDisplayFrequency > 1 Then
        DM2.dmFields = DM_DISPLAYFREQUENCY Or DM_BITSPERPEL Or DM_PELSHEIGHT Or DM_PELSWIDTH
        If ChangeDisplaySettings(DM2, CDS_TEST) = 0 Then
            ChangeDisplaySettings DM2, 0
        End If
    End If
End Sub

با نوشتم کد بالا کافیست تابع ()MaxRefreshRate فراخوانی شود :
کد:
    Call MaxRefreshRate

کد کامل برنامه به همراه فایل اجرایی EXE ضمیمه این پست می باشد.
 

پیوست ها

  • Max Refresh Rate.zip
    3.9 کیلوبایت · بازدیدها: 7
جناب the_King واقعا ازت ممنونم. نمي دوني كه منو از چه فاجعه اي نجات دادي . ديگه كم كم نزديك بود كه پروژه ام با شكست روبرو بشه فقط واسه همين يك برنامه كوچيك.
بازم ازت تشكر مي كنم
 

جدیدترین ارسال ها

بالا