• 締切済み

VB2005によるプリンタ制御について

現在、VB6⇒VB2005のコンバージョン作業を行っています。 そこで、今まで使っていたプリンタ制御用のAPIで「OpenPrinter」「EnumJobs」「SetPrinter」を利用し、 対象プリンタのエラー等で溜まったジョブの削除を行っていました。 しかし、VB2005になり、これらのAPIをうまく使う事が出来ないでいます。 今回、やりたい事は、「指定したプリンタのジョブを削除する」という処理を行いたいと思っています。 VB2005でこれらのAPIの使い方を教えて頂けないでしょうか? 又は、.NETのクラスでプリンタのジョブ削除をやってくれる機能が あれば教えて頂きたいと思っています。 よろしくお願いします。

  • bekio
  • お礼率41% (5/12)

みんなの回答

  • AlexSuns
  • ベストアンサー率67% (78/115)
回答No.1

なにやら、最近似たような質問を見たような気がしますが... 参考になりそうなものを記述します DOBON.NET > プログラミング道 > .NET Tips > 画像、印刷 プリンタのポート、状態を取得する http://dobon.net/vb/dotnet/graphics/printerport.html Win32APIを使用していたということなので、.NETでAPIを使用する為の参考サイトです ※すべてC#にて記述されています OpenPrinter (winspool) http://www.pinvoke.net/default.aspx/winspool/OpenPrinter.html EnumJobs (winspool) http://www.pinvoke.net/default.aspx/winspool/EnumJobs.html SetPrinter (winspool) http://www.pinvoke.net/default.aspx/winspool/SetPrinter.html あと別の手法としてはWMIを使用することですかね... (WMIをそのまま使用するわけではなく、DirectoryServiceとして記述する)

bekio
質問者

お礼

回答ありがとうございます。 参考サイトを見て試してみます。

