Port DVI

Signaler
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
-
Bonsoir,
Je cherche à savoir si j'ai un écran qui est connecté sur mon port DVI (c'est un laptop, et j'aimerais savoir si mon écran externe est branché...). J'ai un peu fouillé sur le net et franchement j'ai pas trouvé grand chose sur le sujet. Donc si quelqu'un à un peu de doc ou des idées....

Merci d'avance!

<hr />
-My Blog-

17 réponses

Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Salut Bidou, as tu regardé les fonctions Win32 en rapport avec le moniteur, ça ne te dira pas si ton moniteur est branché en DVI mais ça devrait être suffisant pour enumérer les moniteurs.

Multiple Display Monitors
http://msdn2.microsoft.com/en-us/library/ms534813.aspx
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
J'ai toujours eu de la peine avec ces  APIS Win32.... là je m'emmêle un peu les pinceaux. J'ai essayé ceci d'après la doc:

public
struct
RECT
{
  
long left;
  
long top;
  
long right;
  
long bottom;
}

[
DllImport(
"userd32.lib")]

public
static
extern
bool EnumDisplayMonitors(
IntPtr handle,
RECT rect, ...
Puis ensuite il veut une fonctione de callback?
Un tit coup de pouce please :)

Et si j'ai bien compris, les deux premiers paramètres seront des null....
????

<hr />
-My Blog-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
je vais regardé ça de près.. sinon déja je peux dire que si la méthode attend un pointeur de fonction, (callback) faudra passer un delegate managé.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
public partial class Form1 : Form
{
    [ StructLayout( LayoutKind.Sequential ) ]
    private struct RECT
    {
        public int Left;
        public int Top;
        public int Right;
        public int Bottom;
    } // RECT


    [ DllImport( "user32.dll", SetLastError = true ) ]
    private static extern bool EnumDisplayMonitors
    (
        IntPtr hdc,
        IntPtr lprcClip, // ref Rect si non-null.
        MonitorEnumProc lpfnEnum,
        IntPtr dwData
    );


    private delegate bool MonitorEnumProc
    (
        IntPtr hMonitor,
        IntPtr hdcMonitor,
        ref RECT lprcMonitor,
        IntPtr dwData
    );


    public Form1( )
    {
        InitializeComponent( );


        Button b = new Button( );
        b.Parent = this;
        b.Click += delegate
        {
            MonitorEnumProc callback = MonitorEnumCallback;
            EnumDisplayMonitors( IntPtr.Zero, IntPtr.Zero, callback, IntPtr.Zero );
        };
    }


    private bool MonitorEnumCallback( IntPtr hMonitor, IntPtr hdcMonitor, ref RECT lprcMonitor, IntPtr dwData )
    {
        Rectangle r = Rectangle.FromLTRB( lprcMonitor.Left,
            lprcMonitor.Top, lprcMonitor.Right, lprcMonitor.Bottom );


        MessageBox.Show( hMonitor + "\r\n" + r );


        return true; // Continue..
    }
}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Ces fonctions Win32 c'est un peu l'equivalent de la classe managée Screen.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
Merci pour ta réponse.
Mais à vrai dire je ne vois pas comment savoir si c'est un écran externe qui est branché? Car le callback ne retourne pas beaucoup d'infos !?
Dans la class Screen, j'ai pas trouvé ce que je voulais...

Moi ce que j'aimerais, dans l'ideal, c'est une fonction qui me retourne true ou false selon qu'un écran externe soit branché ou pas...

<hr />
-My Blog-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
je ne connais pas une telle fonction, mais avec EnumDisplayMonitors tu obtiens déja le nombres de moniteurs et leur handles respectifs ce qui permet d'appeler GetMonitorInfo ( qui donnera pas beaucoup plus d'infos c'est vrai.. ).
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
EnumDisplayMonitors semble me retourner un seul écran  (et que mon écran externe soit branché ou non, la fonction retourne la même chose on dirait...)

<hr />
-My Blog-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
j'ai rajouté:

[
StructLayout(
LayoutKind.Sequential)]

private
struct
MONITORINFO
{
  
UInt32 cbSize;
  
RECT rcMonitor;
  
RECT rcWork;

   UInt32 dwFlags;
}

[
DllImport(
"user32.dll", SetLastError =
true)]

private
static
extern
bool GetMonitorInfo
(
  
IntPtr hMonitor,
// handle to display monitor
   ref
MONITORINFO lprcClip
);

Puis:

privatebool MonitorEnumCallback(IntPtr hMonitor, IntPtr hdcMonitor, refRECT lprcMonitor, IntPtr dwData)
{
   Rectangle r = Rectangle.FromLTRB(lprcMonitor.Left,
   lprcMonitor.Top, lprcMonitor.Right, lprcMonitor.Bottom);
   MessageBox.Show(hMonitor + "\r\n" + r);
   MONITORINFO m = newMONITORINFO();
   GetMonitorInfo(hMonitor, ref m);
}

Mais ça retourne que des 0, et bien meme si ca retournais des valeurs, je vois pas trop à quoi ca me servirait... (c'est pas des infos intéressantes)

<hr />
-My Blog-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Je t'ai dit que ça donnait pas beaucoup plus d'infos, hormis le flag qui indique si c'est le moniteur principale et le nom du device vidéo ( MONITORINFOEX ).

C
e qui n'est pas normal c'est qu'avec plusieurs moniteurs le callback MonitorEnumCallback devrait être appéllé plusieurs fois ce qui donne le nombre de moniteurs connectés, c'est l'info qui aurait été la plus intéressante dans ton cas..
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
Ben non, elle est appellée qu'une fois (écran branché ou pas)...
Ca veut dire quoi, que je n'ai pas de solutions?

<hr />
-My Blog-
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
20
salut,

bon, même si c'est pas le langage exacte ;) (dsl, c'est du vb6), si ca peut servir : http://www.vbfrance.com/codes/OBTENIR-INFORMATIONS-SUR-MONITEUR-ECRAN-NUMERO-SERIE-TYPE_21507.aspx

normalement, le petit utilitaire dumpedid.exe renvoie les infos de l'écran qui est branché s'il y en a un mais je n'ai pas testé avec dvi...

ShareVB
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
Il est intéressant ton programme ShareVB, j'avais regardé du coté de Device Management dans le DDK mais je ne voyais pas comment exploiter ces fonctions. Ca retourne qlqs infos sur les moniteurs mais est-ce que ça indique si il est branché acrtuellement ou juste installé ?

Dans la même idée, il est peut être interessant de parcourir la clé de registre : 

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\DISPLAY

et de récupérer les devices de la classe "Monitor"..

Il me semble que même pour des moniteurs plug-and-play ces clés ne sont disponibles que si le moniteur est détécté au démarrage de Windows.
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
Je vais tester ça ce soir alors, je vous tiendrai au courant...
Merci

<hr />
-My Blog-
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
Bon j'ai rapidement testé la soluce de lutinore, mais dans la registry, rien ne semble changer... (peut-être parce que c'est pas du VGA mais du DVI?)
J'essayerai l'alternative de sharevb ce soir
Merci quand même pour vos idées...

<hr />
-My Blog-
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
39
moui dsl.. cette clé ça semble être plus les devices installés que les devices actuellement utilisés en fait. :/
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
56
Moui :-/
J'essayerai ce que propose sharevb demain, là je viens de rentrer et je suis mort... trop la flegme :)

<hr />
-My Blog-