Q&A

  • 프린터의 포트알기
시스템이 설치된 특정프린터의 이름을 가지고 포트명을 얻으려면 어떻게 해야 합니까?

1  COMMENTS
  • Profile
    parkisu 2000.07.16 00:53
    parkisu wrote:

    > 시스템이 설치된 특정프린터의 이름을 가지고 포트명을 얻으려면 어떻게 해야 합니까?



    고민하다 sysedit에서 win.ini를 열어보니까 PrinterPorts란 섹션이 있더군요.

    거기에 프린터이름의 두번째 항목이 포트명이더군요. 이걸 응용했습니다.

    참고로, 아래의 GetParserStr()함수는 김영대님의 팁을 참고했습니다.



    const

    Delemeter=',';



    function GetParserStr(const Source: string; Index: Integer): string;

    // Index는 1부터 시작한다.

    var

    StartPos, EndPos, CurIndex, StrPos: Integer;

    PS: string;

    begin

    PS := Source;

    if PS[Length(PS)] <> Delemeter then

    PS := PS + Delemeter;



    StrPos := 1;

    CurIndex := 1;



    // 시작위치를 구한다.

    while CurIndex <> Index do

    begin

    if PS[StrPos] = Delemeter then

    Inc(CurIndex);

    Inc(StrPos);

    end;

    StartPos := StrPos;



    //끝위 치를 구한다.

    while PS[StrPos] <> Delemeter do

    Inc(StrPos);

    EndPos := StrPos;



    Result := Copy(PS, StartPos, EndPos - StartPos);

    end;



    //프린터이름으로 포트명을 구한다.

    function GetPrinterPort(szPrinter:String):String;

    var

    ini:TiniFile;

    begin

    ini:= TIniFile.Create('c:windowswin.ini');

    try

    Result:= ini.ReadString('PrinterPorts',szPrinter,'');

    finally

    ini.Free;

    end;

    Result:= GetParserStr(Result, 2); //리턴값에 :가 붙어나오니까

    Delete(Result, Length(Result), 1);//:를 제거,

    //아니면 문자열에서 :의 위치를 찾아서 처리해도 되겠군요.

    end;



    사용법

    LG 전자 GLP-630J/J+의 포트명을 구한다면

    GetPrinterPort('LG 전자 GLP-630J/J+');

    와 같이 씁니다.

    여기에 Windows디렉토리경로를 구하는 부분을 추가해서 쓰면 쓸만할 것같긴 한데....