使用C#更改打印机设置Word下载.docx
- 文档编号:8041901
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:11
- 大小:16.53KB
使用C#更改打印机设置Word下载.docx
《使用C#更改打印机设置Word下载.docx》由会员分享,可在线阅读,更多相关《使用C#更改打印机设置Word下载.docx(11页珍藏版)》请在冰点文库上搜索。
[DllImport("
kernel32.dll"
EntryPoint="
GetLastError"
SetLastError=false,
ExactSpelling=true,CallingConvention=CallingConvention.StdCall)]
privatestaticexternInt32GetLastError();
winspool.Drv"
ClosePrinter"
SetLastError=true,
privatestaticexternboolClosePrinter(IntPtrhPrinter);
DocumentPropertiesA"
privatestaticexternintDocumentProperties(IntPtrhwnd,IntPtrhPrinter,
[MarshalAs(UnmanagedType.LPStr)]stringpDeviceNameg,
IntPtrpDevModeOutput,refIntPtrpDevModeInput,intfMode);
GetPrinterA"
CharSet=CharSet.Ansi,ExactSpelling=true,
CallingConvention=CallingConvention.StdCall)]
privatestaticexternboolGetPrinter(IntPtrhPrinter,Int32dwLevel,
IntPtrpPrinter,Int32dwBuf,outInt32dwNeeded);
/*[DllImport("
OpenPrinterA"
SetLastError=true,CharSet=CharSet.Ansi,
ExactSpelling=true,CallingConvention=CallingConvention.StdCall)]
staticexternboolOpenPrinter([MarshalAs(UnmanagedType.LPStr)]stringszPrinter,
outIntPtrhPrinter,refPRINTER_DEFAULTSpd)
[DllImport("
winspool.drv"
CharSet=CharSet.Unicode,ExactSpelling=false,
CallingConvention=CallingConvention.StdCall)]
publicstaticexternlongOpenPrinter(stringpPrinterName,
refIntPtrphPrinter,intpDefault);
*/
outIntPtrhPrinter,refPRINTER_DEFAULTSpd);
*/
privatestaticexternbool
OpenPrinter([MarshalAs(UnmanagedType.LPStr)]stringszPrinter,
outIntPtrhPrinter,refPRINTER_DEFAULTSpd);
CharSet=CharSet.Ansi,SetLastError=true)]
privatestaticexternboolSetPrinter(IntPtrhPrinter,intLevel,IntPtr
pPrinter,intCommand);
//WrapperforWin32messageformatter.
CharSet=System.Runtime.InteropServices.CharSet.Auto)]
privateunsafestaticexternintFormatMessage(intdwFlags,
refIntPtrpMessageSource,
intdwMessageID,
intdwLanguageID,
refstringlpBuffer,
intnSize,
IntPtr*pArguments);
Datastructure"
[StructLayout(LayoutKind.Sequential)]
publicstructPRINTER_DEFAULTS
publicintpDatatype;
publicintpDevMode;
publicintDesiredAccess;
}
/*[StructLayout(LayoutKind.Sequential,CharSet=CharSet.Auto)]
publicintpDataType;
publicIntPtrpDevMode;
publicACCESS_MASKDesiredAccess;
}*/
privatestructPRINTER_INFO_2
[MarshalAs(UnmanagedType.LPStr)]publicstringpServerName;
[MarshalAs(UnmanagedType.LPStr)]publicstringpPrinterName;
[MarshalAs(UnmanagedType.LPStr)]publicstringpShareName;
[MarshalAs(UnmanagedType.LPStr)]publicstringpPortName;
[MarshalAs(UnmanagedType.LPStr)]publicstringpDriverName;
[MarshalAs(UnmanagedType.LPStr)]publicstringpComment;
[MarshalAs(UnmanagedType.LPStr)]publicstringpLocation;
[MarshalAs(UnmanagedType.LPStr)]publicstringpSepFile;
[MarshalAs(UnmanagedType.LPStr)]publicstringpPrintProcessor;
[MarshalAs(UnmanagedType.LPStr)]publicstringpDatatype;
[MarshalAs(UnmanagedType.LPStr)]publicstringpParameters;
publicIntPtrpSecurityDescriptor;
publicInt32Attributes;
publicInt32Priority;
publicInt32DefaultPriority;
publicInt32StartTime;
publicInt32UntilTime;
publicInt32Status;
publicInt32cJobs;
publicInt32AveragePPM;
privateconstshortCCDEVICENAME=32;
privateconstshortCCFORMNAME=32;
[StructLayout(LayoutKind.Sequential)]
publicstructDEVMODE
{
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=CCDEVICENAME)]
publicstringdmDeviceName;
publicshortdmSpecVersion;
publicshortdmDriverVersion;
publicshortdmSize;
publicshortdmDriverExtra;
publicintdmFields;
publicshortdmOrientation;
publicshortdmPaperSize;
publicshortdmPaperLength;
publicshortdmPaperWidth;
publicshortdmScale;
publicshortdmCopies;
publicshortdmDefaultSource;
publicshortdmPrintQuality;
publicshortdmColor;
publicshortdmDuplex;
publicshortdmYResolution;
publicshortdmTTOption;
publicshortdmCollate;
[MarshalAs(UnmanagedType.ByValTStr,SizeConst=CCFORMNAME)]
publicstringdmFormName;
publicshortdmUnusedPadding;
publicshortdmBitsPerPel;
publicintdmPelsWidth;
publicintdmPelsHeight;
publicintdmDisplayFlags;
publicintdmDisplayFrequency;
Constants"
privateconstintDM_DUPLEX=0x1000;
privateconstintDM_IN_BUFFER=8;
privateconstintDM_OUT_BUFFER=2;
privateconstintPRINTER_ACCESS_ADMINISTER=0x4;
privateconstintPRINTER_ACCESS_USE=0x8;
privateconstintSTANDARD_RIGHTS_REQUIRED=0xF0000;
privateconstintPRINTER_ALL_ACCESS=
(STANDARD_RIGHTS_REQUIRED|PRINTER_ACCESS_ADMINISTER
|PRINTER_ACCESS_USE);
Functiontochangeprintersettings"
publicboolChangePrinterSetting(stringPrinterName,PrinterDataPS)
if(((int)PS.Duplex<
1)||((int)PS.Duplex>
3))
thrownewArgumentOutOfRangeException("
nDuplexSetting"
"
nDuplexSettingisincorrect."
);
else
dm=this.GetPrinterSettings(PrinterName);
dm.dmDefaultSource=(short)PS.source;
dm.dmOrientation=(short)PS.Orientation;
dm.dmPaperSize=(short)PS.Size;
dm.dmDuplex=(short)PS.Duplex;
Marshal.StructureToPtr(dm,yDevModeData,true);
pinfo.pDevMode=yDevModeData;
pinfo.pSecurityDescriptor=IntPtr.Zero;
/*updatedriverdependentpartoftheDEVMODE
1=DocumentProperties(IntPtr.Zero,hPrinter,sPrinterName,yDevModeData
refpinfo.pDevMode,(DM_IN_BUFFER|DM_OUT_BUFFER));
Marshal.StructureToPtr(pinfo,ptrPrinterInfo,true);
lastError=Marshal.GetLastWin32Error();
nRet=Convert.ToInt16(SetPrinter(hPrinter,2,ptrPrinterInfo,0));
if(nRet==0)
//Unabletosetsharedprintersettings.
//stringmyErrMsg=GetErrorMessage(lastError);
thrownewWin32Exception(Marshal.GetLastWin32Error());
if(hPrinter!
=IntPtr.Zero)
ClosePrinter(hPrinter);
returnConvert.ToBoolean(nRet);
privateDEVMODEGetPrinterSettings(stringPrinterName)
PrinterDataPData=newPrinterData();
DEVMODEdm;
constintPRINTER_ACCESS_ADMINISTER=0x4;
constintPRINTER_ACCESS_USE=0x8;
constintPRINTER_ALL_ACCESS=(STANDARD_RIGHTS_REQUIRED|
PRINTER_ACCESS_ADMINISTER|PRINTER_ACCESS_USE);
PrinterValues.pDatatype=0;
PrinterValues.pDevMode=0;
PrinterValues.DesiredAccess=PRINTER_ALL_ACCESS;
nRet=Convert.ToInt32(OpenPrinter(PrinterName,
outhPrinter,refPrinterValues));
GetPrinter(hPrinter,2,IntPtr.Zero,0,outnBytesNeeded);
if(nBytesNeeded<
=0)
thrownewSystem.Exception("
Unabletoallocatememory"
//AllocateenoughspaceforPRINTER_INFO_2...
{ptrPrinterInfo=Marshal.AllocCoTaskMem(nBytesNeeded)};
ptrPrinterInfo=Marshal.AllocHGlobal(nBytesNeeded);
//ThesecondGetPrinterfillsinallthecurrentsettings,soallyou
//needtodoismodifywhatyou'
reinterestedin...
nRet=Convert.ToInt32(GetPrinter(hPrinter,2,
ptrPrinterInfo,nBytesNeeded,outnJunk));
pinfo=(PRINTER_INFO_2)Marshal.PtrToStructure(ptrPrinterInfo,
typeof(PRINTER_INFO_2));
IntPtrTemp=newIntPtr();
if(pinfo.pDevMode==IntPtr.Zero)
//IfGetPrinterdidn'
tfillintheDEVMODE,trytogetitbycalling
//DocumentProperties...
IntPtrptrZero=IntPtr.Zero;
//getthesizeofthedevmodestructure
sizeOfDevMode=DocumentProperties(IntPtr.Zero,hPrinter,
PrinterName,ptrZero,refptrZero,0);
ptrDM=Marshal.AllocCoTaskMem(sizeOfDevMode);
inti;
i=DocumentProperties(IntPtr.Zero,hPrinter,PrinterName,ptrDM,
refptrZero,DM_OUT_BUFFER);
if((i<
0)||(ptrDM==IntPtr.Zero))
//CannotgettheDEVMODEstructure.
CannotgetDEVMODEdata"
pinfo.pDevMode=ptrDM;
intError=DocumentProperties(IntPtr.Zero,hPrinter,
PrinterName,IntPtr.Zero,refTemp,0);
//IntPtryDevModeData=Marshal.AllocCoTaskMem(i1);
yDevModeData=Marshal.AllocHGlobal(intError);
PrinterName,yDevModeData,refTemp,2);
dm=(DEVMODE)Marshal.PtrToStructure(yDevModeData,typeof(DEVMODE));
//nRet=DocumentProperties(IntPtr.Zero,hPrinter,sPrinterName,yDevModeData
//,refyDevModeData,(DM_IN_BUFFER|DM_OUT_BUFFER)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 使用 C# 更改 打印机 设置