만약 JOB_STATUS_ERROR 와 JOB_STATUS_PRINTING 이 jobinfo2.status에 들어있다면
그숫자는
00010010 <-- 이런식으로 되어있겠죠...
&
00000010
-----------
00000010 <-- 이렇게 됩니다...
풀어보면
if (jobinfo2.status and JOB_STATUS_ERROR) = JOB_STATUS_ERROR then
showmessage('JOB_STATUS_ERROR 가 포함되었네');
if (jobinfo2.status and JOB_STATUS_PRINTING) = JOB_STATUS_PRINTING then
showmessage('JOB_STATUS_PRINTING 도 포함되었네');
이렇게 하시면 됩니다..
알아내고자 하는 상태만큼 if 연산을 하세요...
이상탁 님이 쓰신 글 :
: 안녕하세요.
: 아래의 함수를 실행하면
:
: var
: PrinterHandle : THandle;
: Jobinfo2 : JOB_INFO_2;
: PcbNeeded : DWord;
: PcReturned : DWord;
: begin
: OpenPrinter(PChar(PrinterName), PrinterHandle, 0);
: EnumJobs(PrinterHandle, 0, 10, 2, Jobinfo2 , SizeOf(Jobinfo2), PcbNeeded, PcReturned);
: end;
:
: jobinfo2.status 의 값들은 다음값들의 조합으로 리턴되더군요
:
: JOB_STATUS_PAUSED = $00000001;
: {$EXTERNALSYM JOB_STATUS_ERROR}
: JOB_STATUS_ERROR = $00000002;
: {$EXTERNALSYM JOB_STATUS_DELETING}
: JOB_STATUS_DELETING = $00000004;
: {$EXTERNALSYM JOB_STATUS_SPOOLING}
: JOB_STATUS_SPOOLING = $00000008;
: {$EXTERNALSYM JOB_STATUS_PRINTING}
: JOB_STATUS_PRINTING = $00000010;
: {$EXTERNALSYM JOB_STATUS_OFFLINE}
: JOB_STATUS_OFFLINE = $00000020;
: {$EXTERNALSYM JOB_STATUS_PAPEROUT}
: JOB_STATUS_PAPEROUT = $00000040;
: {$EXTERNALSYM JOB_STATUS_PRINTED}
: JOB_STATUS_PRINTED = $00000080;
: {$EXTERNALSYM JOB_STATUS_DELETED}
: JOB_STATUS_DELETED = $00000100;
: {$EXTERNALSYM JOB_STATUS_BLOCKED_DEVQ}
: JOB_STATUS_BLOCKED_DEVQ = $00000200;
: {$EXTERNALSYM JOB_STATUS_USER_INTERVENTION}
: JOB_STATUS_USER_INTERVENTION = $00000400;
: {$EXTERNALSYM JOB_STATUS_RESTART}
: JOB_STATUS_RESTART = $00000800;
:
: 즉, jobinfo2.status 값이 $12 값이 리턴되면 JOB_STATUS_ERROR 와 JOB_STATUS_PRINTING 의 조합인데, $12 값으로 위의 두 값을 분리하는 방법을 잘 모르겠습니다.
:
: 물론 위의 경우 이 외에 여러가지 형태로 조합해서 값이 들어오던데요...
: 각각의 어떤 값들이 조합되었는지 다시 분리하는 법을 알고 싶습니다.
:
: 아시는 분은 부탁드립니다.
:
: 감사합니다.
|