Printer_status_offline

- - Dernière réponse : papyvore
Messages postés
171
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
16 avril 2019
- 21 févr. 2019 à 16:06
Bonjour à tous;
Voilà mon problème,
Je réaffiche dans mes Labels, les infos de mon imprimante.
Nom imprimante par défaut, Port, Travaux en cours, ça marche bien.
Je modifie l'imprimante par défaut également.
Mais, je n'arrive pas à afficher dans mon label4, si l'imprimante est allumée ou pas.
c'est: printer_status_offline m'affiche 128 , soit PrinterInfo.Status , m'affiche 0;
en permanence, que l'imprimante soit allumée ou non

Label4.Caption := IntToStr(PrinterInfo.Status);


Tous les codes que j'ai essayé ne fonctionnent pas , je pense, que ce sont des vieux codes avec des ports LPT.
Le port de mon imprimante est : Port USB002,
Je pense que le problème vient de là.
En vous remercient pour votre aide.
Bon codding à tous
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
171
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
16 avril 2019
5
1
Merci
Salut
essais ça ,marche chez moi avec une imprimante whifi
procedure TForm1.Button2Click(Sender: TObject);
var
  status: dword;
  function GetCurrentPrinterStatus: dword;
  var
    hPrinter: THandle;
    Device: array [0 .. 255] of char;
    Driver: array [0 .. 255] of char;
    Port: array [0 .. 255] of char;
    hDeviceMode: THandle;
    bytesNeeded: Cardinal;
    pPI: PPrinterInfo2;
    Defaults: TPrinterDefaults;
  begin
    Assert(Printer.PrinterIndex >= 0);
    Printer.GetPrinter(Device, Driver, Port, hDeviceMode);
    FillChar(Defaults, Sizeof(Defaults), 0);
    Defaults.DesiredAccess := PRINTER_ACCESS_ADMINISTER or PRINTER_ACCESS_USE;
    Win32Check(WinSpool.OpenPrinter(@Device, hPrinter, @Defaults));
    try
      WinSpool.GetPrinter(hPrinter, 2, Nil, 0, @bytesNeeded);
      GetMem(pPI, bytesNeeded);
      try
        Win32Check(WinSpool.GetPrinter(hPrinter, 2, pPI, bytesNeeded,
          @bytesNeeded));
        Result := pPI^.status;
      finally
        FreeMem(pPI);
      end;
    finally
      WinSpool.ClosePrinter(hPrinter);
    end;
  end;

begin
  status := GetCurrentPrinterStatus;
  if (status and PRINTER_STATUS_OFFLINE) <> 0 then
    ShowMessage('offline')
  else
    ShowMessage('online');
end;

a adapter a ton besoin

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CodeS-SourceS

Codes Sources 115 internautes nous ont dit merci ce mois-ci

Commenter la réponse de papyvore
0
Merci
Bonsoir Papyvore;
Un grand merci pour ton aide.
Je vais essayer ton code et je te dirais ce qu'il en est.
Merci à toi bonne soirée
Cordialement
Commenter la réponse de Utilisateur anonyme
0
Merci
Bonjour Papyvore;
J'ai testé ton code, seul le message on line s'affiche.
Que l'imprimante soit allumée ou non
cordialement
papyvore
Messages postés
171
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
16 avril 2019
5 -
bizarre, ça marche chez moi quel delphi ?
tu peux changer
if (status and PRINTER_STATUS_OFFLINE) <> 0 then
voilà mon code
begin
Status := GetCurrentPrinterStatus;
if (Status = PRINTER_STATUS_OFFLINE) then //<> 0 then
begin
// ShowMessage('offline') ;
MessageDlg('Acunes imprimantes actives', mtWarning, [mbOK], 0);
end
else
begin
// ShowMessage('online');

end;
end;
Commenter la réponse de Utilisateur anonyme
0
Merci
Merci pour ton aide,
j'ai essayé ton dernier post, Status_Off_Line ne fonctionne pas.
Mais, j'ai TROUVÉ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Voici ma solution:

var
  Form1: TForm1;
  Device : array[0..255] of char;
  Driver : array[0..255] of char;
  Port   : array[0..255] of char;
  hPrinter: THandle;
  hDeviceMode: THandle;
  pcbNeed: DWORD;
  Buffer: Pointer;


procedure TForm1.Button1Click(Sender: TObject);
begin
Printer.GetPrinter(Device, Driver, Port, hDeviceMode);

if not OpenPrinter(@Device, hPrinter, nil) then Exit;
if (OpenPrinter(@Device, hPrinter, nil)) then
  begin
  Try
  GetPrinter(hPrinter, 2, nil,0,@pcbNeed);
  GetMem(Buffer, pcbNeed);

  if GetPrinter(hPrinter, 2, Buffer, pcbNeed, @pcbNeed) then
  begin
  Edit1.Text:= TPrinterInfo2A(Buffer^).pPrinterName;

     if (TPrinterInfo2A(Buffer^).Attributes and PRINTER_ATTRIBUTE_WORK_OFFLINE = PRINTER_ATTRIBUTE_WORK_OFFLINE) then
      begin
      Showmessage('l''imprimante est éteinte.');
      Exit;
      end
      Else
      showmessage('l''imprimante est allumée.');

  end;
  Finally
  FreeMem(Buffer, pcbNeed);
  End;
end;
End;
papyvore
Messages postés
171
Date d'inscription
samedi 15 novembre 2003
Statut
Membre
Dernière intervention
16 avril 2019
5 -
Salut
en effet mon code est nul. Il ne marche pas .j'ai donc voulu utiliser le tient,
là j'ai un problème quelle soit allumée ou éteinte j'ai toujours la même réponse
"allumée"????
TPrinterInfo2A(Buffer^).Attributes
a toujours la même valeur(2624) dans les 2 cas (mon imprimante est en wifi).
Une idée ??
Commenter la réponse de Utilisateur anonyme

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.