Port DVI

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 5 oct. 2007 à 20:37
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 - 8 oct. 2007 à 20:37
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

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 oct. 2007 à 09:14
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
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
6 oct. 2007 à 09:58
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-
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 oct. 2007 à 11:01
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é.
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 oct. 2007 à 11:32
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..
    }
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 oct. 2007 à 11:38
Ces fonctions Win32 c'est un peu l'equivalent de la classe managée Screen.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
6 oct. 2007 à 12:00
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-
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 oct. 2007 à 12:11
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.. ).
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
6 oct. 2007 à 12:15
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-
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
6 oct. 2007 à 12:34
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-
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
6 oct. 2007 à 13:55
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..
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
6 oct. 2007 à 14:08
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-
0
ShareVB Messages postés 2676 Date d'inscription vendredi 28 juin 2002 Statut Membre Dernière intervention 13 janvier 2016 26
8 oct. 2007 à 00:31
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
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 oct. 2007 à 09:31
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.
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
8 oct. 2007 à 09:49
Je vais tester ça ce soir alors, je vous tiendrai au courant...
Merci

<hr />
-My Blog-
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
8 oct. 2007 à 13:21
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-
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
8 oct. 2007 à 15:02
moui dsl.. cette clé ça semble être plus les devices installés que les devices actuellement utilisés en fait. :/
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
8 oct. 2007 à 20:37
Moui :-/
J'essayerai ce que propose sharevb demain, là je viens de rentrer et je suis mort... trop la flegme :)

<hr />
-My Blog-
0
Rejoignez-nous