A voir également:
- C++, changer la résolution d'ecran
- Changer dns - Guide
- Double ecran - Guide
- Capture d'écran whatsapp - Accueil - Messagerie instantanée
- Changer orientation ecran pc - Guide
- Changer carte graphique - Guide
5 réponses
merci damien. depuis ke tas posté jai cherché un peu...bon deja jai vu sur msdn jai un peu de mal a capter comment ca marche, cest pas super bien expliqué, mais ca je vais approfonfir...c'est possible de faire un prog en tache de fond (systray si jai bien tt suivi) qui me change une fois la résolution au lancement, et une autre fois a la fermeture? (dailleurs si vous avez des explications plus concretes que msdn, je veux bien....)
merci d'avance
merci d'avance
bon voila apres avoir fouillé comme tu m'as dis j'ai fait le code suivant qui n'a aucun effet....queski se passe? keske j'ai mal fait?
#include "stdafx.h"
int chgScreenResolution()
{
DEVMODE dvMode;
//ZeroMemory(&dvMode, sizeof(dvMode));
//la ligne precedente, a quoi elle sert? pourquoi faut mettre tous les bits a zero? si qqun peut m'expliquer....
dvMode.dmSize = sizeof(dvMode);
const unsigned long lWidth = 800;
const unsigned long lHeight = 600;
const unsigned long lBits = 32;
dvMode.dmPelsWidth = lWidth;
dvMode.dmPelsHeight = lHeight;
dvMode.dmBitsPerPel = lBits;
ChangeDisplaySettings(&dvMode, 0);
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
chgScreenResolution();
return 0;
}
#include "stdafx.h"
int chgScreenResolution()
{
DEVMODE dvMode;
//ZeroMemory(&dvMode, sizeof(dvMode));
//la ligne precedente, a quoi elle sert? pourquoi faut mettre tous les bits a zero? si qqun peut m'expliquer....
dvMode.dmSize = sizeof(dvMode);
const unsigned long lWidth = 800;
const unsigned long lHeight = 600;
const unsigned long lBits = 32;
dvMode.dmPelsWidth = lWidth;
dvMode.dmPelsHeight = lHeight;
dvMode.dmBitsPerPel = lBits;
ChangeDisplaySettings(&dvMode, 0);
return 0;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
chgScreenResolution();
return 0;
}
Bon en ce qui concerne le changement de resolution, tout d'abord, la ligne
ZeroMemory(&dvMode, sizeof(dvMode));
sert à t'assurer que tous les "champs" de ta structure seront bien initialisé à 0.
Ensuite dans ton appel à ChangeDisplaySettings, il faut que ta structure soit completement definis, il ne suffit pas seulement de positionner dmPelsWidth et qq autres.
En fait le meilleur moyen est de faire appel à la fonction EnumDisplaySettings, jusqu'a que tu trouve une resolution conforme à ce que tu souhaite et ensuite la passer à ChangeDisplaySettings et le tour est joué.
par ex:
while(EnumDisplaySettings(NULL, i, pscreenRes))
{
if(pscreenRes->dmPelsWidth == 1024 && pscreenRes->dmBitsPerPel == 16)
{
_wmemcpy(pscreenRes2, pscreenRes, sizeof(DEVMODE));
}
i++;
}
ChangeDisplaySettings(pscreenRes2, 0);
A+
Damien
ZeroMemory(&dvMode, sizeof(dvMode));
sert à t'assurer que tous les "champs" de ta structure seront bien initialisé à 0.
Ensuite dans ton appel à ChangeDisplaySettings, il faut que ta structure soit completement definis, il ne suffit pas seulement de positionner dmPelsWidth et qq autres.
En fait le meilleur moyen est de faire appel à la fonction EnumDisplaySettings, jusqu'a que tu trouve une resolution conforme à ce que tu souhaite et ensuite la passer à ChangeDisplaySettings et le tour est joué.
par ex:
while(EnumDisplaySettings(NULL, i, pscreenRes))
{
if(pscreenRes->dmPelsWidth == 1024 && pscreenRes->dmBitsPerPel == 16)
{
_wmemcpy(pscreenRes2, pscreenRes, sizeof(DEVMODE));
}
i++;
}
ChangeDisplaySettings(pscreenRes2, 0);
A+
Damien
ok merci. juste qqs questions sur ce bout de code.
a prpos de enumdisplaydevice, deja quest ce qui fait qu'il devient false et que la boucle sarrete? ensuite pk mettre le peripherique sur NULL, ca donne lecran par defaut cest ca? le mode grapgique cest un nombre compris entre 0 et un autre truc, et la boucle sarrete des ke i devient invalide paske a ce moment enumdisplaydevice devient FALSE?
ensuite psscreenres, cest un pointeur? et mes psscreenres, cest koi, cest des DEVMODE que jai declaré plus haut? deja merci pour cette source, ca meclaircit deja un peu, mais ya encore qqs trucs flous....je debute.....
a prpos de enumdisplaydevice, deja quest ce qui fait qu'il devient false et que la boucle sarrete? ensuite pk mettre le peripherique sur NULL, ca donne lecran par defaut cest ca? le mode grapgique cest un nombre compris entre 0 et un autre truc, et la boucle sarrete des ke i devient invalide paske a ce moment enumdisplaydevice devient FALSE?
ensuite psscreenres, cest un pointeur? et mes psscreenres, cest koi, cest des DEVMODE que jai declaré plus haut? deja merci pour cette source, ca meclaircit deja un peu, mais ya encore qqs trucs flous....je debute.....
Salut,
Alors enumDisplaySettings ( attention ne pas confondre EnumDisplayDevice et EnumDisplaySettings) s'arrete en cas d'erreur ou si i est sup au dernier mode possible:
Graphics mode indexes start at zero. To obtain information for all of a display device's graphics modes, make a series of calls to EnumDisplaySettings, as follows: Set iModeNum to zero for the first call, and increment iModeNum by one for each subsequent call. Continue calling the function until the return value is zero.
EN allant de i=0 jusqu'a ce que EnumDisplayDevice te sorte 0 tu continue afin d'enumerr tous les modes
Mettre le periph à NULL enumere les modes pour le device graphique par default. Sinon un serie d'appel à EnumDisplayDevice pour pouvoir enumerer tous les modes possibles pouir tous les device graphiques.
pscreenRes est un pointeur vers DEVMODE. DEVMODE est une structure qui contient des infos sur un mode graphique ( en tres gros).
Pour memcpy, voir l'equivalent Win32 CopyMemory sur MSDN, le dernier parametres represente la taille que tu veux copier.
A+
Damien
Alors enumDisplaySettings ( attention ne pas confondre EnumDisplayDevice et EnumDisplaySettings) s'arrete en cas d'erreur ou si i est sup au dernier mode possible:
Graphics mode indexes start at zero. To obtain information for all of a display device's graphics modes, make a series of calls to EnumDisplaySettings, as follows: Set iModeNum to zero for the first call, and increment iModeNum by one for each subsequent call. Continue calling the function until the return value is zero.
EN allant de i=0 jusqu'a ce que EnumDisplayDevice te sorte 0 tu continue afin d'enumerr tous les modes
Mettre le periph à NULL enumere les modes pour le device graphique par default. Sinon un serie d'appel à EnumDisplayDevice pour pouvoir enumerer tous les modes possibles pouir tous les device graphiques.
pscreenRes est un pointeur vers DEVMODE. DEVMODE est une structure qui contient des infos sur un mode graphique ( en tres gros).
Pour memcpy, voir l'equivalent Win32 CopyMemory sur MSDN, le dernier parametres represente la taille que tu veux copier.
A+
Damien
merci pour ts tes conseils, desormais ca marche, mais il y a un hic...apres l'éxecution du programme, j'ai une espece de balayage sur l'écran....c'est du a quoi?c'est tres moche et tres desagreable...
ensuite je vais essayer de me demerder pour mettre tout ca ds le systray, si j'ai des problemes je reposterais.
encore merci
a+
ensuite je vais essayer de me demerder pour mettre tout ca ds le systray, si j'ai des problemes je reposterais.
encore merci
a+
Salut,
Rassure-moi, tu n'as pas posté tout ton code....sinon c'est normal que cela ne fonctinne pas ;-)
Je recupere qq vieux exemples pour une reponse un peu plus tard
A+
Damien
Rassure-moi, tu n'as pas posté tout ton code....sinon c'est normal que cela ne fonctinne pas ;-)
Je recupere qq vieux exemples pour une reponse un peu plus tard
A+
Damien
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bah jai posté tt mon code, en me disant que ce code me changerais la résolution et pi basta. la ca ne fait strictement rien. avec ca je voulais juste changer la resolution, point barre. meme pas, ca fait rien. et je capte pas pk, ya un truc ki ma echappé, mais faut dire ke pr un debutant, msdn est fantastique, on capte tt en un instant...franchement je trouve cest merdique comme cest expliqué. bon sur ce, merci davance a tt le monde pr les autres reponses qui jespere arriveront bientot...