掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB.Netで印刷JOBの取得・変更 (ID:114806)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
初めまして。 VB.Netで印刷JOBの取得・変更(キャンセル等)をしたいです。 2回目のEnumJobs関数で値がおかしくなっています。 APIを使用していますが、Frameworkで出来るならそちらを使いたいです。 ご存知の方がいましたらご教授願えませんでしょうか。 長くなりましたが、よろしくお願いします。 環境:Win2000・VS.NET <StructLayout(Runtime.InteropServices.LayoutKind.Sequential)> _ Private Structure SYSTEMTIME Public wYear As Int16 Public wMonth As Int16 Public wDayOfWeek As Int16 Public wDay As Int16 Public wHour As Int16 Public wMinute As Int16 Public wSecond As Int16 Public wMilliseconds As Int16 End Structure <StructLayout(Runtime.InteropServices.LayoutKind.Sequential)> _ Private Structure JOB_INFO_1 Public JobId As Integer Public pPrinterName As Integer Public pMachineName As Integer Public pUserName As Integer Public pDocument As Integer Public pDatatype As Integer Public pStatus As Integer Public Status As Integer Public Priority As Integer Public Position As Integer Public TotalPages As Integer Public PagesPrinted As Integer Public Submitted As SYSTEMTIME End Structure Private Const STANDARD_RIGHTS_REQUIRED = &HF0000 Private Const PRINTER_ACCESS_ADMINISTER = &H4& Private Const PRINTER_ACCESS_USE = &H8& Private Const PRINTER_ALL_ACCESS = _ (STANDARD_RIGHTS_REQUIRED Or _ PRINTER_ACCESS_ADMINISTER Or _ PRINTER_ACCESS_USE) <DllImport("winspool.drv", CharSet:=CharSet.Auto, entrypoint:="OpenPrinter")> _ Private Shared Function OpenPrinter(ByVal pPrinterName As String, _ ByRef phPrinter As IntPtr, _ ByVal pDefault As _ PRINTER_DEFAULTS) As Integer End Function <DllImport("winspool.drv", CharSet:=CharSet.Auto, entrypoint:="EnumJobs")> _ Private Shared Function EnumJobs _ (<InAttribute()> ByVal hPrinter As IntPtr, _ <InAttribute()> ByVal FirstJob As Integer, _ <InAttribute()> ByVal NoJobs As Integer, _ <InAttribute()> ByVal Level As Integer, _ <OutAttribute()> ByRef pJob As JOB_INFO_1, _ <InAttribute()> ByVal cdBuf As IntPtr, _ <OutAttribute()> ByRef pcbNeeded As IntPtr, _ <OutAttribute()> ByRef pcReturned As Integer) As Integer End Function Private Sub Test Dim PrintSetting As New System.Drawing.Printing.PrinterSettings Dim strPrinterDeviceName As String Dim udtPrinterDefaults As PRINTER_DEFAULTS Dim hPrinter As IntPtr Dim Ret As Integer '標準プリンタ名を取得 strPrinterDeviceName = PrintSetting.DefaultPageSettings.PrinterSettings.PrinterName 'アクセス権を指定 With udtPrinterDefaults .DesiredAccess = PRINTER_ALL_ACCESS End With Ret = OpenPrinter(strPrinterDeviceName, hPrinter, udtPrinterDefaults) Dim lngJobInfo1FirstJob As Integer = 0 Dim lngJobInfo1EnumerateJob As Integer = 99 Dim lngJobInfo1Level As Integer = 1 Dim udtJobInfo1 As New JOB_INFO_1 Dim udtJobInfo1Buffer As New JOB_INFO_1 Dim ptrJobInfo1Needed As IntPtr Dim ptrJobInfo1Returned As Integer 'サイズを取得 Ret = EnumJobs(hPrinter, _ lngJobInfo1FirstJob, _ lngJobInfo1EnumerateJob, _ lngJobInfo1Level, _ udtJobInfo1Buffer, _ System.IntPtr.Zero, _ ptrJobInfo1Needed, _ ptrJobInfo1Returned) If ptrJobInfo1Needed.Equals(System.IntPtr.Zero) Then Exit Sub End If 'ここでバグる!? Ret = EnumJobs(hPrinter, _ lngJobInfo1FirstJob, _ lngJobInfo1EnumerateJob, _ lngJobInfo1Level, _ udtJobInfo1Buffer, _ ptrJobInfo1Needed, _ ptrJobInfo1Needed, _ ptrJobInfo1Returned) End Sub
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.