Bonjour,
Je voudrais savoir s'il y a un moyen de connaître le nombre de documents dans le spool d'impression à partir de delphi?
Merci.
Bonjour,
Je voudrais savoir s'il y a un moyen de connaître le nombre de documents dans le spool d'impression à partir de delphi?
Merci.
Peut-être en énumérant les jobs d'impression avec EnumJobs (dans l'unité WinSpool).
Mais EnumJObs ça compte les documents dans le spool de l'imprimante non?
Moi je voudrais les documents en attente dans le spool windows.
mais sinon je vois pas trop comment utiliser EnumJObs, j'ai commencé delphi il y a 2 jours
C'est sûr que manipuler les API Windows, c'est pas simple.
Voilà un bout de code que j'ai fait à partir de ce que j'ai trouvé sur le net :
Je te le donne brut. Faut adapter à ton besoin.
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 uses Printers, WinSpool; procedure TFormImprimante.ListeJobs; procedure AjoutLigne(ListViewJob: TListView; const szNom, szValeur: String); var Items: TListItem; begin Items := ListViewJob.Items.Add; Items.Caption := szNom; Items.SubItems.Add(szValeur); end; type TJobs = Array[0..1000] of JOB_INFO_2; PJobs = ^TJobs; var Device, Driver, Port: Array[0..255] of Char; hDeviceMode: THandle; pDefault: PPrinterDefaults; hPrinter: THandle; nBytesNeeded, nReturned: Cardinal; pBufferJob: PJobs; i: Integer; TabSheetJob: TTabSheetJob; begin _ListePage.Clear; Printer.PrinterIndex := Printer.Printers.IndexOf(_szImprimante); Printer.GetPrinter(Device, Driver, Port, hDeviceMode); pDefault := AllocMem(SizeOf(pDefault^)); try with pDefault^ do begin pDataType := nil; pDevMode := nil; DesiredAccess := PRINTER_ACCESS_USE; end; if OpenPrinter(@Device, hPrinter, pDefault) then begin try // Initialisations. nBytesNeeded := 0; nReturned := 0; EnumJobs(hPrinter, 0, 1000, 2, nil, 0, nBytesNeeded, nReturned); if nBytesNeeded > 0 then begin pBufferJob := AllocMem(nBytesNeeded); try // Récupération des jobs. if EnumJobs(hPrinter, 0, 1000, 2, pBufferJob, nBytesNeeded, nBytesNeeded, nReturned) then begin // Si pas de job trouvé. if nReturned = 0 then begin TabSheetJob := TTabSheetJob.Create(PageControlJobs, True); AjoutLigne(TabSheetJob.ListViewJobs, '', '[ PAS DE JOBS ]'); _ListePage.Add(TabSheetJob); end else begin // Parcours des jobs trouvés. for i:=0 to Pred(nReturned) do begin TabSheetJob := TTabSheetJob.Create(PageControlJobs); AjoutLigne(TabSheetJob.ListViewJobs, 'JobId', IntToStr(pBufferJob^[i].JobId)); AjoutLigne(TabSheetJob.ListViewJobs, 'PrinterName', pBufferJob^[i].pPrinterName); AjoutLigne(TabSheetJob.ListViewJobs, 'MachineName', pBufferJob^[i].pMachineName); AjoutLigne(TabSheetJob.ListViewJobs, 'UserName', pBufferJob^[i].pUserName); AjoutLigne(TabSheetJob.ListViewJobs, 'Document', pBufferJob^[i].pDocument); ... _ListePage.Add(TabSheetJob); end; end; end else //.Si erreur. begin TabSheetJob := TTabSheetJob.Create(PageControlJobs); AjoutLigne(TabSheetJob.ListViewJobs, ' ERREUR', '[' + SysErrorMessage(GetLastError) + ']'); _ListePage.Add(TabSheetJob); end; finally FreeMem(pBufferJob); end; end else begin TabSheetJob := TTabSheetJob.Create(PageControlJobs, True); AjoutLigne(TabSheetJob.ListViewJobs, '', '[ PAS DE JOBS ]'); _ListePage.Add(TabSheetJob); end; finally ClosePrinter(hPrinter); end; end; finally FreeMem(pDefault); end; end;
Merci, j'ai également trouvé un bout de code de mon côté, du coup j'ai réussi à m'en sortir, je peux trouver le nombre de documents en attente dans l'imprimante.
Nouvelle question, avec ton code tu peux mettre jusqu'à combien de documents en attente dans l'imprimante? Autant que tu veux?
Merci.
Ok c'est bon j'ai compris.
Merci pour ton code il est plus complet que le mien, et plus optimisé.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager