IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez .NET Discussion :

[M1][W1][N1][D1] Comment détecter un changement de résolution? [Trucs & Astuces]


Sujet :

Contribuez .NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 61
    Points : 28
    Points
    28
    Par défaut [M1][W1][N1][D1] Comment détecter un changement de résolution?
    Bonjour,

    Je cherche à faire fonctionner ce code:
    http://www.devx.com/vb2themax/Tip/18412

    Dans l'espoir de pouvoir détecter les changements de résolution du moniteur.

    En début de code il y a en commentaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ' REQUIRES THE MSGHOOK.DLL COMPONENT
    En effet, un peu plus loin ils déclarent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim WithEvents FormHook As MsgHook
    Alors j'ai trouvé à l'adresse suivante cette dll:
    http://www.magicsoftware.co.jp/mginf...v7/msgh004.lzh

    Mais, étant débutant peut-être, je n'arrive pas à l'intégrer à mon projet! Si je l'ajoute aux référence, j'ai les messages d'erreur suivant:
    vbc : error BC31011: Impossible de charger la bibliothèque référencée 'C:\MsgHook.dll'*: Erreur système &H8013110b&

    vbc : error BC30142: Impossible de générer une référence au fichier 'C:\MsgHook.dll' (utilisez l'utilitaire TLBIMP pour faire référence aux DLL COM)*: Erreur système &H8013110b&
    Alors j'ai essayé d'utiliser l'utilitaire "TLBIMP" comme ils disent, mais ça me dit que ma library n'est pas au bon format.
    JE pense en fait que de sa nature "COM" cette DLL à une façon particuliere de s'intégrer au projet, avec quelque chose dans l'assemblage, mais je ne sais pas quoi

    Si quelqu'un pouvait m'aider s'il vous plait, ça fait 2 jours non stop que je suis dessus!!!

  2. #2
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Je viens de solutionner mon problème, sans utiliser de Hook. Avec le code suivant on peut déctecter de maniere ultra simple un changement de résolution du moniteur!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub MainFormLoad(sender As System.Object, e As System.EventArgs)
    			AddHandler Microsoft.Win32.SystemEvents.DisplaySettingsChanged,AddressOf DetectScreenChanged
     
    		End Sub
     
    		Private Sub DetectScreenChanged(ByVal sender As System.Object,ByVal e As System.EventArgs)
    			MessageBox.Show("changé!")
    		End Sub
    c'est pas beau ça!

  3. #3
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    pour le

    PS: C'est un problème récurrent sur la toile, tout le monde cherche à passer par un système de Hook à l'aide de la constante WM_DISPLAYCHANGE qui est envoyé lors d'un changement de résolution aux fênetre. Mais cest lourd à mettre en place, et ça plante souvent si c'est pas bien utilisé (en deux jours moi je ne suis pas arrivé à le faire fonctionner ). Sur la FAQ de Visual Basic il y a un code pour détecter un changement de résolutionen passant par ce type de Hook.
    Mais pas en VB.NET, ça serait peut-être pas mal pour la FAQ de VB.NET (sans passer par les hooks en plus ). D'autant que c'ets super utile pour les programmeurs de jeux

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Aïe, Aîe, Aïe, j'ai une erreur!
    Dans une application WindowsForms, tout marche bien, mais si je fait un AddHandles dans mon plugin pour meedio, tout marche bien, sauf qu'à la sortie, j'ai une erreur. (Un bruit d'erreur, mais pas de log).

    J'ai essayé de mettre exctement la même expression en "RemoveHandles" sur la fermeture de Meedio, mais ça ne marche pas! Il doit rester quelque chose de créer par le AddHandles qui ne veut pas se barrer!

    Pouvez vous m'aider?

    EDIT: peut-être un delegate créé? comment l'effacer?

    Regardez, même si je fais celà au lancement de mon plugin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    AddHandler Microsoft.Win32.SystemEvents.DisplaySettingsChanged,AddressOf ResizePopups
    RemoveHandler Microsoft.Win32.SystemEvents.DisplaySettingsChanged,AddressOf ResizePopups
    C'est à dire les deux actions à la suite, ben à la sortie de Meedio (dont mon plugin fait partie) J'ai une erreur!

    Comment puis je completement à cours sûr suprrimer le "AddHandler" créé? n'y aurai t il pas un objet de créer par là avec cette méthode? A Effacer?

    Je pense qu'un Delegate est créé, peut-être qu'il est en conflit avec celui de Meedio (Meedio aussi réagit au changement de résolution), et qu'il n'est pas effacé à la fin...

    SVP, aidez moi, ce pb à l'air simple, pourtant je ne trouve pas de solutions
    J'ai encore du mal à comprendre le système des delegates...

  6. #6
    Membre actif
    Avatar de troxsa
    Inscrit en
    Novembre 2004
    Messages
    386
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Novembre 2004
    Messages : 386
    Points : 264
    Points
    264
    Par défaut
    Bonjour

    Il y a aussi WMI
    je crois que la class est Win32_Screen

    @+

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    Je ne dois pas être assez expérimenté pour connaitre "WMI", de quoi s'agit il? En quoi celà va t il pouvoir corriger mon bug?

    Merci pour ta réponse!

    EDIT: D'accord, je viens de faire des recherches, la class exact est celle-ci -> http://www.secretswindows.com/index....figuration.htm
    Donc le WMI, permet par des scripts de faire la même chose... MAis honnêtement, je ne connais pas bien les scripts. Et puis là j'ai quelque chose qui marche, mais j'ai une erreur en sortie, à partir du moment où je met un "AddHandlers"... C'est quand même bête!!

    Bon ben c'est bon, bug résolue.

    Il faut savoir donc, que pour un plugin, il vaut mieux éviter de faire les appels "AddHandler" sur le thread principal! Créer un nouveau thread pour passer les appels. Et vous n'aurez aucun bug (et pas à passer l'après midi à chercher d'où ça peut bien venir ).

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Lazarus] Comment détecter le changement d'un TEdit
    Par weberick dans le forum Lazarus
    Réponses: 5
    Dernier message: 22/11/2008, 09h33
  2. Réponses: 2
    Dernier message: 16/07/2008, 08h41
  3. [Langue Clavier] Comment détecter le changement de la langue ?
    Par Fares BELHAOUAS dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 30/09/2004, 19h26
  4. Comment détecter un changement du réglage de voume sonore ?
    Par mjlub dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 09/01/2004, 17h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo