Q&A

  • 기본 프린터의 온라인 상태 체크...
[질문]기본 프린터의 온라인 상태 체크...

델파이 2.0 에서 기본 프린터가 켜져있는지, 온라인 상태인지를 체크하는

명령어가 무엇인가요? (혹, 명령어가 없다면 어떻게 해야하나요?)

2  COMMENTS
  • Profile
    최석기 1999.06.23 17:28
    황하강 께서 말씀하시기를...

    > [질문]기본 프린터의 온라인 상태 체크...

    > 델파이 2.0 에서 기본 프린터가 켜져있는지, 온라인 상태인지를 체크하는

    > 명령어가 무엇인가요? (혹, 명령어가 없다면 어떻게 해야하나요?)



    예전에 김영대님의 팁을 받아 두엇던게 있어서 올려 드립니다..

    참고 하세요..



    unit Unit1;



    interface



    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls;



    type

    TForm1 = class(TForm)

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;



    var

    Form1: TForm1;



    implementation

    {$R *.DFM}



    // 프린터의 상태를 리턴하는 함수

    function PrinterStatus(const APort: Word): Byte; assembler;

    {

    AH 레지스터의 상태값(8 bit) :

    0 - time out

    1 - unused

    2 - unused

    3 - I/O error

    4 - On line selected

    5 - Out of paper

    6 - Acknowledge

    7 - Not Busy

    }

    begin

    asm

    mov ah, 2 { 서비스 2 - Printer Status }

    mov dx, APort { 프린터 포트 - 0 부터 시작 }

    int 17h { 프린터 서비스 인터럽트 }

    mov al, ah { Set function value }

    end;

    end;



    // 프린터의 준비 상태를 리턴하는 함수

    function PrinterReady(APort: Word): Boolean;

    {APort : 0=LPT1, 1=LPT2, etc }

    const

    pTimeOut= $01;

    pIOError= $08;

    pNoPaper= $20;

    pNotBusy= $80;

    pTestAll= pTimeOut + pIOError + pNoPaper;

    begin

    PrinterReady := (PrinterStatus(APort) and pTestAll) = $00;

    end;



    // 프린터 초기화 프로시저

    procedure InitPrinter(const APort: word); assembler;

    begin

    asm

    mov ah, 1

    mov bx, APort

    int 17h

    end;

    end;



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    if PrinterReady(1) = True then // LPT1

    ShowMessage('Printer Ready')

    else

    // 에러 발생시 위의 PrinterStatus 함수를 호출하여 에러 상태를

    // 알 수 있습니다

    ShowMessage('Printer off or unplugged');

    end;



    end.





  • Profile
    황하강 1999.06.24 00:44
    최석기 께서 말씀하시기를...

    > 황하강 께서 말씀하시기를...

    > > [질문]기본 프린터의 온라인 상태 체크...

    > > 델파이 2.0 에서 기본 프린터가 켜져있는지, 온라인 상태인지를 체크하는

    > > 명령어가 무엇인가요? (혹, 명령어가 없다면 어떻게 해야하나요?)

    >

    > 예전에 김영대님의 팁을 받아 두엇던게 있어서 올려 드립니다..

    > 참고 하세요..

    >

    > unit Unit1;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

    > Dialogs, StdCtrls;

    >

    > type

    > TForm1 = class(TForm)

    > Button1: TButton;

    > procedure Button1Click(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    > var

    > Form1: TForm1;

    >

    > implementation

    > {$R *.DFM}

    >

    > // 프린터의 상태를 리턴하는 함수

    > function PrinterStatus(const APort: Word): Byte; assembler;

    > {

    > AH 레지스터의 상태값(8 bit) :

    > 0 - time out

    > 1 - unused

    > 2 - unused

    > 3 - I/O error

    > 4 - On line selected

    > 5 - Out of paper

    > 6 - Acknowledge

    > 7 - Not Busy

    > }

    > begin

    > asm

    > mov ah, 2 { 서비스 2 - Printer Status }

    > mov dx, APort { 프린터 포트 - 0 부터 시작 }

    > int 17h { 프린터 서비스 인터럽트 }

    > mov al, ah { Set function value }

    > end;

    > end;

    >

    > // 프린터의 준비 상태를 리턴하는 함수

    > function PrinterReady(APort: Word): Boolean;

    > {APort : 0=LPT1, 1=LPT2, etc }

    > const

    > pTimeOut= $01;

    > pIOError= $08;

    > pNoPaper= $20;

    > pNotBusy= $80;

    > pTestAll= pTimeOut + pIOError + pNoPaper;

    > begin

    > PrinterReady := (PrinterStatus(APort) and pTestAll) = $00;

    > end;

    >

    > // 프린터 초기화 프로시저

    > procedure InitPrinter(const APort: word); assembler;

    > begin

    > asm

    > mov ah, 1

    > mov bx, APort

    > int 17h

    > end;

    > end;

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > if PrinterReady(1) = True then // LPT1

    > ShowMessage('Printer Ready')

    > else

    > // 에러 발생시 위의 PrinterStatus 함수를 호출하여 에러 상태를

    > // 알 수 있습니다

    > ShowMessage('Printer off or unplugged');

    > end;

    >

    > end.

    >

    >

    [다시 질문]

    프로그램 예제 잘 받아서 테스트를 해보았습니다.

    그런데 PrinterStatus function 문에서 뭔가 문제가 있는것 같은데...

    제가 분석을 잘못한것인지 아니면 테스트 환경이 잘못되었는지를

    알려주세요.( 나 원참 줘도 못먹네여...)

    감사합니다.