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

Lazarus Pascal Discussion :

Comment récupérer les codes retour de l'imprimante


Sujet :

Lazarus Pascal

  1. #1
    Membre actif
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 287
    Points : 276
    Points
    276
    Par défaut Comment récupérer les codes retour de l'imprimante
    Bonjour
    Encore moi...

    Comment récupérer les codes retour de l'imprimante, par exemple plus de papier?

  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 664
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 664
    Points : 6 961
    Points
    6 961
    Par défaut
    Peut-être avec WMI :

    root\CIMV2
    SELECT * FROM Win32_Printer where Name = ...
    >> DetectedErrorState

    https://docs.microsoft.com/en-us/win.../win32-printer
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. ___ Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.3.2 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.1 Entreprise
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.4)

  3. #3
    Membre actif
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 287
    Points : 276
    Points
    276
    Par défaut
    heu... moi je parle à partir de lazarus

  4. #4
    Membre actif
    Homme Profil pro
    Business Analyst
    Inscrit en
    Juillet 2005
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Business Analyst
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2005
    Messages : 108
    Points : 234
    Points
    234
    Par défaut
    Citation Envoyé par sematimo Voir le message
    heu... moi je parle à partir de lazarus
    Il s'agit de faire une requête WMI pour avoir des informations sur l'imprimante ... c'est lié directement à Windows.

    L'excellent outil WDCC (WMI Delphi Code Creator) de Rodrigo Ruz permet de générer du code pour FreePascal (entre autre car il y a aussi Delphi / C++ ...)

    Par rapport à ce qu'indique Lung, voici un code pour FreePascal généré directement à partir de l'outil WDCC:

    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
    program GetWMI_Info;
     
    {$mode objfpc} {$H+}
     
    uses
      SysUtils,
      ActiveX,
      ComObj,
      Variants;
     
     
     
    // Fonctionnalités et gestion du périphérique logique imprimante.
     
    procedure  GetWin32_PrinterInfo;
    const
      WbemUser            ='';
      WbemPassword        ='';
      WbemComputer        ='localhost';
      wbemFlagForwardOnly = $00000020;
    var
      FSWbemLocator : OLEVariant;
      FWMIService   : OLEVariant;
      FWbemObjectSet: OLEVariant;
      FWbemObject   : Variant;
      oEnum         : IEnumvariant;
      sValue        : string;   
    begin;
      FSWbemLocator := CreateOleObject('WbemScripting.SWbemLocator');
      FWMIService   := FSWbemLocator.ConnectServer(WbemComputer, 'root\CIMV2', WbemUser, WbemPassword);
      FWbemObjectSet:= FWMIService.ExecQuery('SELECT * FROM Win32_Printer','WQL',wbemFlagForwardOnly);
      oEnum         := IUnknown(FWbemObjectSet._NewEnum) as IEnumVariant;
      while oEnum.Next(1, FWbemObject, nil) = 0 do
      begin
        sValue:= FWbemObject.Properties_.Item('DetectedErrorState').Value;
        Writeln(Format('DetectedErrorState    %s',[sValue]));// Uint16
        sValue:= FWbemObject.Properties_.Item('Name').Value;
        Writeln(Format('Name                  %s',[sValue]));// String
     
        Writeln('');
        FWbemObject:=Unassigned;
      end;
    end;
     
     
    begin
     try
        GetWin32_PrinterInfo;
     except
        on E:EOleException do
            Writeln(Format('EOleException %s %x', [E.Message,E.ErrorCode]));      
    	on E:Exception do
            Writeln(E.Classname, ':', E.Message);
     end;
     Writeln('Press Enter to exit');
     Readln;    
    end.
    A adapter bien sûr car il y a multitude d'informations (propriétés / méthodes) ... Voir le lien donné par Lung.

    Peut-être aussi Win32_PrintJob ... A voir.

    Attention : ne fonctionne que pour Windows.

    Bonne soirée.

  5. #5
    Membre actif
    Avatar de sematimo
    Profil pro
    Inscrit en
    Février 2009
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 287
    Points : 276
    Points
    276
    Par défaut
    J'ai une erreur à la compilation à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      while oEnum.Next(1, FWbemObject, nil) = 0 do
    project1.lpr(33,39) Error: Call by var for arg no. 3 has to match exactly: Got "Pointer" expected "LongWord"

  6. #6
    Expert éminent
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    3 947
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 3 947
    Points : 9 275
    Points
    9 275
    Par défaut
    hello,
    pour faire du wmi avec lazarus tu peux aussi utiliser mon unité utilwmi qui se trouve ici
    exemple pour récupérer la propriété DetectedErrorState de toutes les imprimantes du pc :
    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
     
    // uses  utilwmi, contnrs
    procedure TForm1.Button8Click(Sender: TObject);
    var WMIResult         : TFPObjectList;
     f             : integer;
     retVal            : String;
    begin
      WMIResult := GetWMIInfo('Win32_Printer', ['Name', 'DetectedErrorState']);
      for f := 0 to Pred(WMIResult.Count) do
      begin
        retVal := TStringList(WMIResult[f]).ValueFromIndex[0] + ' : ' +
                  TStringList(WMIResult[f]).ValueFromIndex[1] ;
        Memo1.Lines.add(Retval);
      end;
     
     
      WMIResult.Free
    end;
    Résultat :

    Nom : StatusPrtLaz.PNG
Affichages : 156
Taille : 8,2 Ko

    Cela n'a pas l'air terrible car mon imprimante HP qui n'a plus de papier n'est pas indiquée comme étant en erreur. Le Wmi n'est pas toujours fiable pour les imprimantes.

    Ami calmant, J.P
    Jurassic computer : Sinclair ZX81 - Zilog Z80A à 3,25 MHz - RAM 1 Ko - ROM 8 Ko

Discussions similaires

  1. Réponses: 5
    Dernier message: 21/03/2017, 16h27
  2. Réponses: 6
    Dernier message: 28/06/2014, 09h30
  3. Comment récupérer les informations stockées dans l'imprimante ?
    Par PDelph7 dans le forum API, COM et SDKs
    Réponses: 0
    Dernier message: 22/01/2008, 10h01
  4. Comment récupérer un code retour SFTP ?
    Par hervé94 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 28/08/2007, 20h45
  5. Réponses: 5
    Dernier message: 24/01/2006, 14h25

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