Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
Spooler 왼도우를 실행하는 방법
안녕하십니까?
먼저 3000번 프린터 Spooler제어에 대하여 김용대님의
답변 감사드립니다.
한가지 질문 더 드리겠습니다.
프린터 Spooler 왼도우를 직접 실행하는 방법은 없는지요?
답변을 부탁드리겠습니다.
감사합니다.
2
COMMENTS
김영대
•
1999.11.16 22:42
류한규 wrote:
> 안녕하십니까?
>
> 먼저 3000번 프린터 Spooler제어에 대하여 김용대님의
> 답변 감사드립니다.
>
> 한가지 질문 더 드리겠습니다.
>
> 프린터 Spooler 왼도우를 직접 실행하는 방법은 없는지요?
> 답변을 부탁드리겠습니다.
>
> 감사합니다.
제 이름은 김영대입니다
아래 소스에서 OpenThisPrinter() 를 보세요
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Printers, SHPrinters;
type
TForm1 = class(TForm)
B_Queue: TButton;
B_Properties: TButton;
B_Add: TButton;
ListBox1: TListBox;
procedure B_QueueClick(Sender: TObject);
procedure B_PropertiesClick(Sender: TObject);
procedure B_AddClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.B_QueueClick(Sender: TObject);
var
PrinterName: String;
begin
// 프린터 리스트를 구한다
ListBox1.Items := Printer.Printers;
// default printe의 이름을 구한다
PrinterName := Printer.Printers[Printer.PrinterIndex];
PrinterName := Copy(PrinterName,1,Pos(' on ', PrinterName)-1);
// 기본 프린터의 대기문서(Queue)를 보여준다
if not OpenThisPrinter(PrinterName) then
ShowMessage('Queue for Printer '+ PrinterName+ ' is not available');
end;
procedure TForm1.B_PropertiesClick(Sender: TObject);
var
PrinterName: String;
begin
// 프린터 리스트를 구한다
ListBox1.Items := Printer.Printers;
// default printe의 이름을 구한다
PrinterName := Printer.Printers[Printer.PrinterIndex];
PrinterName := COPY(PrinterName,1,POS(' on ', PrinterName)-1);
// 기본 프린터의 등록정보(Properties)를 보여준다
if not OpenPrinterProperties(PrinterName) then
ShowMessage('"Printer Properties" for ' +PrinterName+ ' are not available');
end;
procedure TForm1.B_AddClick(Sender: TObject);
begin
// 프린터 추가 마법사를 실행한다
ExecuteAddPrinter;
end;
end.
0
0
삭제
수정
댓글
김영대
•
1999.11.16 23:00
// Adapted from Microsoft's Q153751:
// "Sample: PRINTERS.EXE: Using Printers with Windows 95 Shell"
// http://premium.microsoft.com/support/kb/articles/q153/7/51.asp
// Microsoft's "pidl" is a pItemIDlist here.
// Earl F. Glynn
// November 1997
UNIT SHprinters;
INTERFACE
USES
Windows, // hResult, Failed, Succeeded, ZeroMemory, CopyMemory
ActiveX, // IMalloc
ShlObj; // Shell Objects: pItemIDList, IShellFolder
FUNCTION ExecuteAddPrinter: BOOLEAN;
FUNCTION GetAddPrinterItem(CONST Allocator: IMalloc): pItemIDList;
FUNCTION GetItemIDName(CONST Folder: IShellFolder;
CONST ItemIDList: pItemIDList;
CONST Flags: INTEGER;
CONST Name: pCHAR;
CONST MaxNameLength: INTEGER): BOOLEAN;
FUNCTION GetPrinterItemIDList(CONST DeskTopFolder: IShellFolder): pItemIDList;
FUNCTION GetThisPrinter(CONST PrinterName: STRING; CONST Allocator: IMalloc): pItemIDlist;
FUNCTION ItemIDListCreate(CONST Allocator: IMalloc; CONST size: INTEGER): pItemIDList;
FUNCTION ItemIDListGetNextItem(CONST ItemIDList: pItemIDList): pItemIDList;
FUNCTION ItemIDListGetSize(CONST ItemIDList: pItemIDList): INTEGER; {size in bytes}
FUNCTION ItemIDListsConcatenate(CONST Allocator: IMalloc;
CONST List1, List2: pItemIDList): pItemIDlist;
FUNCTION OpenPrinterProperties(CONST PrinterName: STRING): BOOLEAN;
FUNCTION OpenThisPrinter(CONST PrinterName: STRING): BOOLEAN;
IMPLEMENTATION
USES
ShellAPI, // TShellExecuteInfo, ShellExecuteEx
SysUtils; // Exception
TYPE
ESHprintersError = CLASS(Exception);
// See ExecuteAddPrinter in Printers.CPP (line 359)
FUNCTION ExecuteAddPrinter: BOOLEAN;
VAR
AddPrinterItemIDList: pItemIDList;
Allocator : IMalloc;
ShellExecuteInfo : TShellExecuteInfo;
BEGIN
RESULT := FALSE;
IF CoGetMalloc(MEMCTX_TASK, Allocator) = S_OK
THEN BEGIN
AddPrinterItemIDList := GetAddPrinterItem(Allocator);
TRY
IF AddPrinterItemIDList = NIL
THEN RESULT := FALSE
ELSE BEGIN
ZeroMemory(@ShellExecuteInfo, SizeOf(TShellExecuteInfo));
WITH ShellExecuteInfo DO
BEGIN
cbSize := SizeOf(TShellExecuteInfo);
fMask := SEE_MASK_INVOKEIDLIST OR SEE_MASK_FLAG_NO_UI;
lpIDList := AddPrinterItemIDlist;
nShow := SW_SHOWDEFAULT
END;
ShellExecuteEx(@ShellExecuteInfo);
RESULT := TRUE
END
FINALLY
Allocator.Free(AddPrinterItemIDList)
END
END
END {ExecuteAddPrinter};
// See GetAddPrinterItem in Printers.CPP (line 428)
FUNCTION GetAddPrinterItem(CONST Allocator: IMalloc): pItemIDList;
VAR
DeskTopFolder : IShellFolder;
EnumIDList : IEnumIDList;
hOK : hResult;
PrinterItemIDList: pItemIDList;
PrintersFolder : IShellFolder;
Retrieved : INTEGER;
TargetItemIDList : pItemIDList;
TempItemIDList : pItemIDList;
BEGIN
TargetItemIDList := NIL;
IF Allocator <> NIL
THEN BEGIN
IF Succeeded(SHGetDesktopFolder(DeskTopFolder))
THEN BEGIN
PrinterItemIDList := GetPrinterItemIDList(DeskTopFolder);
IF PrinterItemIDList <> NIL
THEN BEGIN
// Get the IShellFolder for Printers
hOK := DeskTopFolder.BindToObject(PrinterItemIDList,
NIL,
IID_IShellFolder,
Pointer(PrintersFolder));
IF Succeeded(hOK)
THEN BEGIN
IF Succeeded(PrintersFolder.EnumObjects(0, SHCONTF_FOLDERS OR SHCONTF_NONFOLDERS,
EnumIDList))
THEN BEGIN
// Get the first item's ItemIDList. This will be the item for adding a printer.
hOK := EnumIDList.Next(1, TempItemIDList, Retrieved);
IF (Retrieved > 0) AND Succeeded(hOK)
THEN TargetItemIDList := ItemIDListsConcatenate(Allocator,
PrinterItemIDList,
TempItemIDList);
END
END
END
END;
END;
RESULT := TargetItemIDList
END {GetAddPrinterItem};
// See GetItemIDName in Printers.CPP (line 551)
FUNCTION GetItemIDName(CONST Folder: IShellFolder;
CONST ItemIDList: pItemIDList;
CONST Flags: INTEGER;
CONST Name: pCHAR;
CONST MaxNameLength: INTEGER): BOOLEAN;
VAR
p : PCHAR;
StrRet: TStrRet;
BEGIN
RESULT := TRUE; // Be optimistic
IF Succeeded(Folder.GetDisplayNameOf(ItemIDList, Flags, StrRet))
THEN BEGIN
CASE StrRet.uType OF
STRRET_WSTR: WideCharToMultiByte(CP_ACP, 0, StrRet.pOleStr,
-1, Name, MaxNameLength,
NIL, NIL);
STRRET_OFFSET:
BEGIN
p := pCHAR(ItemIDlist);
INC(p, StrRet.uOffset);
StrLCopy(Name, p, MaxNameLength)
END;
STRRET_CSTR: StrLCopy(Name, StrRet.cStr, MaxNameLength)
ELSE
RESULT := FALSE
END
END
ELSE RESULT := FALSE
END {GetItemIDName};
// See GetPrintersPidl in Printers.CPP (line 406)
FUNCTION GetPrinterItemIDList(CONST DeskTopFolder: IShellFolder): pItemIDlist;
VAR
hOK : hResult;
PrinterItemIDList: pItemIDList;
BEGIN
IF DeskTopFolder = NIL
THEN RESULT := NIL
ELSE BEGIN
hOK := SHGetSpecialFolderLocation(0,
CSIDL_PRINTERS, // Virtual folder of installed printers
PrinterItemIDList);
IF Failed(hOK)
THEN RESULT := NIL
ELSE RESULT := PrinterItemIDList
END
END {GetPrinterItemIDList};
// See GetThisPrinter in Printers.CPP (line 485)
FUNCTION GetThisPrinter(CONST PrinterName: STRING;
CONST Allocator: IMalloc): pItemIDlist;
VAR
Continue : BOOLEAN;
DeskTopFolder : IShellFolder;
EnumIDList : IEnumIDList;
hOK : hResult;
PrinterItemIDList: pItemIDList;
PrintersFolder : IShellFolder;
Retrieved : INTEGER;
TargetItemIDList : pItemIDList;
TempItemIDList : pItemIDList;
TempString : ARRAY[0..255] OF CHAR;
BEGIN
TargetItemIDList := NIL;
IF Allocator <> NIL
THEN BEGIN
IF Succeeded(SHGetDesktopFolder(DeskTopFolder))
THEN BEGIN
PrinterItemIDList := GetPrinterItemIDList(DeskTopFolder);
IF PrinterItemIDList <> NIL
THEN BEGIN
// Get the IShellFolder for Printers
hOK := DeskTopFolder.BindToObject(PrinterItemIDList,
NIL,
IID_IShellFolder,
Pointer(PrintersFolder));
IF Succeeded(hOK)
THEN BEGIN
IF Succeeded(PrintersFolder.EnumObjects(0, SHCONTF_FOLDERS OR SHCONTF_NONFOLDERS,
EnumIDList))
THEN BEGIN
continue := TRUE;
WHILE continue
DO BEGIN
hOK := EnumIDList.Next(1, TempItemIDList, Retrieved);
// Check its name
GetItemIDName(PrintersFolder, TempItemIDList, SHGDN_NORMAL,
@TempString, SizeOf(TempString));
continue := Succeeded(hOK) AND (Retrieved > 0) AND
(StrIComp(TempString, pChar(PrinterName)) <> 0);
END;
IF (Retrieved > 0) AND Succeeded(hOK)
THEN TargetItemIDList := ItemIDListsConcatenate(Allocator,
PrinterItemIDList,
TempItemIDList);
END
END
END
END
END;
RESULT := TargetItemIDList;
END {GetThisPrinter};
// See Pidl_Create in Printers.CPP (line 689)
// Returns a pointer to the new ItemIDList, or NIL if a problem occurred.
FUNCTION ItemIDListCreate(CONST Allocator: IMalloc; CONST size: INTEGER): pItemIDList;
VAR
NewItemIDList: pItemIDList;
BEGIN
NewItemIDList := Allocator.Alloc(size);
IF NewItemIDList <> NIL
THEN ZeroMemory(NewItemIDList, size);
RESULT := NewItemIDList
END {ItemIDListCreate};
// See Pidl_GetNextItem in Printers.CPP (line 710)
// Returns a pointer to the next item in the ItemIDList (Microsoft's Pidl_GetNextItem)
FUNCTION ItemIDListGetNextItem(CONST ItemIDList: pItemIDList): pItemIDList;
BEGIN
IF ItemIDlist = NIL
THEN RESULT := NIL
ELSE RESULT := Pointer(INTEGER(ItemIDList) + ItemIDList.mkid.cb)
END {ItemIDListGetNextItem};
// See Pidl_GetSize in Printers.CPP (line 655)
// Returns total number of bytes in an ItemIDList (Microsoft's Pidl_GetSize)
FUNCTION ItemIDListGetSize(CONST ItemIDList: pItemIDList): INTEGER; {size in bytes}
VAR
TempItemIDList: pItemIDList;
BEGIN
RESULT := 0;
TempItemIDList := ItemIDList;
IF TempItemIDList <> NIL
THEN BEGIN
WHILE (TempItemIDList.mkid.cb > 0) DO
BEGIN
INC(RESULT, TempItemIDList.mkid.cb);
TempItemIDList := ItemIDListGetNextItem(TempItemIDList)
END;
// Requires a 16 bit zero value for the null terminator
INC(RESULT, 2*SizeOf(BYTE))
END
END {ItemIDListGetSize};
// See Pidl_Concatenate in Printers.CPP (line 612)
// Creates a new ItemIDList with List1 appended to List2
FUNCTION ItemIDListsConcatenate(CONST Allocator: IMalloc;
CONST List1, List2: pItemIDList): pItemIDlist;
VAR
List1Length : INTEGER;
List2Length : INTEGER;
NewItemIDList: pItemIDList;
BEGIN
List1Length := 0;
// List1 can possibly be NIL if it points to the desktop. Since we only
// need a sngle NIL terminator, we remove the extra 2 bytes from the size
// of the first ItemIDList
IF List1 <> NIL
THEN List1Length := ItemIDListGetSize(List1) - 2*SizeOf(BYTE);
List2Length := ItemIDListGetSize(List2);
// Create a new ItemIDList that is the size of List1 and List2, then
// copy List1 and List2 to the new list.
NewItemIDList := ItemIDListCreate(Allocator, List1Length + List2Length);
IF NewItemIDList <> NIL
THEN BEGIN
IF List1 <> NIL
THEN CopyMemory(NewItemIDList, List1, List1Length);
CopyMemory(Pointer(INTEGER(NewItemIDList) + List1Length),
List2, List2Length)
END;
RESULT := NewItemIDList
END {ItemIDListsConcatenate};
// See OpenThisPrinter in Printers.CPP (line 233)
FUNCTION OpenThisPrinter(CONST PrinterName: STRING): BOOLEAN;
VAR
Allocator : IMalloc;
PrinterItemIDList: pItemIDList;
ShellExecuteInfo : TShellExecuteInfo;
BEGIN
RESULT := FALSE;
IF CoGetMalloc(MEMCTX_TASK, Allocator) = S_OK
THEN BEGIN
PrinterItemIDList := GetThisPrinter(PrinterName, Allocator);
TRY
IF PrinterItemIDList = NIL
THEN RESULT := FALSE
ELSE BEGIN
ZeroMemory(@ShellExecuteInfo, SizeOf(TShellExecuteInfo));
WITH ShellExecuteInfo DO
BEGIN
cbSize := SizeOf(TShellExecuteInfo);
fMask := SEE_MASK_INVOKEIDLIST OR SEE_MASK_FLAG_NO_UI;
lpIDList := PrinterItemIDlist;
nShow := SW_SHOWDEFAULT
END;
ShellExecuteEx(@ShellExecuteInfo);
RESULT := TRUE
END
FINALLY
Allocator.Free(PrinterItemIDList)
END
END
END {OpenThisPrinter};
// See OpenPrinterProperties in Printers.CPP (line 41)
FUNCTION OpenPrinterProperties(CONST PrinterName: STRING): BOOLEAN;
VAR
Allocator : IMalloc;
PrinterItemIDList: pItemIDList;
ShellExecuteInfo : TShellExecuteInfo;
BEGIN
RESULT := FALSE;
IF CoGetMalloc(MEMCTX_TASK, Allocator) = S_OK
THEN BEGIN
PrinterItemIDList := GetThisPrinter(PrinterName, Allocator);
TRY
IF PrinterItemIDList = NIL
THEN RESULT := FALSE
ELSE BEGIN
ZeroMemory(@ShellExecuteInfo, SizeOf(TShellExecuteInfo));
WITH ShellExecuteInfo DO
BEGIN
cbSize := SizeOf(TShellExecuteInfo);
fMask := SEE_MASK_INVOKEIDLIST OR SEE_MASK_FLAG_NO_UI;
lpIDList := PrinterItemIDlist;
lpVerb := 'Properties';
nShow := SW_SHOWDEFAULT
END;
ShellExecuteEx(@ShellExecuteInfo);
RESULT := TRUE
END
FINALLY
Allocator.Free(PrinterItemIDList)
END
END
END {OpenPrinterProperties};
END.
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
류한규
•
1999.11.17 01:45
2
COMMENTS
/
0
LIKES
실행 왼도우 ShowModal만들기????
김주석
•
1999.11.17 03:49
류한규 wrote: > 안녕하십니까? > > 방금 실행한 왼도우(응용프로그램, 기타 화면)를 ShowModal로 만드...
류한규
•
1999.11.17 05:25
> > frm_0314 := Tfrm_0314.Create(Application) ; > frm_0314.Showmodal ; > 제가 직...
신현정
•
1999.11.17 01:39
2
COMMENTS
/
0
LIKES
테이블의 필드 길이를 변경하려면...
안재현
•
1999.11.17 02:47
신현정 wrote: > 파라독스로 만들어진 테이블의 필드 길이를 변경하려고 합니다. > 물론, DBD를 사용하지...
신현정
•
1999.11.17 02:50
Alter Table을 사용해서 필드 길이를 변경하려면 결국 테이블을 Drop 해야하는데... 데이타를 손실하지 않...
델초
1999.11.17 01:49
0
COMMENTS
/
0
LIKES
배경이미지를 어떻게 하지? 도와주세요
여용구
1999.11.17 01:38
0
COMMENTS
/
0
LIKES
OLE를 통한 Word파일 사용시 문제점..
황선희
•
1999.11.17 00:22
1
COMMENTS
/
0
LIKES
Preview를 하고나서
유형태
•
2000.03.11 02:28
황선희 wrote: > > 출력버튼을 클릭할 때 다음과 같이 코딩을 하였습니다. > > Application.Cr...
김정하
1999.11.17 00:12
0
COMMENTS
/
0
LIKES
중복 check
여용구
•
1999.11.16 23:52
1
COMMENTS
/
0
LIKES
리스트뷰에 대해서..
이정욱
•
1999.11.17 00:48
HideSelection 프로퍼티를 False 로 주세요. 넘 쉬웠나요? ^^ 여용구 wrote: > 애플리케이션에서 리...
진정한초보
•
1999.11.16 23:33
2
COMMENTS
/
0
LIKES
좀 도와주세요....^^
이정욱
•
1999.11.17 00:51
쩝.. 그것보단 그 콘트롤을 상속받아서 이벤트 두개를 넣어주시는것이 좋을듯 하네요. CM_MOUSEENTER 와...
진정한초보
•
1999.11.17 01:13
님의 답변 고맙습니다... 꼭 어떤 특정 콤포넌트를 지정하는 것이 아니라 다른 콤포넌트에도 적용시키려고...
땡글이
1999.11.16 23:30
0
COMMENTS
/
0
LIKES
연속용지에 프린트 할때 줄간격을 조정하고파여...
류한규
1999.11.16 22:44
0
COMMENTS
/
0
LIKES
OpenDialog에서 파일 삭제 안되게???
jang
•
1999.11.16 21:52
1
COMMENTS
/
0
LIKES
이정욱님 TWAIN 에관해 쬐끔만 더...
이정욱
•
1999.11.17 00:47
Twain에서는 띄우는 윈도우가 각 드라이버마다 다릅니다. 즉, 획일적인 해결방법은 없습니다. 제일 ...
정유라
•
1999.11.16 20:54
1
COMMENTS
/
0
LIKES
VB에서 만든 DLL을 델파이에서 사용하는 방법
TeamX
•
1999.11.16 21:04
Unable to create Process 메세지는 대개 프로그램이 DLL 을 못찾을때 내는 아우성입니다. 그렇다면 왜 DLL...
혀니
•
1999.11.16 21:08
2
COMMENTS
/
0
LIKES
Quick Report의 QRGroup 의 Expression 에서..
안재현
•
1999.11.16 21:36
혀니 wrote: > 퀵레포트를 사용하는데요.. > QRGroup 의 Expression 부분을 그냥 프로퍼티에 적어넣는것...
이재식
•
1999.11.16 21:18
혀니 wrote: > 퀵레포트를 사용하는데요.. > QRGroup 의 Expression 부분을 그냥 프로퍼티에 적어넣는것...
정재헌
1999.11.16 20:27
0
COMMENTS
/
0
LIKES
두대의 네트워크 프린트를 제어할려는데...
joojg
1999.11.16 20:11
0
COMMENTS
/
0
LIKES
시스템 사양에 따른 미리보기
여용구
•
1999.11.16 18:36
1
COMMENTS
/
0
LIKES
밀리초까지 구하는 방법
안재현
•
1999.11.16 21:39
여용구 wrote: > 초보입니다. > 현재 시간을 얻고자 할 때.. 밀리초까지 얻을 수 있는 방법을 갈켜주십시...
sun
•
1999.11.16 18:22
2
COMMENTS
/
0
LIKES
퀵리포트안에 두개의 디테일밴드를 놓고 싶어요?
이재식
•
1999.11.16 20:54
sun wrote: > 제가 표현하고 싶은것은 퀵리포트에 두개의 detail을 위아래로 표현해주고 싶습니다. > ...
최수영
•
1999.11.16 18:52
sun wrote: > 제가 표현하고 싶은것은 퀵리포트에 두개의 detail을 위아래로 표현해주고 싶습니다. > ...
류한규
•
1999.11.16 17:53
2
COMMENTS
/
0
LIKES
Spooler 왼도우를 실행하는 방법
안녕하십니까? 먼저 3000번 프린터 Spooler제어에 대하여 김용대님의 답변 감사드립니다. 한가지 질문 더 드리겠습니다. 프린터 Spooler 왼도우를 직접 실행하는 방법은 없는지요? 답변을 부탁드리겠습니다. 감사합니다.
김영대
•
1999.11.16 22:42
류한규 wrote: > 안녕하십니까? > > 먼저 3000번 프린터 Spooler제어에 대하여 김용대님의 > 답변 감...
김영대
•
1999.11.16 23:00
// Adapted from Microsoft's Q153751: // "Sample: PRINTERS.EXE: Using Printers with Windows 95 S...
김태훈
•
1999.11.16 16:40
1
COMMENTS
/
0
LIKES
퀵리포트 미리보기에서 출력여부 확인 방법
이재식
•
1999.11.16 21:32
김태훈 wrote: > 퀵리포트 미리보기창에서 내용물을 출력 하였는지 판단하는 방법좀 알려주세요! > > ...
김대정
1999.11.16 16:12
0
COMMENTS
/
0
LIKES
DDE통신에서 메세지 전달에 대하여
류한규
1999/11/16 17:53
Views
484
Likes
0
Comments
2
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 안녕하십니까?
>
> 먼저 3000번 프린터 Spooler제어에 대하여 김용대님의
> 답변 감사드립니다.
>
> 한가지 질문 더 드리겠습니다.
>
> 프린터 Spooler 왼도우를 직접 실행하는 방법은 없는지요?
> 답변을 부탁드리겠습니다.
>
> 감사합니다.
제 이름은 김영대입니다
아래 소스에서 OpenThisPrinter() 를 보세요
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Printers, SHPrinters;
type
TForm1 = class(TForm)
B_Queue: TButton;
B_Properties: TButton;
B_Add: TButton;
ListBox1: TListBox;
procedure B_QueueClick(Sender: TObject);
procedure B_PropertiesClick(Sender: TObject);
procedure B_AddClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.B_QueueClick(Sender: TObject);
var
PrinterName: String;
begin
// 프린터 리스트를 구한다
ListBox1.Items := Printer.Printers;
// default printe의 이름을 구한다
PrinterName := Printer.Printers[Printer.PrinterIndex];
PrinterName := Copy(PrinterName,1,Pos(' on ', PrinterName)-1);
// 기본 프린터의 대기문서(Queue)를 보여준다
if not OpenThisPrinter(PrinterName) then
ShowMessage('Queue for Printer '+ PrinterName+ ' is not available');
end;
procedure TForm1.B_PropertiesClick(Sender: TObject);
var
PrinterName: String;
begin
// 프린터 리스트를 구한다
ListBox1.Items := Printer.Printers;
// default printe의 이름을 구한다
PrinterName := Printer.Printers[Printer.PrinterIndex];
PrinterName := COPY(PrinterName,1,POS(' on ', PrinterName)-1);
// 기본 프린터의 등록정보(Properties)를 보여준다
if not OpenPrinterProperties(PrinterName) then
ShowMessage('"Printer Properties" for ' +PrinterName+ ' are not available');
end;
procedure TForm1.B_AddClick(Sender: TObject);
begin
// 프린터 추가 마법사를 실행한다
ExecuteAddPrinter;
end;
end.