Differenze tra le versioni di "Individuare le stampanti presenti nel proprio sistema"

Da Gambas-it.org - Wikipedia.
Riga 50: Riga 50:
 
   Dim j As Byte   
 
   Dim j As Byte   
 
      
 
      
+
 
 
  <FONT color=gray>' ''E' necessario avere il pieno accesso alla lettura del seguente file:''</font>
 
  <FONT color=gray>' ''E' necessario avere il pieno accesso alla lettura del seguente file:''</font>
    Desktop.RunAsRoot("chmod 4777 /etc/cups/printers.conf.O ")
+
  Desktop.RunAsRoot("chmod 4777 /etc/cups/printers.conf.O ")
 
      
 
      
 
  <FONT color=gray>' ''Resta in attesa fino a che i permessi del file in questione non saranno cambiati:''</font>
 
  <FONT color=gray>' ''Resta in attesa fino a che i permessi del file in questione non saranno cambiati:''</font>
    Do   
+
  Do   
      Wait 0.01   
+
    Wait 0.01   
    Loop Until Stat("/etc/cups/printers.conf.O").Auth = "rwsrwxrwx"   
+
  Loop Until Stat("/etc/cups/printers.conf.O").Auth = "rwsrwxrwx"   
 
      
 
      
 
+
  fl = Open "/etc/cups/printers.conf.O" For Input
    fl = Open "/etc/cups/printers.conf.O" For Input
 
 
      
 
      
    While Not Eof(fl)   
+
  While Not Eof(fl)   
      Input #fl, s
+
    Input #fl, s
  <FONT color=gray>' ''Carichiamo nell'array di tipo stringa tutte le informazioni,''
+
  <FONT color=gray>' ''Carichiamo nell'array di tipo stringa tutte le informazioni, suddivise parola per parola, presenti nel file:''</font>
' ''suddivise parola per parola, presenti nel file:''</font>
+
    ss.Add(Trim(s))
      ss.Add(Trim(s))
+
    If ss.Max > 0 Then
      If ss.Max > 0 Then
+
  <FONT color=gray>' ''Individuiamo la stampante predefinita e ne mostriamo il nome in console:''</font>
  <FONT color=gray>' ''Individuaiamo la stampante predefinita e ne mostriamo il nome in console:''</font>
+
      If ss[ss.Max - 1] = "<DefaultPrinter" Then Print "La stampante predefinita è: "; Replace(ss[ss.Max], ">", "")   
        If ss[ss.Max - 1] = "<DefaultPrinter" Then Print "La stampante predefinita è: "; Replace(ss[ss.Max], ">", "")   
+
    Endif   
      Endif   
+
  Wend
    Wend
+
 
 
+
  fl.Close
 +
 
 
  '''End'''
 
  '''End'''
  
Riga 83: Riga 83:
 
   Dim ss As New String[]       
 
   Dim ss As New String[]       
 
        
 
        
    fl = Open "/etc/printcap" For Input     
+
  fl = Open "/etc/printcap" For Input     
 
          
 
          
    While Not Eof(fl)     
+
  While Not Eof(fl)     
      Input #fl, s   
+
    Input #fl, s   
      ss.Add(Trim(s))     
+
    ss.Add(Trim(s))     
      If ss.Max = 23 Then Print "La stampante predefinita è: "; Split(ss[23], "|")[0]   
+
    If ss.Max = 23 Then Print "La stampante predefinita è: "; Split(ss[23], "|")[0]   
    Wend     
+
  Wend
+
    
 +
  fl.Close
 +
 
 
  '''End'''
 
  '''End'''
  

Versione delle 12:31, 16 lug 2017

Se si vogliono individuare le stampanti presenti e riconosciute nel proprio sistema, nonché la stampante impostata come predefinita, si possono adottare almeno due modalità.


Uso della Classe Printer

La Classe Printer ci fornisce alcune proprietà statiche che assolvono alla funzione di cui in oggetto.


Vediamo un esempio pratico:

Public Sub Form_Open()

 Dim stampanti As String
 
  Print "Le stampanti installate sono:"
   
  For Each stampanti In Printer.List
    Print stampanti
  Next
   
  Print "\nLa stampante predefinita è:"
  Print Printer.Default
  
End


Leggere i file presenti nella cartella /etc/cups/ppd/

La seconda modalità prevede di leggere i file, creati per ciascuna di esse, nella cartella: /etc/cups/ppd/ [ Nota 1 ]. Ciascuno di tali file riporta il nome della stampante, alla quale si riferisce, nonché l'estensione .ppd. Pertanto, il compito è quello di prendere il solo nome del file, che corrisponde anche alla singola stampante, escludendo l'estensione.

Potremo dunque utilizzare questo semplice codice:

Public Sub Button1_Click()

 Dim stampante As String

   For Each stampante In Dir("/etc/cups/ppd/", "*.ppd").Sort()

     Print File.BaseName(stampante)
    
   Next

End


Conoscere la stampante impostata come predefinita

Se si desidera conoscere la stampante impostata come predefinita (default), potremo utilizzare quest'altro codice (si dovrà attivare il componente gb.desktop; e si dovrà aver installato nel proprio sistema l'applicazione xterm):

Public Sub Button1_Click()
 
 Dim fl As File  
 Dim s As String  
 Dim ss As New String[]  
 Dim j As Byte  
   
  
' E' necessario avere il pieno accesso alla lettura del seguente file:
  Desktop.RunAsRoot("chmod 4777 /etc/cups/printers.conf.O ")
   
' Resta in attesa fino a che i permessi del file in questione non saranno cambiati:
  Do  
    Wait 0.01  
  Loop Until Stat("/etc/cups/printers.conf.O").Auth = "rwsrwxrwx"  
    
  fl = Open "/etc/cups/printers.conf.O" For Input
    
  While Not Eof(fl)  
    Input #fl, s
' Carichiamo nell'array di tipo stringa tutte le informazioni, suddivise parola per parola, presenti nel file:
    ss.Add(Trim(s))
    If ss.Max > 0 Then
' Individuiamo la stampante predefinita e ne mostriamo il nome in console:
      If ss[ss.Max - 1] = "<DefaultPrinter" Then Print "La stampante predefinita è: "; Replace(ss[ss.Max], ">", "")  
    Endif  
  Wend
  
  fl.Close
  
End


Si potrà utilizzare anche quest'altro codice [ Nota 1 ], più breve, che non necessita di inserire alcuna password:

Public Sub Button1_Click()

 Dim fl As File    
 Dim s As String    
 Dim ss As New String[]      
      
  fl = Open "/etc/printcap" For Input    
       
  While Not Eof(fl)    
    Input #fl, s  
    ss.Add(Trim(s))    
    If ss.Max = 23 Then Print "La stampante predefinita è: "; Split(ss[23], "|")[0]  
  Wend
  
  fl.Close
  
End



Note

[1] Testato su Ubuntu.