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++Builder Discussion :

Changer l'imprimante par défaut


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 21
    Points
    21
    Par défaut Changer l'imprimante par défaut
    Bonjour,

    je développe actuellement sous Builder 6 et je cherche à changer l'imprimante par défaut de Windows directement par programme et sans que l'utilisateur n'intervienne.
    Quelqu'un connait-il une commande pour cela ?

    Merci

  2. #2
    Membre expérimenté
    Avatar de sat83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2004
    Messages
    1 040
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 040
    Points : 1 307
    Points
    1 307
    Par défaut
    Une recherche avec Google t'aurait amener par exemple sur cette page

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    Je connais ce tutoriel et la fonction est valable pour le programme mais ne change pas l'imprimante par défaut de Windows.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2008
    Messages : 28
    Points : 21
    Points
    21
    Par défaut
    Mon problème réel est que je fais des éditions avec QuickReport 5.02 et j'ai diverses impressions qui peuvent sortir ou sur des imprimantes différentes ou sur une même imprimante avec plusieurs bacs.
    Dans le cas de l'imprimante à bac, j'ai installé autant de fois l'imprimante qu'elle a de bacs, avec une sélection forcée d'un bac et non une sélection automatique.

    Dans mon code, j'ai une page de paramètres où j'attribue à chaque impression le nom d'une imprimante (stocké dans un fichier ini) et dans le code le récupère le nom et force normalement l'imprimante choisie de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int TiMain::ForceImprimanteRapport(int Index_Imp)
    {
       AnsiString Imprimante="";
       int ImpRapport;
       ImpRapport = Printer()->Printers->IndexOf(iReg->ReadString((AnsiString)Index_Imp,"imprimante",""));
       return ImpRapport;
    }
    .
    .
    .
     
    iImpRegistre->isrep1->PrinterSettings->PrinterIndex = iMain->ForceImprimanteRapport(IMPRESSION_ORDO);
    IMPRESSION_ORDO est un int indiquant le numéro de mon impression.

    Avec ce code :
    - lorsque je fais iImpRegistre->isrep1->Print(), la feuille sort sur l'imprimante par défaut
    - iImpRegistre->isrep1->Preview() puis que j'appuie sur le bouton "impression", la feuille sort sur l'imprimante par défaut,
    - iImpRegistre->isrep1->Preview() puis que j'appuie sur le bouton "paramètre d'impression" et que je valide l'imprimante (qui est bien celle sur laquelle je souhaite imprimer), la feuille sort bien sur la bonne imprimante.

    Donc sois je trouve comment configurer correctement les composants QuickReport, sois je force l'imprimante de windows sur l'imprimante que je souhaite.

  5. #5
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Points : 3 766
    Points
    3 766
    Par défaut
    Salut magicseb007
    Il faudrait peut ere regarder du cote de l'aide BCB6 Windows SDK " PRINTER_DEFAULTS "

  6. #6
    Membre chevronné Avatar de nirgal76
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2007
    Messages
    906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 906
    Points : 2 134
    Points
    2 134
    Par défaut
    Voila ma fonction qui change l'imprimante par défaut :

    Code : 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    //****************************************
    //! @brief  Change l'imprimante par défaut
    //!
    //! @param  nomImpr : nom de l'imprimante par défaut
    //!
    //! @return vrai si le changement a été effectué, faux sinon 
    //****************************************
    bool _fastcall ChangerImprimanteParDefaut(String nomImpr)
    {
      bool ok = true;     // Vrai si changement OK, faux sinon
      TCHAR pBuffer[1024]; // Buffer de réception
      TCHAR *pSpooler;     // Nom du spooler
      TCHAR *pPort;        // Nom du port de communication
     
      try
      {
        // Récupération du port de communication
        if (!(GetProfileString("PrinterPorts", nomImpr.c_str(), "", pBuffer, 1024) > 0))
          throw Exception("Le changement d'imprimante n'a pu être effectué.");
     
        // Récupération du spooler
        pSpooler = _tcstok(pBuffer, ",");
        if (pSpooler)
        {
          // Récupération du nom du port de communication
          pPort = _tcstok(NULL, ",");
          if (pPort)
          {
            // Définition de l'imprimante par défaut
            _stprintf(pBuffer,"%s,%s,%s", nomImpr.c_str(), pSpooler, pPort);
            WriteProfileString("windows", "Device", pBuffer);
            // Propagation du changement d'imprimante
    #if WM_WININICHANGE != WM_SETTINGCHANGE
            // Ancien message
            SendNotifyMessage(HWND_BROADCAST,WM_WININICHANGE,0, (LPARAM)(LPCTSTR)"windows");
    #endif
     
            SendNotifyMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)(LPCTSTR)"windows");
          }
          else
            throw Exception("Le changement d'imprimante n'a pu être effectué.");
        }
        else
          throw Exception("Le changement d'imprimante n'a pu être effectué."); 
      } // fin du try
     
      catch (Exception& except)
      {
        if (!except.Message.IsEmpty())
          // Affichage d'un message d'erreur
          ShowMessage(except.Message);
        ok = false;
      }
     
      // Retour de fonction
      return ok;
    } // fin de ChangerImprimanteParDefaut
    En gros, ça change l'imprimante par défaut dans la base de registre (HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Window\Device="nomimprimante,spooler,port")
    et ça broadcast un message de changement de paramètres (WM_SETTINGCHANGE) pour notifier toutes les applications (windows y compris) qu'un paramètre (l'imprimante par défaut) a changé.

    Nirgal76

Discussions similaires

  1. Réponses: 4
    Dernier message: 17/06/2010, 11h39
  2. Changer l'imprimante par défaut
    Par micoudic dans le forum Delphi
    Réponses: 2
    Dernier message: 07/05/2007, 21h04
  3. changer l'imprimante par défaut
    Par LeXo dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 26/01/2007, 15h39
  4. changer l'imprimante par défaut
    Par SegmentationFault dans le forum Delphi
    Réponses: 2
    Dernier message: 17/08/2006, 17h36
  5. Réponses: 2
    Dernier message: 10/05/2006, 09h22

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