関連するQ&A

  • vb.net2010 でのラインプリンタ制御

    vb.net2010 より、ラインプリンタ(FUJTSU VSP3710B)にセットされている用紙情報を取得することは可能でしょうか。 プログラム(exe)は Windows Server2008 へ配置します。 ラインプリンタはネットワーク接続されています。 プリンタから、宅配便の送り状を印刷しようと考えていますが、他の業務で別の用紙への印刷処理があるため、対象の用紙がセットされている場合のみ、印刷処理を行うよう制御したいと考えています。(そちらの業務では、用紙チェックは行っていない。) ただ、情報が少なく実現性が見えないため、非常に困っています。 (無知なだけかもしれませんが・・・。) プログラムはバッチ処理のため、セットされている用紙に問題なければ印刷処理実行し、用紙サイズがNGの場合のみ、エラーとするような制御をイメージしています。 どなたか、知識・情報をお持ちの方がいましたら、ご教示いただきたく思います。 よろしくお願いいたします。

  • VB6でのネットワークプリンタ(OS:WInXP)に対する印刷

    ご存じの方がおられましたら教えていただきたいのですが・・・ 当方、VB6(SP6)でアプリを作成し印刷機能も作りました。 以前はWin2000からプリンタサーバー(Win2000につながっているプリンタ)に対してネットワーク印刷を行っていました。APIを使用して用紙方向等変更できてました。簡単な処理の流れとしては、 (1)現在選択されているプリンタの情報を取得し記憶しておく。 (2)用紙方向等の変更 (3)印刷 (4)記憶しておいた内容にプリンタを戻す と言う具合です。 ところが、社内環境がかわり、WinXPからプリンタサーバー(WinXPにつながったプリンタ)に対して上記の処理を行うとエラーが出力されます。 調べたところ、始めにOpenPrinter関数を呼んでいるのですがこの時点で戻り値が0(関数が失敗)が帰ってきています。 ソースは以下のような感じです(一部抜粋) ' 標準的な権利を要求することを示す定数の宣言 Public Const STANDARD_RIGHTS_REQUIRED = &HF0000 ' プリンタアクセス権の管理者権限を示す定数の宣言 Public Const PRINTER_ACCESS_ADMINISTER = &H4& ' プリンタアクセス権のユーザー権限を示す定数の宣言 Public Const PRINTER_ACCESS_USE = &H8& ' プリンタアクセス権すべての権限を示す定数の宣言 Public Const PRINTER_ALL_ACCESS = _ (STANDARD_RIGHTS_REQUIRED Or _ PRINTER_ACCESS_ADMINISTER Or _ PRINTER_ACCESS_USE) ' プリンタのオブジェクトハンドルを取得する関数の宣言 Declare Function OpenPrinter Lib "winspool.drv" _ Alias "OpenPrinterA" _ (ByVal pPrinterName As String, _ phPrinter As Long, _ pDefault As Any) As Long '**************************************************** '↓処理 ' プリンタ名を指定 strPrinterDeviceName = Printer.DeviceName ' プリンタアクセス権を指定 With udtPrinterDefaults .DesiredAccess = PRINTER_ALL_ACCESS End With ' プリンタのオブジェクトハンドルを取得 lngWin32apiResultCode = OpenPrinter(strPrinterDeviceName, lngPrinterHandle, udtPrinterDefaults) ↑ この変数の戻り値が0 試しに色々やってみました。 (1)WinXPからプリンタサーバー(OS:WinXP)  × (2)WinXPからプリンタサーバー(OS:Win2000)  ○ (3)プリンタサーバー(OS:WinXP)にアプリを ○ インストール後印刷 ※ローカルプリンタに対する印刷 うまくいかないのはプリンタサーバーがWinXPの時のみエラーが 出てしまうようです。 宜しくお願いします。

  • アクセス2010 住所入力支援機能をVBから制御し

    郵便番号を入力すると指定されたフィールドに住所が表示される機能。 この機能のオン・オフをVBコードから制御できないでしょうか?

  • VBでWin32APIを使う方法

    VB2010を触っていて、Webで情報を拾いながらコードを作成しています。 .NetFrameWorkではクラスで対応できない時にWin32APIを使うとありました。 この記述はVB2005の時のもので、やや旧いです。 VBの版が進むと使えるクラスも多くなって、APIの出番はますますなくなっているのでしょうか? 取り敢えず現在使いたいAPIはVB6からのコピーでSHGetSpecialFolderLocationと GetSystemDirectoryの2つです。これはクラスで代用可能ですか。 それともAPIでやるべきなのでしょうか。 現在APIで記述しています。リビルドでパラメータのエラーが出て止まっています。 ちょっと手探り状態で作業を進めているため、的が外れていたら済みません。 ソースは以下のようになっています。   ws = GetSystemDirectory(sysDir, MAX_PATH)   GetSystemDir = Left$(sysDir, InStr(sysDir, vbNullChar) - 1)

  • キーの入力をVBで受けたいんです。

    VBで簡単な業務支援をしたいと思っています。 VBのアプリケーションがアクティブになっていなくても(起動はしてる)、あるキーの入力を感知して、VBがアクティブになりイベントが動くような処理はできないでしょうか? できればVBでやりたいのですが、Windowsの機能やAPIを使ってでもかまいませんので方法がありましたら教えてください。

  • VBでフォームを印刷させたいと思っています。

    VBでフォームを印刷させたいと思っています。 PCの動作確認用にVBで作成したフォームを、PC内に設定されているプリンタ全てから印刷させるようなプログラムを組んでいます。 現状ではprintformで印刷しているのですが、これだと通常使うプリンタで印刷されてしまうので印刷処理前に通常使うプリンタを変更してから印刷処理しています。 ただ、実際に作業で利用してみたところ通常使うプリンタが変更できずに印刷処理できないことがありました。 そこで、通常使うプリンタではなく指定したプリンタにフォームを印刷させたいと思いました。 なにかよいサンプルやソースをご存知であれば教えていただけると助かります。 利用しているのはVB6です。 よろしくお願いいたします。

  • VB6.0 VB.NET2003とのクラスの違い

    こんにちは VB6.0でデータベースのソフトを作成しています。 当初VB6.0はVB.NETと違い完全なオブジェクト指向言語ではないと聞いていたので、 フォームの画面ごとに検索、追加、更新、削除、入力チェック,印刷のコードを書いていこうとしました。 しかし、最近そうでもないことがわかりました。 そこで、画面ごとではなく機能ごとに検索、追加、更新、削除、入力チェック,印刷のクラスモジュールをつくり、 どこに何が書かれているかわかるようにコーディングしたいと思います。 VB.NET2003は学生のころやっていたのですが、VB6.0は最近やりだしたのでよくわかっていません。 VB6.0の入門書をみてもクラスについては2~3ページしか触れていません。 VB.NET2003にはできるがVB6.0にはできないクラスの大きな違いを教えてください。 いまのところコンストラクターとオーバーロードはできないということだけわかっています。

  • VB6でプリンタへの出力を検出したい

    VB6で作成したアプリで、プリンタへの出力を検出したいと思っています。 作成したソフトを常駐させておき、対象とするアプリの種類を問わず、プリンタへの出力を検出したら強制的にプレビュー画面を表示させたいのです。 自分に具体的な実現方法が思いつかず、また検索しても似たような話題も見つからないので、VBでは不可能なのかと疑問に思っています。 このような開発を手掛けられた事のある方や、知識をお持ちの方がいらっしゃいましたら、ご助言いただきたいのですが、よろしくお願いいたします。 <開発環境> WinXP pro sp1 VB6.0 sp5

  • Web画面でのフォーカスの制御

    <Web画面におけるフォーカスの制御について> VBでよく使うLostFocusのような、データが入力されたあとでの処理をするような機能がWeb画面作成のプログラムでは、あるのでしょうか?

  • APIを使用した印刷

    こんにちはsinakuというものですが かなり困っております 現在API関数のみを使用した印刷方法がわかりません どのような順序でプリンタとのやり取りをしてよいやらまったくです そこで教えていただきたいのですが ' まずプリンタ名の取得 GetDefaultPrinter ' 取得したプリンタ名をもとにプリンタのハンドルを取得 OpenPrinter この後から ' プリンタハンドルのクローズ ClosePrinter の間の処理がわかりません いろいろ調べてみたのですが StartDocPrinter GetPrinter などなどまだまだ他にも使用することはわかったのですが 一通りの流れを解説しているようなHPはないでしょうか? または同じようにAPIだけを使用してプリンタの印刷処理を 作られた経験がある方は居ないでしょうか? できれば呼び出すAPIの順序だけでもわかるとどうにかなるのですが 実際にどんな動きで印刷しているのかまったくわからないので よろしくお願いします