http://q.hatena.ne.jp/1323786699

の続きの質問です。

IE6を利用しています。色々なページを表示して、IE.ExecWBで自動印刷しています。

印刷を自動でかけられるようになったのですが、1ページのみ限定で印刷したいとと思います。

ページによっては印刷範囲におさまりきらず、5ページとか表示されてしまいます。本当に必要なのは1ページ目のみです。
Web Browser Controlを使い、何か良い方法で1ページだけ印刷できるようにできないでしょうか?

または、デフォルトでファイルから印刷、「ページ範囲」の「ページ指定」に「1」選択するようにIEの設定をできないでしょうか?たぶんレジストリを触るような気がするのですが・・・

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2011/12/19 17:55:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:cx20 No.1

回答回数607ベストアンサー獲得回数108

ポイント100pt

ちょっと強引ですが、UWSC で印刷ダイアログを制御することで、印刷ページの指定が可能です。
Windows7 + IE9 の環境で確認しました。
ブラウザのバージョンによってはショートカットキーが違うために正しく動作しない可能性がありますので、お手数ですが、確認をお願いします。

// File : IEAutoPrint.uws
Option Explicit

Main()

Procedure Main()
    // Web ページを表示
    ShowBrowser( "http://www.yahoo.co.jp/" )
    Sleep(1)
    
    // ページ範囲を指定して印刷
    Dim strPageCondition
    strPageCondition = "1-1"
    PrintBrowser( strPageCondition )
Fend

Procedure ShowBrowser( strURL )
    Dim ie
    ie = CreateOleObj("InternetExplorer.Application")
    ie.Visible = True
    Print "Web ページ [" + strURL + "] を表示"
    ie.Navigate( strURL )
Fend

Procedure PrintBrowser( strPageCondition )
    Dim nID
    nID = ActivateBrowser()
    Sleep(1)
    
    ExecPrint( nID, strPageCondition )
Fend

Function ActivateBrowser()
    Dim nID
    nID = GetId( "Internet Explorer", "IEFrame" )
    ACW( nID )
    Result = nID
Fend

Function ActivatePrintDialog()
    Dim nID
    nID = GetId( "印刷" )
    ACW( nID )
    Result = nID
Fend

Procedure ExecPrint( nID, strPageCondition )
    Print "印刷ダイアログを表示"
    ScKey( nID, VK_CTRL, P )
    Sleep(1)

    nID = ActivatePrintDialog()
    Sleep(1)

    Print "[ページ範囲] - [ページ指定(G)] を選択"
    ScKey( nID, VK_ALT, G)
    Sleep(1)
    
    Print "印刷ページを [" + strPageCondition + "] に指定"
    SendStr( nID, strPageCondition )
    Sleep(1)
    
    Print "[印刷(P)] 実行"
    ScKey( nID, VK_ALT, P)
    Sleep(1)
Fend

実行結果

Web ページ [http://www.yahoo.co.jp/] を表示
印刷ダイアログを表示
[ページ範囲] - [ページ指定(G)] を選択
印刷ページを [1-1] に指定
[印刷(P)] 実行

ちなみに、IE の印刷設定に関して、レジストリで設定できるのは

  • ページ余白
  • ヘッダー情報
  • フッター情報

くらいのようです。プリンタ名を選択したり、ページ数を指定するような設定は持っていないようです。

■ How to change print settings for Internet Explorer and the WebBrowser control programmatically in Internet Explorer
http://support.microsoft.com/kb/236777/en-us


また、有償のようですが「MeadCo's ScriptX」という ActiveX コントロールを利用することで、印刷処理の自動化が行えるようです。

■ MeadCo's ScriptX: Printing Programming Manual
http://www.meadroid.com/scriptx/docs/clientprint.htm

id:akaired

うわ~~すごい!!わかりやすいコードまで書いて頂いてありがとうございます!物凄く勉強になります。レジストリは確認していましたが、ページ範囲に関して見つけることができなかったので、他にあるのかなと思って質問させて頂きました。MeadCo'sというものははじめて知りましたが、あとでチェックしてみます。ここまで詳しく書いて頂き大変助かりました。ありがとうございます!

2011/12/16 23:01:10
  • id:windofjuly
    うぃんど 2011/12/14 13:56:29
    ヒントだけしか書く時間無いのでコメントで・・・

    ExecWBはメニューを実行するためのメソッド
    プロパティの操作はGetPropertyとPutPropertyメソッド
  • id:akaired
    GetPropertyとPutPropertyは知りませんでした。さっそく調べてみます。ご回答ありがとうございました!!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません