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

Langage Delphi Discussion :

ouvrir file d'attente d'une imprimante


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut ouvrir file d'attente d'une imprimante
    Bonjour à tous,

    je me trouve confronter souvent au problème d'imprimante chargé de travaux non encore imprimé et à chaque fois je doit passer par Windows pour annuler les travaux d'impression. Je ne sais pas s'il ya une possibilité d'ouvrir la même fenêtre mais a partir de mon programme.

  2. #2
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Bonjour,

    regarde ici, je crois que le problème est traité. Mais je n'ai pas testé.

    A+
    Charly

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour,
    j'ai vu le lien et je l'ai testé mais ça marche pas

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par chekkal Voir le message
    je l'ai testé mais ça marche pas
    Vous êtes bien catégorique ! Aussi ai-je voulu en avoir le cœur net.
    Programme VCL avec Delphi RIO, seules quelques modifications à apporter et le code indiqué dans le lien fait exactement ce qu'il est censé faire : supprimer tous les documents en file d'attente pour l'imprimante en cours.

    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
    implementation
     
    {$R *.dfm}
    uses Vcl.Printers, Winapi.Winspool;
     
    procedure TForm84.Button1Click(Sender: TObject);
        Function GetCurrentPrinterHandle: THandle;
          Const
            Defaults: TPrinterDefaults = (
              pDatatype : nil;
              pDevMode  : nil;
              DesiredAccess : PRINTER_ACCESS_USE or PRINTER_ACCESS_ADMINISTER
        );
          Var
            Device, Driver, Port : array[0..255] of char;
            hDeviceMode: THandle;
          Begin { GetCurrentPrinterHandle }
            Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
            If not OpenPrinter(@Device, Result, @Defaults) Then
              RaiseLastWin32Error;
          End; { GetCurrentPrinterHandle }
     
        {: Kill all pending jobs on the current printer }
        Procedure PurgeJobsOnCurrentPrinter;
          Var
            hPrinter: THandle;
          Begin
            hPrinter:= GetCurrentPrinterHandle;
            try
              If not SetPrinterW( hPrinter, 0, nil,
        PRINTER_CONTROL_PURGE )
              Then
                RaiseLastWin32Error;
            finally
              ClosePrinter( hPrinter );
            end;
          End; { PurgeJobsOnCurrentPrinter }
    begin
     PurgeJobsOnCurrentPrinter;
    end;
    Cela étant, effectivement, cela ne fait pas ce qui est demandé
    ouvrir la fenêtre mais à partir de mon programme.
    Par fenêtre étant entendu la gestion de la file d'attente de l'imprimante
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Bonjour,
    pour la suppression de la file d'attente j'utilise cette procedure
    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
    59
    60
     
    procedure TForm1.EmptySpooler; 
     
    var 
     
     SpoolFile: TSearchRec; 
     
     a : Integer; 
     
    begin 
     
     // On arrête le service Spooler d'impression 
     
     ShellExecute(0,nil,PChar('net'),PChar('stop spooler'),nil,SW_HIDE); 
     
     
     
     // On cherche dans le registre le répertoire du spool car il se peut que l'utilisateur l'ait changé. 
     
     with TRegistry.Create do try 
     
     RootKey := HKEY_LOCAL_MACHINE; 
     
     OpenKey('SYSTEM\CurrentControlSet\Control\Print\Printers', false); 
     
     
     
     // On supprime tous les fichiers en attente 
     
     a := FindFirst(IncludeTrailingPathDelimiter(ReadString('DefaultSpoolDirectory'))+'*.*', FaAnyfile, SpoolFile); 
     
     while a = 0 do begin 
     
    if ((SpoolFile.Attr and FaDirectory <> FaDirectory) and (SpoolFile.Attr and FaVolumeId <> FaVolumeID)) then 
     
     DeleteFile(pChar(IncludeTrailingPathDelimiter(ReadString('DefaultSpoolDirectory')) + SpoolFile.Name)); 
     
     a := FindNext(SpoolFile); 
     
     end ; 
     
     SysUtils.FindClose(SpoolFile); 
     
     
     
     CloseKey; 
     
     Finally 
     
     Free; 
     
     end; 
     
     
     
     // On redémarre le service Spooler d'impression 
     
     ShellExecute(0,nil,PChar('net'),PChar('start spooler'),nil,SW_HIDE); 
     
    end;
    et ça marche très bien , par contre c'est pas ce que je veut.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut faq publiée
    Bonjour
    par contre c'est pas ce que je veux
    Le problème c'est que vous n'êtes pas très clair dans vos demandes, (le titre a changé non ?) , on ne sait même pas la version de windows ni celle de Delphi, j'aurais bien proposé d'écrire carrément une forme pour ça mais, bon cela n'est certainement pas l'objectif non plus !


    Si c'est vraiment afficher la file d'impression d'une imprimante alors, cette commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rundll32.exe printui.dll,PrintUIEntry /o /n "nom imprimante"
    dans un ShellExecute fera le job

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    uses vcl.printers,winapi.ShellApi;
     
    procedure TForm1.Button1Click(Sender: TObject);
    var param : String;
    begin
      param:=format('printui.dll,PrintUIEntry /o /n "%s"',[Printer.Printers[Printer.PrinterIndex]]);
      ShellExecute(0,'open','rundll32.exe',PChar(param),nil,SW_SHOW);
    end;
    Testé sous windows 10 avec Delphi Rio
    Je me demande si ce n'est pas dans une FAQ quelque part, en tout cas cela ferait un bon sujet ! Surtout si l'on peut me confirmer que cela fonctionne avec d'autres versions de Delphi, je ne vois pas pourquoi non mais ...

    [Edit] Testé avec D7, sous Windows Vista, ce code fonctionne avec quelques ajustements des noms d'unités, j'ai rédigé la FAQ
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    ça marche merci .

    pour information je suis delphi xe2 sur Windows 7.

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

Discussions similaires

  1. [AC-2013] Nommer les états dans la file d'attente de l'imprimante
    Par freddyev dans le forum Access
    Réponses: 2
    Dernier message: 21/03/2015, 13h29
  2. Réponses: 1
    Dernier message: 08/09/2010, 22h30
  3. [Tableaux] créer une file d'attente en php
    Par gaetan.tranvouez dans le forum Langage
    Réponses: 12
    Dernier message: 01/06/2006, 18h49
  4. Purger la liste d`attente d`une imprimante?
    Par redabadache3 dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 21/12/2005, 09h36
  5. Gestion d'une file d'attente
    Par jesus144 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 22/09/2005, 19h58

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