API使用のプリンタ設定変更についてHelp!(C#)
- 題名: API使用のプリンタ設定変更についてHelp!(C#)
- 著者: Ayane
- 日時: 2011/10/27 17:41:25
- ID: 29300
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: API使用のプリンタ設定変更についてHelp!(C#) 続き
- 著者: Ayane
- 日時: 2011/10/27 17:42:57
- ID: 29301
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: API使用のプリンタ設定変更についてHelp!(C#) 続き
- 著者: zama
- 日時: 2011/10/27 22:30:45
- ID: 29303
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: API使用のプリンタ設定変更についてHelp!(C#) 続き
- 著者: Ayane
- 日時: 2011/10/28 15:07:17
- ID: 29304
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: API使用のプリンタ設定変更についてHelp!(C#) 続き
- 著者: ユージ
- 日時: 2011/10/28 16:35:47
- ID: 29305
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: API使用のプリンタ設定変更についてHelp!(C#) 続き
- 著者: Mira
- 日時: 2011/10/28 16:41:25
- ID: 29306
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: API使用のプリンタ設定変更についてHelp!(C#)
- 著者: iti
- 日時: 2011/10/28 19:00:04
- ID: 29307
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: API使用のプリンタ設定変更についてHelp!(C#)
- 著者: iti
- 日時: 2011/10/28 22:47:19
- ID: 29308
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[5]: API使用のプリンタ設定変更についてHelp!(C#) 続き
- 著者: Ayane
- 日時: 2011/10/31 13:18:53
- ID: 29313
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[5]: API使用のプリンタ設定変更についてHelp!(C#) 続き
- 著者: Ayane
- 日時: 2011/10/31 13:27:33
- ID: 29314
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[6]: API使用のプリンタ設定変更についてHelp!(C#) 続き
- 著者: ユージ
- 日時: 2011/11/01 14:25:45
- ID: 29315
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
こんにちは 初めて投稿します。初心者です。
現在プリンタの設定をプログラムから変更したいと思っています。
目的は、ユーザごとに使用しているプリンタの機種が違うという環境で、
エクセルファイルを印刷する際に、任意のシートで片面印刷と両面印刷を切り替えるというものです。
下記のソースについて、
アカウントがadministratorの場合は設定の変更が成功しますが、制限付アカウントの場合は「アクセスが拒否されました」のエラーで失敗してしまいます。
どなたか助けて頂ければ嬉しいです!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.ComponentModel;
namespace WindowsFormsApplication1
{
class Class1
{
}
public class PrinterSettings
{
#region "Private Variables"
private IntPtr hPrinter = new System.IntPtr();
private PRINTER_DEFAULTS PrinterValues = new PRINTER_DEFAULTS();
private PRINTER_INFO_2 pinfo = new PRINTER_INFO_2();
private DEVMODE dm;
private IntPtr ptrDM;
private IntPtr ptrPrinterInfo;
private int sizeOfDevMode = 0;
private int lastError;
private int nBytesNeeded;
private long nRet;
private int intError;
private System.Int32 nJunk;
private IntPtr yDevModeData;
#endregion
#region "Win API Def"
[DllImport("kernel32.dll", EntryPoint = "GetLastError", SetLastError = false,
ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
private static extern Int32 GetLastError();
[DllImport("winspool.Drv", EntryPoint = "ClosePrinter", SetLastError = true,
ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
private static extern bool ClosePrinter(IntPtr hPrinter);
[DllImport("winspool.Drv", EntryPoint = "DocumentPropertiesA", SetLastError = true,
ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
private static extern int DocumentProperties(IntPtr hwnd, IntPtr hPrinter,
[MarshalAs(UnmanagedType.LPStr)] string pDeviceNameg,
IntPtr pDevModeOutput, ref IntPtr pDevModeInput, int fMode);
[DllImport("winspool.Drv", EntryPoint = "GetPrinterA", SetLastError = true,
CharSet = CharSet.Ansi, ExactSpelling = true,
CallingConvention = CallingConvention.StdCall)]
private static extern bool GetPrinter(IntPtr hPrinter, Int32 dwLevel,
IntPtr pPrinter, Int32 dwBuf, out Int32 dwNeeded);
[DllImport("winspool.Drv", EntryPoint = "OpenPrinterA",
SetLastError = true, CharSet = CharSet.Ansi,
ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
private static extern bool
OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter,
out IntPtr hPrinter, ref PRINTER_DEFAULTS pd);
[DllImport("winspool.drv", CharSet = CharSet.Ansi, SetLastError = true)]
private static extern bool SetPrinter(IntPtr hPrinter, int Level, IntPtr
pPrinter, int Command);
#endregion
#region "Data structure"
[StructLayout(LayoutKind.Sequential)]
public struct PRINTER_DEFAULTS
{
public int pDatatype;
public int pDevMode;
public int DesiredAccess;
}
[StructLayout(LayoutKind.Sequential)]
private struct PRINTER_INFO_2
{
[MarshalAs(UnmanagedType.LPStr)]
public string pServerName;
[MarshalAs(UnmanagedType.LPStr)]
public string pPrinterName;
[MarshalAs(UnmanagedType.LPStr)]
public string pShareName;
[MarshalAs(UnmanagedType.LPStr)]
public string pPortName;
[MarshalAs(UnmanagedType.LPStr)]
public string pDriverName;
[MarshalAs(UnmanagedType.LPStr)]
public string pComment;
[MarshalAs(UnmanagedType.LPStr)]
public string pLocation;
public IntPtr pDevMode;
[MarshalAs(UnmanagedType.LPStr)]
public string pSepFile;
[MarshalAs(UnmanagedType.LPStr)]
public string pPrintProcessor;
[MarshalAs(UnmanagedType.LPStr)]
public string pDatatype;
[MarshalAs(UnmanagedType.LPStr)]
public string pParameters;
public IntPtr pSecurityDescriptor;
public Int32 Attributes;
public Int32 Priority;
public Int32 DefaultPriority;
public Int32 StartTime;
public Int32 UntilTime;
public Int32 Status;
public Int32 cJobs;
public Int32 AveragePPM;
}
private const short CCDEVICENAME = 32;
private const short CCFORMNAME = 32;
[StructLayout(LayoutKind.Sequential)]
public struct DEVMODE
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCDEVICENAME)]
public string dmDeviceName;
public short dmSpecVersion;
public short dmDriverVersion;
public short dmSize;
public short dmDriverExtra;
public int dmFields;
public short dmOrientation;
public short dmPaperSize;
public short dmPaperLength;
public short dmPaperWidth;
public short dmScale;
public short dmCopies;
public short dmDefaultSource;
public short dmPrintQuality;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = CCFORMNAME)]
public string dmFormName;
public short dmUnusedPadding;
public short dmBitsPerPel;
public int dmPelsWidth;
public int dmPelsHeight;
public int dmDisplayFlags;
public int dmDisplayFrequency;
}
#endregion
続く