Bonjour
Encore moi...
Comment récupérer les codes retour de l'imprimante, par exemple plus de papier?
Bonjour
Encore moi...
Comment récupérer les codes retour de l'imprimante, par exemple plus de papier?
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. :bug: ___ "http://club.developpez.com/regles/#LIII-A"É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.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)
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:
A adapter bien sûr car il y a multitude d'informations (propriétés / méthodes) ... Voir le lien donné par Lung.
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.
Peut-être aussi Win32_PrintJob ... A voir.
Attention : ne fonctionne que pour Windows.
Bonne soirée.
J'ai une erreur à la compilation à la ligneproject1.lpr(33,39) Error: Call by var for arg no. 3 has to match exactly: Got "Pointer" expected "LongWord"
Code : Sélectionner tout - Visualiser dans une fenêtre à part while oEnum.Next(1, FWbemObject, nil) = 0 do
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 :
Résultat :
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;
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
Partager