2008-11-24 48 views

回答

1

這將是一個承諾。要麼對StatusMonitor應用程序進行反向工程,以瞭解它如何查詢驅動程序以查找墨水量或查找某些文檔。有可能捅入StatusMonitor應用程序以找出其窗口小部件的內部值(這種情況對Windows來說可能是hacky),但是整個過程很可能是一段時間內的空洞:(

0

If打印機支持SNMP,你可能很幸運的用任何SNMP命令行工具進行查詢。打印機有標準定義,並且它們包含API以查詢當前和最大墨水量級別

以下是我如何使用簡單的unix shell命令(需要安裝net-snmp)。這不是嚴格的Mac,但你應該有一個想法。

#!/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);'