카트리지 잉크 레벨을 프로그래밍 방식으로 검색하는 방법 (Epson Statusmonitor + Mac OS X)?

StackOverflow https://stackoverflow.com/questions/314054

  •  10-07-2019
  •  | 
  •  

문제

Mac OS X에서 Epson DX 4050의 잉크 레벨을 쿼리하는 방법을 찾고 있습니다. 카트리지 레벨을 그래픽으로 표시하는 Epson Statusmonitor라는 UI가 있지만 명령 줄에서 가져 오려고합니다. 로봇을 먹일 수 있습니다.

아이디어가 있습니까?

도움이 되었습니까?

해결책

이것은 사업이 될 것입니다. Reverse Engineer Reatusmonitor 응용 프로그램을 사용하여 드라이버가 잉크 레벨을 찾기 위해 드라이버를 쿼리하거나 일부 문서를 찾는 방법을 찾으십시오. 위젯에 대한 내부 값을 찾기 위해 상태 모니터 응용 프로그램을 찌르는 것이 가능할 수 있지만 (그러한 것은 Windows에서는 가능하지만) 전체 프로세스는 시간 동안 싱크 홀 일 가능성이 높습니다.

다른 팁

프린터가 SNMP를 지원하는 경우 SNMP 명령 줄 도구를 사용하여 쿼리하는 것이 운이 좋을 수 있습니다. 프린터에 대한 표준 정의가 있으며 전류 및 최대 잉크 레벨을 쿼리하기위한 API가 포함되어 있습니다.

간단한 UNIX 쉘 명령으로 수행하는 방법은 다음과 같습니다 (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);'
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top