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

C++ Discussion :

SystemParametersInfo : ne fait rien


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Par défaut SystemParametersInfo : ne fait rien
    Bonjour,
    je suis actuellement en train de créer plusieurs fonctions pour un programme. Certaines de ces fonction font simplement appel à "SystemParametersInfo". Mais mon problème est que ça ne fonctionne pas...

    Voilà l'une de mes fonctions qui ne fonctionne visiblement pas, elle permet normalement de changer le fond d'écran. Les paramètres de la fonction sont obligatoirement comme ça (c'est une restriction à laquelle je dois faire face) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    short WINAPI DLLExport act_SetDeskWallpaper(LPRDATA rdPtr, long param1, long param2)
    {
    	LPSTR path	= (LPSTR)param1;
    	int save	= ((BOOL)param2!=0)?(SPIF_UPDATEINIFILE):(0);
    	SystemParametersInfo(SPI_SETDESKWALLPAPER,0,path,SPIF_SENDCHANGE | save);
    	return 0;
    }
    Comme précisé, je ne peux pas changer le prototype qui est une restriction car c'est destiné à la création d'une DLL utilisée comme plugin pour un autre logiciel.

    Cette fonction récupère deux arguments "param1" et "param2". Le premier est casté en Chaine de caractère (utilisée pour le chemin du wallpaper) et le deuxieme sert à indiquer si le changement doit être sauvé pour l'utilisateur ou temporaire (true/false).

    Un peu d'aide ou une piste pour savoir pourquoi ça ne fonctionne pas me serait très utile.

    Merci beaucoup d'avance,
    Sphax

  2. #2
    Membre expérimenté Avatar de Rupella
    Inscrit en
    Février 2005
    Messages
    286
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 286
    Par défaut
    Si ca ne marche pas, que retourne la fonction, ainsi que GetLastError() si la fonction est en erreur (tant qu'a faire, le message en clair, récupéré avec FormatMessate() - ref. MSDN)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Par défaut
    Merci pour cette piste !
    J'ai donc rajouté deux fonctions à ma DLL plugin pour récupérer l'erreur et j'obtiens l'erreur suivante :
    - Erreur 5 : Accès refusé

    Que faut-il faire pour avoir accès à cette fonction ?

  4. #4
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Sphaxou
    j'obtiens l'erreur suivante :
    - Erreur 5 : Accès refusé
    Que faut-il faire pour avoir accès à cette fonction ?
    C'est tout bonnement que pour effectuer cette opération tu n'as pas les droits utilisateurs pour le faire ( administrateur ? ) ou bien qu'il faille effectuer d'autres initialisations.

    short WINAPI DLLExport act_SetDeskWallpaper(LPRDATA rdPtr, long param1, long param2)
    {
    LPSTR path = (LPSTR)param1;
    Pourquoi passer un long en paramêtre ( long param1) qui est converti en LPSTR ?
    Eviter les "casts" à tout prix.
    Je ne comprends pas pourquoi tu passes un long alors qu'il suffit de passer un TCHAR ou LPSTR.
    Mets un point d'arrêt sur la ligne d'affectation ci-dessus et regardes ce que vaut path.
    Je suis persuadé que path vaut n'importe quoi sauf un fichier valide d'image

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 6
    Par défaut
    Je suis pourtant administrateur sur mon PC...

    Pour le prototype, j'ai bien précisé que je ne peux pas le changer car c'est un prototype type pour une DLL utilisé comme plugin par un logiciel. C'est une restriction à laquelle je dois faire face.
    Cependant le cast ne pose aucun problème car j'ai déjà fait d'autres fonctions du type et elles fonctionnent (comme changer le titre de l'application).

    Le problème est l'erreur étrange...

    tu dit :
    ou bien qu'il faille effectuer d'autres initialisations.
    Quel genre d'initialisations ?

    Merci pour l'aide

    EDIT: Je précise que changer le Wallpaper ne fonctionne pas tout comme TOUTES les autres constantes utilisées avec "SystemParametersInfo" sauf les constantes GET.

  6. #6
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Sphaxou
    Cependant le cast ne pose aucun problème car j'ai déjà fait d'autres fonctions du type et elles fonctionnent (comme changer le titre de l'application).
    Si quelqu'un peut m'expliquer comment d'un long on obtient une chaine de caractêres je lui tire ma révérence.
    Un long c'est 4 octets en général donc ça fait 4 caractères suffisant pour stocker ".bmp" par exemple

    Tu déclares ceci:
    short WINAPI DLLExport act_SetDeskWallpaper(LPRDATA rdPtr, long param1, long param2)
    {
    LPSTR path = (LPSTR)param1;
    ESt-ce que j'ai bien lu et 2iemement est-ce que tu as mis un point d'arrêt sur ces lignes ?

Discussions similaires

  1. [PHP-JS] Méthode flush() qui ne fait rien
    Par Khrysby dans le forum Langage
    Réponses: 9
    Dernier message: 21/05/2006, 19h55
  2. PostQuitMessage ne fait rien
    Par venomelektro dans le forum Windows
    Réponses: 1
    Dernier message: 04/01/2006, 11h16
  3. [debutant]programme qui ne fait rien.
    Par Battosaiii dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 04/12/2005, 22h19
  4. procédure stockée qui ne fait rien
    Par trotters213 dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 10/03/2005, 20h25
  5. [Process] pb exec sous unix, ne plante pas mais ne fait rien
    Par NiBicUs dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 10/12/2004, 05h27

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