Q&A
HOME
Tips & Tech
Q&A
Discuss
Download
자유게시판
홍보 / 광고
구인 / 구직
LOGIN
회원가입
기본프린터변경
기본프린터변경에 관한 질문입니다.
레지스트리에서 컴퓨터에 설치된 프린터들의 목록을 가져와 Radio Group에
출력시키고 그 Radio Group에서 선택된 프린터를 기본프린터로 바꾸는
프로그램을 작성하고 있는데 어떻게 해야할지...
아시는 분 도움을 주세요~~~
2
COMMENTS
김영대
•
1999.07.29 23:20
최현정 께서 말씀하시기를...
> 기본프린터변경에 관한 질문입니다.
> 레지스트리에서 컴퓨터에 설치된 프린터들의 목록을 가져와 Radio Group에
> 출력시키고 그 Radio Group에서 선택된 프린터를 기본프린터로 바꾸는
> 프로그램을 작성하고 있는데 어떻게 해야할지...
> 아시는 분 도움을 주세요~~~
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, WinSpool, IniFiles;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Memo1: TMemo;
procedure FormActivate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
pEnumDriversData: PDriverInfo2;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormActivate(Sender: TObject);
var
i, bytesNeeded: DWORD;
pTemp: PDriverInfo2;
NumDrivers: DWORD;
begin
Listbox1.Clear;
if Assigned(pEnumDriversData) Then
FreeMem(pEnumDriversData);
// 설치된 모든 프린터 드라이브 갯수를 구한다
Numdrivers := 0;
bytesNeeded := 0;
EnumPrinterDrivers(nil, nil, 2, Nil, 0, bytesNeeded, NumDrivers); // 2번 정보
if bytesNeeded = 0 then
begin
ShowMEssage('설치된 프린터 드라이브가 없습니다');
System.Exit;
end;
// 정보를 저장할 메모리를 만든다
GetMem(pEnumDriversData, bytesNeeded);
// 설치된 모든 프린터 드라이브 정보(2번)를 구한다
// 서버명이 생략되었으므로 내 PC의 드라이버를 읽는다
if EnumPrinterDrivers(nil, nil, 2, pEnumDriversData, bytesNeeded,
bytesNeeded, NumDrivers) then
begin
pTemp := pEnumDriversData;
for i:= 1 to Numdrivers do
begin
// 드라이버명과 스트럭쳐의 시작 포인터를 Object로 ListBox에 추가한다
Listbox1.Items.AddObject(pTemp^.pName, TObject(pTemp));
// 다음 드라이버 정보의 스트럭쳐로 포인터를 이동시킨다
// Note: Inc increments a pointer by the size of its base type!
Inc(pTemp);
end;
Listbox1.ItemIndex := 0;
Listbox1Click(Listbox1);
end
else
RaiseLastWin32Error;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if Assigned(pEnumDriversData) then
FreeMem(pEnumDriversData);
end;
// 선택한 프린터의 정보를 Memo에 출력한다
procedure TForm1.ListBox1Click(Sender: TObject);
var
pTemp: PDriverInfo2;
begin
with Sender as TListbox do
begin
if ItemIndex >= 0 then
begin
Memo1.Clear;
pTemp:= PDriverInfo2(Items.Objects[ItemIndex]);
with Memo1.Lines, pTemp^ do
begin
Add(Format('Version:'#9#9'%d', [cVersion]));
Add(Format('Name:'#9#9'%s', [pName]));
Add(Format('Environment:'#9'%s', [pEnvironment]));
Add(Format('DriverPath:'#9'%s', [pDriverPath]));
Add(Format('DataFile:'#9#9'%s', [pDataFile]));
Add(Format('ConfigFile:'#9'%s', [pConfigFile]));
end;
end;
end;
end;
// 선택한 프린터를 기본 프린터로 설정한다
procedure TForm1.Button1Click(Sender: TObject);
var
pTemp: PDriverInfo2;
WinIni: TIniFile;
WinIniFileName: array[0..MAX_PATH] of char;
s: array[0..64] of char;
DirverName: String;
begin
if ListBox1.ItemIndex >= 0 then
begin
pTemp:= PDriverInfo2(ListBox1.Items.Objects[ListBox1.ItemIndex]);
DirverName := Copy(DirverName,1,Length(DirverName)-Length(ExtractFileExt(DirverName)));
// Windows.ini 파일의 "Windows" 섹션에 "printer, driver, port" 를
// 지정하여 기본프린터를 바꾼다
// 이때 기본프린터 변경여부를 다른 애플리케이션들에게
// 알리기 위해 WM_WININICHANGE 메시지를 BroadCast 한다
GetWindowsDirectory(WinIniFileName, sizeof(WinIniFileName));
StrCat(WinIniFileName, 'win.ini');
WinIni := TIniFile.Create(WinIniFileName);
WinIni.WriteString('windows',
'device',
StrPas(pTemp^.pName)+','+ // 프린터명
DirverName+',LPT1:'); // 드리아버명, 포트
WinIni.Free;
StrCopy(S, 'windows');
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S));
ShowMessage('기본 프린터를 "'+StrPas(pTemp^.pName)+'"로 변경하였숩니다');
end;
end;
end.
0
0
삭제
수정
댓글
박흥태
•
1999.07.29 22:50
최현정 께서 말씀하시기를...
> 기본프린터변경에 관한 질문입니다.
> 레지스트리에서 컴퓨터에 설치된 프린터들의 목록을 가져와 Radio Group에
> 출력시키고 그 Radio Group에서 선택된 프린터를 기본프린터로 바꾸는
> 프로그램을 작성하고 있는데 어떻게 해야할지...
> 아시는 분 도움을 주세요~~~
이내용은 제가 인프라이즈 - 델파이 FAQ에서 가져온 것입니당.
FAQ2618D.txt - Changing windows default printer in code.
Category :Printing
Platform :All-32Bit
Product :
Question:
How do I change the default Windows printer?
Answer:
You need to change the printer, driver, and port as listed in the
device key of the Windows section in the Windows.ini file, then
broadcast a system wide WM_WININICHANGE message.
Example:
procedure TForm1.Button1Click(Sender: TObject);
var
WinIni : TIniFile;
WinIniFileName : array[0..MAX_PATH] of char;
s : array[0..64] of char;
begin
GetWindowsDirectory(WinIniFileName, sizeof(WinIniFileName));
StrCat(WinIniFileName, 'win.ini');
WinIni := TIniFile.Create(WinIniFileName);
try
WinIni.WriteString('windows',
'device',
'HP LaserJet Series II,HPPCL,LPT1:');
finally
WinIni.Free;
end;
StrCopy(S, 'windows');
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S));
end;
그럼 즐거운 하루를 ~~~
0
0
삭제
수정
댓글
(NOTICE) You must be
logged in
to comment on this post.
정원석
1999.07.30 02:11
0
COMMENTS
/
0
LIKES
TTCP 콤포넌트에 관하여
박종성
•
1999.07.30 01:29
1
COMMENTS
/
0
LIKES
현재 프린터의 용지를 어떻게 알지요?
아무
•
1999.07.30 04:14
박종성 께서 말씀하시기를... > 안녕하세요! > > 현재 설정되어 있는 기본 프린터의 용지를 어떻게 알 ...
이정호
•
1999.07.30 01:01
1
COMMENTS
/
0
LIKES
--긴급 --파라독스데이터베이스에 강제로 저장하는 방법좀....
김용철
•
1999.07.30 11:14
가략하게 제가 아는 방법만 소개를 드릴께요... 파라독스가 워낙에 소규모 DBMS이다 보니 문제점이 많더...
유시니
•
1999.07.30 00:19
3
COMMENTS
/
0
LIKES
Lnk파일의 실행파일명을 알아낼려면
김영대
•
1999.07.30 00:42
유시니 께서 말씀하시기를... > 윈도우의 단축아이콘에서 아이콘이 가리키는 실행파일명을 > 얻어내는 ...
유시니
•
1999.08.06 11:45
김영대 께서 말씀하시기를... > 유시니 께서 말씀하시기를... > > 윈도우의 단축아이콘에서 아이콘이 가...
유시니
•
1999.07.30 01:47
김영대 께서 말씀하시기를... > 유시니 께서 말씀하시기를... > > 윈도우의 단축아이콘에서 아이콘이 가...
이용일
•
1999.07.29 23:42
1
COMMENTS
/
0
LIKES
리스트뷰에서 더블클릭했을때. 서브아이템의 텍스트 얻어오는거..
김영대
•
1999.07.30 00:19
이용일 께서 말씀하시기를... > 우선 소스를 보여드리죠.. > procedure TForm1.ListView1DblClick(Sender...
유시니
1999.07.29 23:32
0
COMMENTS
/
0
LIKES
[문]ImageList콘트롤에 200 이상의 아이콘을 넣으려면
진정은
•
1999.07.29 23:01
1
COMMENTS
/
0
LIKES
서로다른 프로그램과 메시지 통신
이정욱
•
1999.07.31 08:59
쩝...질문이 조금 애매 하네요. 그리고 BroadCast로 메세지를 보내는것보다는 특정 윈도우로 보내는것이 ...
이재용
•
1999.07.29 22:33
1
COMMENTS
/
0
LIKES
좀 도와주세요 ( telnet )
김영대
•
1999.07.29 22:56
이재용 께서 말씀하시기를... > 안녕하세요.. > 델파이 초보자입니다... > 제가 텔렛 프로그램을 함 해...
franco97
•
1999.07.29 22:03
2
COMMENTS
/
0
LIKES
PageControl에 색깔을 입힐려면..
채태숙
•
2006.05.31 00:32
아래처럼 해보세요 저도 찾다가 해보니까 되더라구요.. procedure TForm.FormCreate(Sender: TObje...
김영대
•
1999.07.29 23:12
franco97 께서 말씀하시기를... > 안녕하세요.. > PageControl에 색깔을 입힐려고 하는데.. > 혹시 아시...
sanghee
•
1999.07.29 21:34
1
COMMENTS
/
0
LIKES
컴파일이 되지 않아서요....
글쎄요
•
1999.07.29 21:51
sanghee 께서 말씀하시기를... > 컴파이을 하려고 버튼을 누르면 > Debugger Kernel BORDBK40.DLLis miss...
오용섭
•
1999.07.29 21:17
1
COMMENTS
/
0
LIKES
Database Desktop 에서
김영대
•
1999.07.29 23:19
오용섭 께서 말씀하시기를... > 안녕하세요 > 이번에 델파이 4.0과 퍼스널오라클 7.0을 연동해서 사용하...
이누리
1999.07.29 20:46
0
COMMENTS
/
0
LIKES
공통 Pas 에서 Object 에 Event Assign?
최현정
•
1999.07.29 20:34
2
COMMENTS
/
0
LIKES
기본프린터변경
기본프린터변경에 관한 질문입니다. 레지스트리에서 컴퓨터에 설치된 프린터들의 목록을 가져와 Radio Group에 출력시키고 그 Radio Group에서 선택된 프린터를 기본프린터로 바꾸는 프로그램을 작성하고 있는데 어떻게 해야할지... 아시...
김영대
•
1999.07.29 23:20
최현정 께서 말씀하시기를... > 기본프린터변경에 관한 질문입니다. > 레지스트리에서 컴퓨터에 설치된 ...
박흥태
•
1999.07.29 22:50
최현정 께서 말씀하시기를... > 기본프린터변경에 관한 질문입니다. > 레지스트리에서 컴퓨터에 설치된 ...
이현정
•
1999.07.29 20:27
3
COMMENTS
/
0
LIKES
가르쳐 주세요.
노력하는이
•
1999.07.29 21:35
이현정 께서 말씀하시기를... > 다음과 같이 프로그램을 작성하였습니다. > 그런데,자꾸만 컴파일시키면 ...
박흥태
•
1999.07.29 21:58
1
박흥태
•
1999.07.29 20:59
이현정 께서 말씀하시기를... > 다음과 같이 프로그램을 작성하였습니다. > 그런데,자꾸만 컴파일시키면 ...
황현동
1999.07.29 20:19
0
COMMENTS
/
0
LIKES
텍스트 박스에 대한질문..
황현동
1999.07.29 20:16
0
COMMENTS
/
0
LIKES
쿨바 만드는 방법좀 가르쳐 주세요
황현동
1999.07.29 20:14
0
COMMENTS
/
0
LIKES
델파이 서비스팩에관한..
황하성
•
1999.07.29 20:02
1
COMMENTS
/
0
LIKES
용지 크기에 맞춰 출력을 하려면 어떻게?
김영대
•
1999.07.29 23:00
황하성 께서 말씀하시기를... > > 현재 사용하고 있는 폼과 내용을 그대로 출력하고 싶답니다. > 그래...
하재희
1999.07.29 20:01
0
COMMENTS
/
0
LIKES
DBLookupCpmbo처럼 할수 있는 DBLookupEdit를 구합니다.
이진우
1999.07.29 19:45
0
COMMENTS
/
0
LIKES
퀵리포트 출력 때문에 그러는데요..(급함!!)
최현정
1999/07/29 20:34
Views
666
Likes
0
Comments
2
Reports
0
Tag List
수정
삭제
목록으로
한델 로그인 하기
로그인 상태 유지
아직 회원이 아니세요? 가입하세요!
암호를 잊어버리셨나요?
> 기본프린터변경에 관한 질문입니다.
> 레지스트리에서 컴퓨터에 설치된 프린터들의 목록을 가져와 Radio Group에
> 출력시키고 그 Radio Group에서 선택된 프린터를 기본프린터로 바꾸는
> 프로그램을 작성하고 있는데 어떻게 해야할지...
> 아시는 분 도움을 주세요~~~
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, WinSpool, IniFiles;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
Memo1: TMemo;
procedure FormActivate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
pEnumDriversData: PDriverInfo2;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormActivate(Sender: TObject);
var
i, bytesNeeded: DWORD;
pTemp: PDriverInfo2;
NumDrivers: DWORD;
begin
Listbox1.Clear;
if Assigned(pEnumDriversData) Then
FreeMem(pEnumDriversData);
// 설치된 모든 프린터 드라이브 갯수를 구한다
Numdrivers := 0;
bytesNeeded := 0;
EnumPrinterDrivers(nil, nil, 2, Nil, 0, bytesNeeded, NumDrivers); // 2번 정보
if bytesNeeded = 0 then
begin
ShowMEssage('설치된 프린터 드라이브가 없습니다');
System.Exit;
end;
// 정보를 저장할 메모리를 만든다
GetMem(pEnumDriversData, bytesNeeded);
// 설치된 모든 프린터 드라이브 정보(2번)를 구한다
// 서버명이 생략되었으므로 내 PC의 드라이버를 읽는다
if EnumPrinterDrivers(nil, nil, 2, pEnumDriversData, bytesNeeded,
bytesNeeded, NumDrivers) then
begin
pTemp := pEnumDriversData;
for i:= 1 to Numdrivers do
begin
// 드라이버명과 스트럭쳐의 시작 포인터를 Object로 ListBox에 추가한다
Listbox1.Items.AddObject(pTemp^.pName, TObject(pTemp));
// 다음 드라이버 정보의 스트럭쳐로 포인터를 이동시킨다
// Note: Inc increments a pointer by the size of its base type!
Inc(pTemp);
end;
Listbox1.ItemIndex := 0;
Listbox1Click(Listbox1);
end
else
RaiseLastWin32Error;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if Assigned(pEnumDriversData) then
FreeMem(pEnumDriversData);
end;
// 선택한 프린터의 정보를 Memo에 출력한다
procedure TForm1.ListBox1Click(Sender: TObject);
var
pTemp: PDriverInfo2;
begin
with Sender as TListbox do
begin
if ItemIndex >= 0 then
begin
Memo1.Clear;
pTemp:= PDriverInfo2(Items.Objects[ItemIndex]);
with Memo1.Lines, pTemp^ do
begin
Add(Format('Version:'#9#9'%d', [cVersion]));
Add(Format('Name:'#9#9'%s', [pName]));
Add(Format('Environment:'#9'%s', [pEnvironment]));
Add(Format('DriverPath:'#9'%s', [pDriverPath]));
Add(Format('DataFile:'#9#9'%s', [pDataFile]));
Add(Format('ConfigFile:'#9'%s', [pConfigFile]));
end;
end;
end;
end;
// 선택한 프린터를 기본 프린터로 설정한다
procedure TForm1.Button1Click(Sender: TObject);
var
pTemp: PDriverInfo2;
WinIni: TIniFile;
WinIniFileName: array[0..MAX_PATH] of char;
s: array[0..64] of char;
DirverName: String;
begin
if ListBox1.ItemIndex >= 0 then
begin
pTemp:= PDriverInfo2(ListBox1.Items.Objects[ListBox1.ItemIndex]);
DirverName := Copy(DirverName,1,Length(DirverName)-Length(ExtractFileExt(DirverName)));
// Windows.ini 파일의 "Windows" 섹션에 "printer, driver, port" 를
// 지정하여 기본프린터를 바꾼다
// 이때 기본프린터 변경여부를 다른 애플리케이션들에게
// 알리기 위해 WM_WININICHANGE 메시지를 BroadCast 한다
GetWindowsDirectory(WinIniFileName, sizeof(WinIniFileName));
StrCat(WinIniFileName, 'win.ini');
WinIni := TIniFile.Create(WinIniFileName);
WinIni.WriteString('windows',
'device',
StrPas(pTemp^.pName)+','+ // 프린터명
DirverName+',LPT1:'); // 드리아버명, 포트
WinIni.Free;
StrCopy(S, 'windows');
SendMessage(HWND_BROADCAST, WM_WININICHANGE, 0, LongInt(@S));
ShowMessage('기본 프린터를 "'+StrPas(pTemp^.pName)+'"로 변경하였숩니다');
end;
end;
end.