Voici une petite source montrant comment effectuer une rotation d'écran sur un écran en particulier.
Le code principal se décompose en 3 méthodes d'extensions de la classe System.Windows.Forms.Screen et Screen().
Elles permettent d'effectuer une rotation, d'obtenir l'orientation actuel de l'écran et de lister les noms des écrans.!
Source / Exemple :
Imports System.Runtime.CompilerServices
Module RotateScreen
Const ENUM_CURRENT_SETTINGS As Integer = -1
Const DISP_CHANGE_SUCCESSFUL As Integer = 0
Const DISP_CHANGE_BADDUALVIEW As Integer = -6
Const DISP_CHANGE_BADFLAGS As Integer = -4
Const DISP_CHANGE_BADMODE As Integer = -2
Const DISP_CHANGE_BADPARAM As Integer = -5
Const DISP_CHANGE_FAILED As Integer = -1
Const DISP_CHANGE_NOTUPDATED As Integer = -3
Const DISP_CHANGE_RESTART As Integer = 1
<Extension()> _
Public Function GetNames(ByVal param As System.Windows.Forms.Screen()) As String()
Dim x As New List(Of String) '= Array.CreateInstance(GetType(String), param.Length)()
For i As Integer = 0 To param.Length - 1
x.Add(param(i).DeviceName)
Next
Return x.ToArray()
End Function
<Extension()> _
Public Sub SetOrientation(ByVal param As System.Windows.Forms.Screen, ByVal value As System.Windows.Forms.ScreenOrientation)
Try
'Récupère la config. actuelle.
Dim dm As DEVMODE = DEVMODE.Create()
NativeMethods.EnumDisplaySettings(param.DeviceName, ENUM_CURRENT_SETTINGS, dm)
'Et suivant l'orientation déjà appliquée on échange largeur <-> longueur si besoin est.
Select Case dm.dmDisplayOrientation
Case System.Windows.Forms.ScreenOrientation.Angle0, System.Windows.Forms.ScreenOrientation.Angle180
If value = Windows.Forms.ScreenOrientation.Angle90 Or value = Windows.Forms.ScreenOrientation.Angle270 Then
Dim iswap As Integer = dm.dmPelsHeight
dm.dmPelsHeight = dm.dmPelsWidth
dm.dmPelsWidth = iswap
End If
Case System.Windows.Forms.ScreenOrientation.Angle90, System.Windows.Forms.ScreenOrientation.Angle270
If value = Windows.Forms.ScreenOrientation.Angle0 Or value = Windows.Forms.ScreenOrientation.Angle180 Then
Dim iswap As Integer = dm.dmPelsHeight
dm.dmPelsHeight = dm.dmPelsWidth
dm.dmPelsWidth = iswap
End If
End Select
dm.dmDisplayOrientation = value
'Puis on applique le changement de paramètres.
NativeMethods.ChangeDisplaySettingsEx(param.DeviceName, dm, IntPtr.Zero, 0, IntPtr.Zero)
Catch ex As Exception
End Try
End Sub
<Extension()> _
Public Function GetOrientation(ByVal param As System.Windows.Forms.Screen) As System.Windows.Forms.ScreenOrientation
'Récupère la config de l'écran demandée.
Dim dm As DEVMODE = DEVMODE.Create()
NativeMethods.EnumDisplaySettings(param.DeviceName, ENUM_CURRENT_SETTINGS, dm)
Return dm.dmDisplayOrientation
End Function
End Module
Conclusion :
A noter que cette fonctionnalité n'est pas supportée par tout les pilotes graphiques.
(Testé sous Windows 7)
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.