前提・実現したいこと
VB.NETでプリンタに直接印刷指示を行うプログラムを作っています。
DEVMODE構造体を利用すれば、細かい設定を出来ることが出来そうなので、
まずは現在のデフォルトプリンタの設定を呼び出すプログラムを作成したいです。
しかし、ハンドルなどを利用した事が今までないので、
どうすれば良いか殆どわからない状態で作ったコードが下記のコードになります。
該当のソースコード
vb
1<StructLayout(LayoutKind.Sequential)> _ 2Public Structure DEVMODE 3 Public Const CCHDEVICENAME As Integer = 32 4 Public Const CCHFORMNAME As Integer = 32 5 6 <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=CCHDEVICENAME)> _ 7 Public dmDeviceName As String 8 Public dmSpecVersion As Short 9 Public dmDriverVersion As Short 10 Public dmSize As Short 11 Public dmDriverExtra As Short 12 Public dmFields As Integer 13 14 Public dmOrientation As Short 15 Public dmPaperSize As Short 16 Public dmPaperLength As Short 17 Public dmPaperWidth As Short 18 19 Public dmScale As Short 20 Public dmCopies As Short 21 Public dmDefaultSource As Short 22 Public dmPrintQuality As Short 23 Public dmColor As Short 24 Public dmDuplex As Short 25 Public dmYResolution As Short 26 Public dmTTOption As Short 27 Public dmCollate As Short 28 <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=CCHFORMNAME)> _ 29 Public dmFormName As String 30 Public dmLogPixels As Short 31 Public dmBitsPerPel As Integer 32 Public dmPelsWidth As Integer 33 Public dmPelsHeight As Integer 34 Public dmDisplayFlags As Integer 35 Public dmDisplayFrequency As Integer 36 37 Public dmICMMethod As Integer 38 Public dmICMIntent As Integer 39 Public dmMediaType As Integer 40 Public dmDitherType As Integer 41 Public dmReserved1 As Integer 42 Public dmReserved2 As Integer 43 Public dmPanningWidth As Integer 44 Public dmPanningHeight As Integer 45 46 Public dmPositionX As Integer 47 Public dmPositionY As Integer 48End Structure 49 50Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 51 PrintDocument1.PrinterSettings.PrinterName = "Microsoft Print to PDF" 52 Dim devmodePtr As IntPtr = PrintDocument1.PrinterSettings.GetHdevmode() 53 Dim dm As DEVMODE = CType(Marshal.PtrToStructure(devmodePtr, GetType(DEVMODE)), DEVMODE) 54 GlobalFree(devmodePtr) 55End Sub
発生している問題・エラーメッセージ
上記のコードを確認すると、
dm.dmDeviceNameが「K」になっていたり、
dm.dmPaperSizeが「101」になっていたり、
上手く取得できません。
補足情報(FW/ツールのバージョンなど)
VB.NET 4.5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。