Seite 1 von 1

Abfrage der Bildschirmauflösung Intel Graphic - Ati/nVidia

Verfasst: 06.05.2014 09:55
von Marty2PB
Ja Moin :) ,

Ich hab hier ein Merkwürdiges Phänomen. Bei der Bildschrim abrfrage über 'EnumDisplaySettings_(@device\DeviceName,x,settings)' bekomme ich bei den "Intel HD Graphic" verdrehte Auflösungen.

Also über settings\dmPelsWidth is es 480 und settings\dmPelsHeight ist es 640. Bei mir zuhause mit ATI HD 7850 bekomme ich die settings normal. Also settings\dmPelsWidth is es 640 und settings\dmPelsHeight ist es 480. Bei einem Kollegen der nVidia hat wird die Auflösung auch Richtig angezeigt.

Code: Alles auswählen


    Structure WINDOWS_DISPLAYS
         iDisN.l                    ;// ID
         iDisW.l                    ;// Width
         iDisH.l                    ;// Height
         iDisB.l                    ;// Bits
         iDisR.l                    ;// Refresh
         iDisF.s                    ;// Form Ratio
    EndStructure
     
    Global NewList DisplayScreens.WINDOWS_DISPLAYS()  

Procedure gcd(a,b)
        If b=0
            ProcedureReturn a
        Else
            ProcedureReturn gcd(b,a%b)
        EndIf
    EndProcedure
     
  Procedure.i GetScreenResolutions()
  
    Protected device.DISPLAY_DEVICE
    Protected settings.DEVMODE
    Protected x,y
    Protected gcd, aspectRatio$, AddMode
    
    device\cb = SizeOf(DISPLAY_DEVICE) 
    
    settings\dmSize = SizeOf(DEVMODE) 
    
    EnumDisplayDevices_(#Null,#Null,device,#Null)
    
    While EnumDisplaySettings_(@device\DeviceName,x,settings)       
        x+1
        AddMode = 1   
        iMax = ListSize(DisplayScreens())
        If iMax <> 0
           ResetList(DisplayScreens()) 
           While NextElement(DisplayScreens())
               With DisplayScreens()
                   If \iDisW.l  = settings\dmPelsWidth And
                      \iDisH.l  = settings\dmPelsHeight And
                      \iDisB.l  = settings\dmBitsPerPel And
                      \iDisR.l  = settings\dmDisplayFrequency
                       AddMode = 0                     
                   EndIf    
               EndWith
          Wend
        EndIf
        
        If (AddMode = 1)
           y+1 
            AddElement(DisplayScreens())
        
            With DisplayScreens()            
            
                \iDisN.l  = y
                \iDisW.l  = settings\dmPelsWidth
                \iDisH.l  = settings\dmPelsHeight
                \iDisB.l  = settings\dmBitsPerPel
                \iDisR.l  = settings\dmDisplayFrequency
               
                gcd  = gcd(\iDisW.l,\iDisH.l)
            
                aspectRatio$ = Str(\iDisW.l/gcd)+":"+Str(\iDisH.l/gcd)
                Debug aspectRatio$+" -- "+\iDisW.l+" x"+\iDisH.l
            
                Select aspectRatio$ ;change into more common values
                    Case "8:5"      : \iDisF.s  = "16:10"
                    Case "16:9"     : \iDisF.s  = "16:9"
                    Case "4:3"      : \iDisF.s  = "4:3"
                    Case "85:64"    : \iDisF.s  = "4:3"                    
                    Case "5:3"      : \iDisF.s  = "5:3"
                    Case "32:15"    : \iDisF.s  = "15:9"                     
                    Case "5:4"      : \iDisF.s  = "5:4"
                    Case "85:48"    : \iDisF.s  = "16:9"
                    Case "683:384"  : \iDisF.s  = "16:9"                   
                    Case "222:125"  : \iDisF.s  = "16:9"
                    Case "3:2"      : \iDisF.s  = "3:2"
                EndSelect          
            EndWith   
        EndIf    
        Wend
    EndProcedure

GetScreenResolutions()