Abfrage der Bildschirmauflösung Intel Graphic - Ati/nVidia
Verfasst: 06.05.2014 09:55
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.
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()