delphiでプリンター属性を変更する
以下がソース
ただし、Windows95までは権限が無かったのでOKだったが
NTからはプリンター属性を変更するのに権限が必要
Wins32のDevModeを使用しています
function SetPaper(PaperName: String): boolean;
var
DrvName, PrtName, PortName: array[0..512] of char;
h: THandle;
pDevMode: PDEVICEMODE;
PaperCount, i: Integer;
Papers: array[0..255] of array[0..63] of Char;
PaperNo: array[0..255] of Word;
begin
Result := False;
Printer.GetPrinter(DrvName, PrtName, PortName, h);
Printer.SetPrinter(DrvName, PrtName, PortName, 0);
Printer.GetPrinter(DrvName, PrtName, PortName, h);
pDevMode := GlobalLock(h);
try
// 用紙サイズ配列数を取得
PaperCount := DeviceCapabilities(DrvName, PortName, DC_PAPERS,
nil, pDevMode);
// 用紙サイズ番号をPaperNoに保存
DeviceCapabilities(DrvName, PortName, DC_PAPERS, @PaperNo, nil);
// 用紙サイズ名ををPapersに格納
DeviceCapabilities(DrvName, PortName, DC_PAPERNAMES, @Papers, nil);
// 指定した用紙名で用紙サイズ番号を検索
for i := 0 to PaperCount -1 do
begin
if PaperName=Papers[i] then
begin
// 検索された用紙サイズのdmPaperSizeを設定
pDevMode^.dmPaperSize := PaperNo[i];
Result := True;
Break;
end;
end;
finally
GlobalUnlock(h);
end;
end;
NTからはプリンター属性を変更するのに権限が必要
Wins32のDevModeを使用しています
function SetPaper(PaperName: String): boolean;
var
DrvName, PrtName, PortName: array[0..512] of char;
h: THandle;
pDevMode: PDEVICEMODE;
PaperCount, i: Integer;
Papers: array[0..255] of array[0..63] of Char;
PaperNo: array[0..255] of Word;
begin
Result := False;
Printer.GetPrinter(DrvName, PrtName, PortName, h);
Printer.SetPrinter(DrvName, PrtName, PortName, 0);
Printer.GetPrinter(DrvName, PrtName, PortName, h);
pDevMode := GlobalLock(h);
try
// 用紙サイズ配列数を取得
PaperCount := DeviceCapabilities(DrvName, PortName, DC_PAPERS,
nil, pDevMode);
// 用紙サイズ番号をPaperNoに保存
DeviceCapabilities(DrvName, PortName, DC_PAPERS, @PaperNo, nil);
// 用紙サイズ名ををPapersに格納
DeviceCapabilities(DrvName, PortName, DC_PAPERNAMES, @Papers, nil);
// 指定した用紙名で用紙サイズ番号を検索
for i := 0 to PaperCount -1 do
begin
if PaperName=Papers[i] then
begin
// 検索された用紙サイズのdmPaperSizeを設定
pDevMode^.dmPaperSize := PaperNo[i];
Result := True;
Break;
end;
end;
finally
GlobalUnlock(h);
end;
end;
0 件のコメント:
コメントを投稿