Q&A

  • Vista에서 프린터드라이버 설치 관련
안녕 하십니까?
첨부파일의 소스는 Windows XP에서 드라이버 설치하는 소스입니다.
하지만 Windows Vista에서 설치할 수 가 없습니다.
소스중 아래의 함수에서 에러가 발생하고 있습니다.
bStatus 가 XP에서는 True로 되지만 Vista에서는 False가 됩니다.

bStatus :=AddPrinterDriver(PChar(nil),3,@pDI3 );

참고로 Vista의 권한상승과 전혀 무관합니다.
물론 프로그램중 일부는 Vista에서 권한 상승을 이루어 져야만 정상 처리되기 때문에 프로그램
실행시에는 관리자 권한으로 프로그램을 실행 해야 만 합니다.

고수님 소스를 한번 확인 바랍니다.
수고 하십시요.


소스 파일
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,Printers, WinSpool,StdCtrls;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function GetEnvironment(sName : string) : string;
var
  lpBuffer : PChar ;
  nSize : DWORD ;
begin
        getmem(lpBuffer, 1024); nSize := 1024;
        GetEnvironmentVariable(PChar(sName), lpBuffer, nSize);
        Result :=StrPas(lpBuffer);
end;

function DeleteFiles(Path : string) :Boolean ;
var
  Dirinfo : TSearchRec ;
  r : Integer;
begin
  r:= FindFirst(Path +'*.*',faAnyFile ,Dirinfo );
  while  r=0 do begin
    if ((DirInfo.Attr and FaDirectory <> FaDirectory) and (DirInfo.Attr and FaVolumeId <> FaVolumeID)) then
        if DeleteFile(pChar(Path  + DirInfo.Name)) = false then
                ShowMessage('Unable to delete :' + DirInfo.Name);
  r := FindNext(DirInfo);
  end;
  FindClose(Dirinfo);
end;


procedure TForm1.FormCreate(Sender: TObject);
var
  sDriverPathWin32,sDriverpathWin64 : string;
  sDriverFilePath : string;
  pDI3 : TDriverInfo3;
  pPI2 : TPrinterInfo2;
  bStatus : LongBool ;
  hPrint : THandle;

begin
  sDriverPathWin32 := GetEnvironment('WinDir')+ '\system32\spool\drivers\w32x86\';
  sDriverFilePath := ExtractFilePath(Application.ExeName)+'Driver\';

  CopyFile(PChar(sDriverFilePath + 'GENUXP.DLL'),PChar(sDriverPathWin32 +'GENUXP.DLL'), False);
  CopyFile(PChar(sDriverFilePath + 'GENUXPUI.DLL'),PChar(sDriverPathWin32 +'GENUXPUI.DLL'), False);
  CopyFile(PChar(sDriverFilePath + 'GENUXP.HLP'),PChar(sDriverPathWin32 +'GENUXP.HLP'), False);

  pDI3.cVersion := 3;
  pDI3.pName :=PChar('Chungho CHP-680');
  pDI3.pEnvironment :=PChar(nil);
  pDI3.pDriverPath := PChar(sDriverPathWin32 +'GENUXP.DLL');
  pDI3.pDataFile :=  PChar(sDriverPathWin32 +'GENUXPUI.DLL');
  pDI3.pConfigFile := PChar(sDriverPathWin32 +'GENUXPUI.DLL');
  pDI3.pHelpFile := PChar(sDriverPathWin32 +'GENUXP.HLP');
  pDI3.pMonitorName :=PChar('PJL Language Monitor');
  pDI3.pDefaultDataType :=PChar('RAW');
  bStatus :=AddPrinterDriver(PChar(nil),3,@pDI3 );
  if bStatus then begin
    ShowMessage('Printer Driver Setup OK');
  end else begin
    ShowMessage('Printer Driver Setup NG');
  end;
  DeleteFiles(sDriverPathWin32);
  pPI2.pServerName := nil;
  pPI2.pPrinterName := 'Chungho CHP-680';
  pPI2.pDriverName := 'Chungho CHP-680';
  pPI2.pPortName := 'LPT1:';
  ppi2.pPrintProcessor := 'WinPrint';
  pPI2.Priority := 1;
  pPI2.DefaultPriority :=1;
  pPI2.pComment := nil;
  pPI2.pDatatype := 'RAW';
  pPI2.pLocation := nil;
  pPI2.pShareName :=nil;

  hPrint := AddPrinter(nil, 2,@pPI2);
  if hPrint <> 0 then
        ClosePrinter(hPrint);
end;

end.
0  COMMENTS