// 윈도우즈 탐색기에서 파일 리스트 창에서 파일을 선택하고 마우스 오른쪽을 클릭하면
// 파일의 확장자를 기준으로 연결된(association) 프로그램이 존재하고 또한 이 파일을
// 인쇄할 수 있다면 탐색기 팝업 메뉴에 '인쇄'가 나타납니다
// 이것을 이용하여 사용자가 선택한 여러 파일들의 확장자를 레지스트리에서 검색하여
// 파일 각각의 연결 프로그램을 찾아 인쇄하는 예제입니다
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Registry, SHellAPI;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
OpenDialog1: TOpenDialog;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
OpenDialog1.Options := OpenDialog1.Options + [ofAllowMultiSelect, ofFileMustExist];
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
reg: TRegistry;
dvalue, pcommand: String;
begin
Memo1.Clear;
if not OpenDialog1.Execute then
Exit;
reg := TRegistry.Create;
reg.RootKey := HKEY_CLASSES_ROOT;
try
for i := 0 to OpenDialog1.Files.Count-1 do
begin
// 레지스트리의 HKEY_CLASSES_ROOT에서 확장자의 기본값을 구한다
dvalue := '';
reg.OpenKey('\'+ExtractFileExt(OpenDialog1.Files[i]), false);
dvalue := reg.ReadString('');
reg.CloseKey;
// 해당 확장자를 인쇄하는데 사용하는 명령어를 구한다
pcommand := '';
if dvalue <> '' then
begin
reg.OpenKey(dvalue+'\shell\print\command', false);
pcommand := reg.ReadString('');
reg.CloseKey;
end;
if pcommand <> '' then
begin
Memo1.Lines.Add('['+IntToStr(i)+'] '+
ExtractFileName(OpenDialog1.Files[i])+' => '+
ExtractFileName(pcommand)+' 로 인쇄');
// 실제로 인쇄
//ShellExecute(Handle, 'print', pchar(OpenDialog1.Files[i]), nil, nil, SW_HIDE);
end
else
begin
Memo1.Lines.Add('['+IntToStr(i)+'] '+
ExtractFileName(OpenDialog1.Files[i])+' => '+
'*** 인쇄할수 없음 ***');
end;
end;
finally
reg.Free;
end;
end;
end.
카테고리 없음