2008-11-24 20 views

Répondre

1

Cela va être une entreprise. Procédez au reverse engineering de l'application StatusMonitor pour savoir comment elle interroge les pilotes pour trouver le niveau d'encre ou rechercher de la documentation. Il peut être possible de percer dans l'application StatusMonitor pour trouver des valeurs internes pour ses widgets (une chose est possible avec Windows, bien que hacky), mais le processus entier est susceptible d'être un gouffre pour le temps :(

0

Si l'imprimante prend en charge SNMP vous pourriez avoir de la chance d'interroger avec n'importe quel outil de ligne de commande SNMP.Il existe des définitions standard pour les imprimantes et ils contiennent des API pour interroger les niveaux d'encre actuels et maximum

Voici comment je le fais avec simple shell unix commandes (nécessite net-snmp installé) .Ce n'est pas strictement Mac mais vous devriez avoir une idée:

#!/bin/sh 

me="${0##*/}" 

host="${1:-wp4535}" 

base=1.3.6.1.2.1.43.11.1.1 

name="WP-4535" 

type=$(snmpget -v1 -c public ${host} SNMPv2-MIB::sysDescr.0) 

case "$type" in 
"SNMPv2-MIB::sysDescr.0 = STRING: EPSON"*) 
    type=epson 
    ofs=1 
;; 
*) 
    echo "! unknown printer type" 1>&2 
    exit 1 
;; 
esac 
echo "# $host $type $name" 

# get current ink levels 
eval $(snmpwalk -v1 -Ov -OQ -c public ${host} ${base}.6.${ofs} | 
perl -ne 'print "c[",++$c,"]=$1\n" if(m!"(\w+) ink!i);') 

# get max ink level per cartridge 
eval $(snmpwalk -v1 -Ov -OQ -c public ${host} ${base}.8.${ofs} | 
perl -ne 'print "max[",++$c,"]=$1\n" if(m!(\d+)!i);') 

snmpwalk -v1 -Ov -OQ -c public ${host} ${base}.9.${ofs} | 
perl -ne ' 
    my @c=("","'${c[1]}'","'${c[2]}'","'${c[3]}'","'${c[4]}'"); 
    my @max=("","'${max[1]}'","'${max[2]}'","'${max[3]}'","'${max[4]}'"); 
    my $v=$c[++$c]; 
    printf"# $v=$1 (%.0f)\n",$1/$max[$c]*100 if(m!(\d+)!i);'