DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VB2005でのIE印刷設定

環境/言語:[Windows7、IE8、VB2005]
分類:[.NET]

はじめまして、VBからIEを操作するプログラムでハマってます。

Aというホームページを開いて印刷ボタンを押すと、
Bというホームページが別ウインドウで開き、自動で印刷設定画面が開きます。
やりたい事は、この印刷設定画面で使用するプリンタや部数、印刷の向きを変更したいです。

Dim wobjIE As New Object
wobjIE = CreateObject("InternetExplorer.Application")
wobjIE.Navigate("Aのアドレス")
wobjIE.Visible = True 'IEの表示
wobjIE.Document.GetElementById("印刷").click() '印刷ボタンクリック

印刷設定画面を開くところまでは出来たのですが・・・
どうかご教授願います。
  • 題名: Re[1]: VB2005でのIE印刷設定
  • 著者: ごぼう
  • 日時: 2012/07/03 16:27:24
  • ID: 30685
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
すいません補足です。
> Bというホームページが別ウインドウで開き、自動で印刷設定画面が開きます。
とありますが、この部分はIE側の自動的な処理です。
■No30683に返信(ごぼうさんの記事)
> やりたい事は、この印刷設定画面で使用するプリンタや部数、印刷の向きを変更したいです。

IE:TEMPLATEPRINTER エレメント ビヘイビアにて
 copies=部数
 orientation=向き
を指定するぐらいはできますけれどね。
http://msdn.microsoft.com/ja-jp/library/bb250434(VS.85).aspx
http://msdn.microsoft.com/en-us/library/aa969431(VS.85).aspx

あとは ScriptX を使うか、API でダイアログを直接制御するとか…。
  • 題名: Re[2]: VB2005でのIE印刷設定
  • 著者: ごぼう
  • 日時: 2012/07/06 17:29:08
  • ID: 30710
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
魔界の仮面弁士さん、ありがとうございます。
すいません返事が遅れました・・・

APIで印刷ダイアログを直接制御することにし、成功しました。
ソースは下記になります。
もしかしたら、OSなど環境によってGetDlgItemを使用するためのコントロールIDが変わるかもしれませんが・・・

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
(ByVal hWnd1 As Integer, ByVal hWnd2 As Integer, ByVal lpsz1 As String, ByVal lpsz2 As String) As Integer
Public Declare Function GetDlgItem Lib "user32.dll" Alias "GetDlgItem" ( _
ByVal hDlg As Integer, ByVal nIDDlgItem As Integer) As Integer
Public Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _
(ByVal hWnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Public Declare Function SendMessageAny Lib "user32.dll" Alias "SendMessageA" _
(ByVal hWnd As Integer, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer

Public Const WM_SETTEXT = &HC
Public Const BM_SETCHECK = &HF1
Public Const WM_COMMAND As Long = &H111
Public Const CB_SETCURSEL = &H14E&
Public Const CBN_SELENDOK = &H9&

Private Sub test()
Dim wintPrinter As Integer '印刷ダイアログハンドル
Dim wintTest As Integer

'印刷ダイアログハンドル取得
wintPrinter = FindWindowEx(0, 0, vbNullString, "印刷")

'部数変更
wintTest = GetDlgItem(wintPrinter, &H482)
SendMessageAny(wintTest, WM_SETTEXT, 0, "2")

'部単位で印刷
wintTest = GetDlgItem(wintPrinter, &H411)
SendMessage(wintTest, BM_SETCHECK, 1, 0)

'拡大/縮小
wintTest = GetDlgItem(wintPrinter, &H22D)
SendMessage(wintTest, CB_SETCURSEL, 0&, 0&)
SendMessage(wintPrinter, WM_COMMAND, CBN_SELENDOK * &H10000 Or &H22D&, wintTest)
End Sub
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板