Q&A

  • 상태값들이 조합되어 올 때 각각의 값을 알 수 있는 방법은?
안녕하세요.
아래의 함수를 실행하면

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 값으로 위의 두 값을 분리하는 방법을 잘 모르겠습니다.

물론 위의 경우 이 외에 여러가지 형태로 조합해서 값이 들어오던데요...
각각의 어떤 값들이 조합되었는지 다시 분리하는 법을 알고 싶습니다.

아시는 분은 부탁드립니다.

감사합니다.
1  COMMENTS
  • Profile
    이중철 2002.12.18 03:28
    비트연산입니다.
    1 And 1 = 1
    3 and 1 = 1
    3 and 2 = 2
    이런것 알고 있죠..

    즉,

    if
      jobinfo2.status and JOB_STATUS_ERROR = JOB_STATUS_ERROR
    then
    begin
    end;
    이와 같이 하면 될거에요..