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

Windows Discussion :

Changer la résolution d'écran temporairement, sans déformation du bureau


Sujet :

Windows

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut Changer la résolution d'écran temporairement, sans déformation du bureau
    Bonjour à tous,
    J'ai vu quelques codes source pour changer la résolution de l'écran mais automatiquement les icônes de mon bureau qui se trouvent en dehors de la zone de travail une fois celui-ci redimensionné, sont repositionnées.
    Ce qui fait que, lorsque la résolution de mon écran est remise à sa valeur initiale, je dois également replacer mes icônes.

    Or BSPlayer ou les jeux vidéos, lorsqu'ils modifient la résolution de l'écran, ne créent pas ce genre de problème.

    Savez-vous quelle fonction ils pourraient utiliser?

    Merci d'avance,
    Nicolas

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Je crois qu'ils font directement du DirectX plein écran, il doit y avoir un moyen de choisir la résolution quand tu fais ça...

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut
    Je viens effectivement de tomber sur une source VB6 qui fait cela.

    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Dim DX As DirectDraw2
     
    Private Sub Form_Load()
         DirectDrawCreate ByVal 0&, DX, Nothing
         DX.SetCooperativeLevel Me.hWnd, DDSCL_EXCLUSIVE Or DDSCL_FULLSCREEN
         DX.SetDisplayMode 640, 480, 16, 0, 0
    End Sub
     
    Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Unload Me
    End Sub
     
    Private Sub Form_Unload(Cancel As Integer)
     
        DX.RestoreDisplayMode
        Set DX = Nothing
    End Sub

    C'est relativement simple sauf que je travaille en C# et que je ne peux donc pas utiliser les fonctions de VB mais seulement les APIs Windows, voire les fonctions du framework...

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Tu peux essayer de voir si ça passe en VB.Net.
    Si ça passe, tu pourras toujours en faire une assembly utilisable depuis C#, ou carrément traduire le code VB.Net en C#...

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut
    J'ai tenté de convertir le code en VB.NET et ça ne fonctionne pas.
    Il ne reconnait pas DirectDrawCreate.
    Par contre j'ai remarqué qu'il importait un COM pour les opérations de DirectX donc je préfèrerais trouver un autre moyen que d'utiliser ces fonctions.

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par NicolasJolet
    Or BSPlayer ou les jeux vidéos, lorsqu'ils modifient la résolution de l'écran, ne créent pas ce genre de problème.

    Savez-vous quelle fonction ils pourraient utiliser?
    Parce qu'à priori, ils ne modifient pas la résolution du bureau, mais créent une nouvelle fenêtre DirectX / OpenGL qui est affichée en plein écran. Alors que toi, si j'ai bien compris, c'est la résolution du bureau que tu modifies, donc ce dernier réarange ses icones.
    Que veux-tu faire avec ta nouvelle résolution ?

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut
    Ce que je veux en faire est assez simple.
    Pour regarder une vidéo de mon PC sur ma télévision, il faut que je passe en 800*600.
    BSPlayer intègre une fonctionnalité qui permet de modifier facilement la résolution de l'écran. Mais depuis quelques temps il intègre également un spyware dans sa version gratuite.
    Je suis donc passé à Media Player Classic mais celui-ci ne permet pas de changer la résolution (ou je n'ai pas trouvé l'option).

    Pour palier à ce manque, je voulais développer une petite application qui permettrait de changer la résolution temporairement.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Je ne crois pas que les jeux et les lecteurs de media (video) procèdent de la même façon en la matière.

    Les jeux utilisent effectivement DirectX en mode plein-écran, avec une commutation du mode video (changements de résolution et de fréquence de balayage). Lorsqu'on fait la même chose avec l'API win32, on se heurte au problème décrit. La différence entre les 2, c'est que les fonctions de commutation (aller et retour) de DirectX prennent soin de sauvegarder puis de restorer les icones du bureau, ce qui n'est pas fait (automatiquement) par win32 mais qu'on peut faire manuellement dans son propre code.

    Les lecteurs media eux ne commutent généralement pas le mode video mais se contente simplement de virer les éléments système (barre de titre, bordures...) de la fenêtre de visu et de la stretcher pour qu'elle recouvre tout l'écran : le problème des icones du bureau ne se pose évidemment pas dans ces conditions.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut
    Citation Envoyé par rigobert
    Je ne crois pas que les jeux et les lecteurs de media (video) procèdent de la même façon en la matière.

    Les jeux utilisent effectivement DirectX en mode plein-écran, avec une commutation du mode video (changements de résolution et de fréquence de balayage). Lorsqu'on fait la même chose avec l'API win32, on se heurte au problème décrit. La différence entre les 2, c'est que les fonctions de commutation (aller et retour) de DirectX prennent soin de sauvegarder puis de restorer les icones du bureau, ce qui n'est pas fait (automatiquement) par win32 mais qu'on peut faire manuellement dans son propre code.
    Comment faire pour sauvegarder et restaurer les icônes? Ceci dit, même si j'arrive à sauvegarder la position de mes icônes, j'aurais qd mm un problème avec l'API ChangeDisplaySettings car si mon application plante ou est killée, ma résolution initiale ne sera pas restaurée...

    Citation Envoyé par rigobert
    Les lecteurs media eux ne commutent généralement pas le mode video mais se contente simplement de virer les éléments système (barre de titre, bordures...) de la fenêtre de visu et de la stretcher pour qu'elle recouvre tout l'écran : le problème des icones du bureau ne se pose évidemment pas dans ces conditions.
    Si j'ai bien compris, ce que tu expliques est pour mettre une fenêtre en plein écran. Si c'est bien cela, ce n'est pas ma question ici. Peu importe que mon application soit minimisée, normale ou maximisée, je voudrais pouvoir changer la résolution de mon écran.

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par NicolasJolet
    Comment faire pour sauvegarder et restaurer les icônes?
    La seule méthode que je connaisse est un peu compliquée, faute d'API dédiée.
    En gros il faut localiser le ListView du bureau puis parcourir ses items.
    La difficulté étant qu'il se trouve dans un autre espace d'adressage et que donc une bonne connaissance de la communication inter-processus et des hooks est nécessaire pour espérer parvenir à un résultat.

    Citation Envoyé par NicolasJolet
    Ceci dit, même si j'arrive à sauvegarder la position de mes icônes, j'aurais qd mm un problème avec l'API ChangeDisplaySettings car si mon application plante ou est killée, ma résolution initiale ne sera pas restaurée...
    Pas forcément, avec une bonne gestion d'exceptions il est possible de récupérer la plupart des situations de crash.
    Et puis, sur ce point précis, les "autres" (les jeux par ex) sont logés à la même enseigne.

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    413
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 413
    Points : 286
    Points
    286
    Par défaut
    En gros j'ai l'impression qu'utiliser les APIs standards se révèle bien plus complexe que d'utiliser DirectX
    A mon avis je vais plutôt chercher comment utiliser les APIs DirectX
    Citation Envoyé par rigobert
    Et puis, sur ce point précis, les "autres" (les jeux par ex) sont logés à la même enseigne.
    Je n'ai pas souvenir d'avoir déjà eu ma résolution qui ne redevenait pas "normale" après le plantage ou le kill d'un jeu...

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 464
    Points : 542
    Points
    542
    Par défaut
    Citation Envoyé par NicolasJolet
    En gros j'ai l'impression qu'utiliser les APIs standards se révèle bien plus complexe que d'utiliser DirectX
    Pas toujours, ça dépend de ce qu'on cherche à faire. La toute première raison de l'utilisation de DirectX est la recherche de la performance, pas de la simplicité.

    Citation Envoyé par NicolasJolet
    Je n'ai pas souvenir d'avoir déjà eu ma résolution qui ne redevenait pas "normale" après le plantage ou le kill d'un jeu...
    Ca dépend de l'OS et de la version du runtime de DirectX; par ex sous XP et DX9 ça se passe en effet généralement pas trop mal.

Discussions similaires

  1. [AC-2007] Changer la Résolution d'écran
    Par sameros dans le forum VBA Access
    Réponses: 2
    Dernier message: 06/09/2009, 07h54
  2. changer la résolution d'écran
    Par boadog dans le forum Graphisme
    Réponses: 3
    Dernier message: 13/01/2007, 12h22
  3. Changer le résolution d'écran
    Par faico dans le forum Interfaces Graphiques en Java
    Réponses: 9
    Dernier message: 19/06/2006, 00h52
  4. Changer la résolution d'écran par batch
    Par peel_retrogames dans le forum Windows
    Réponses: 2
    Dernier message: 29/05/2006, 21h40
  5. Changer la résolution de l'écran
    Par Azharis dans le forum Windows
    Réponses: 2
    Dernier message: 14/10/2005, 19h41

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