'TabGroupをMHT形式で保存 '作成日:2006/05/22 '修正日:2006/06/07 '作成者:Eclipse '※概要※ '表示しているページから右のページをまとめて新しいTabGroupに移しMHT形式で保存する '※変更点※ '2006/06/07 選択文字列有無の判別ルーチンをActiveFrameDocumentを用いたものに変更 ' 選択文字列からファイル名に使えない文字列を除去するルーチンを追加 Option Explicit '■■ 定数宣言 ■■ Const ForReading = 1, ForWriting = 2 Const TAB_NAME_FOR_SAVE = "保存用タブ" Const SAVE_DIR = "" 'ダウンロード要素列挙 Const DL_PICTURE = 1 '画像 Const DL_SOUND = 2 'BGM Const DL_FRAME = 4 'フレーム内 Const DL_OBJECT = 8 'オブジェクト(FLASHなど) Const DL_CSS = 16 'スタイルシート 'エンコード用要素列挙 Const SAVE_ORIGINAL = 0 Const SAVE_UTF8 = 1 Const SAVE_EUC = 2 Const SAVE_Shift_JIS = 3 Const SAVE_JIS = 4 'サウンドファイル(保存終了時に演奏するWaveファイルを設定) Const SOUND_FILE = "C:\Windows\Media\Notify.wav" '■■ 事前準備 ■■ 'DL要素 Dim DL_FACTOR DL_FACTOR = DL_PICTURE OR DL_CSS OR DL_FRAME 'Default保存フォルダの確認・設定 Dim strPath If SAVE_DIR = "" Then strPath = PathScrapbook Else strPath = SAVE_DIR End If '■■ メインルーチン呼び出し ■■ Call Main() '■■ メインルーチン ■■ Private Sub Main() Dim objDoc, intDocID, objTabGrp, objTemp, dicID, intDocNumber, i, j Dim strURL, Return, objTab, arrData(), strTitle, WShell, objFol Dim objSelect, strSelect '■準備 Set objDoc = ActiveDocWin intDocNumber = 0 j = 0 '■フォルダ選択 'フォルダ選択ダイアログの表示 Set WShell = CreateObject("Shell.Application") '保存先フォルダの取得 //第2引数(ダイアログスタイル)は BIF_NEWDIALOGSTYLE OR BIF_USENEWUI Set objFol = WShell.BrowseForFolder(Handle,"フォルダ選択", 80, strPath) 'Cancelが押された場合 If objFol Is Nothing Then 'Scriptから抜ける Exit Sub Else strPath = objFol.Items().Item().Path End If '■現在表示しているドキュメントのIDを取得 intDocID = objDoc.ID '表示しているドキュメントが所属しているTabGroupオブジェクトを取得 Set objTabGrp = TabGroups.ActiveGroup '表示中のページが何番目かを取得するためのループ処理 For Each objTemp In objTabGrp 'すでに取得してあるIDと同じIDを見つけたらループを抜ける If objTemp.ID <> intDocID Then intDocNumber = intDocNumber + 1 Else Exit For End If Next '■新規タブグループ作成 Set objTab = TabGroups.NewGroup(TAB_NAME_FOR_SAVE) '■HTML生成用データ配列の初期化 ReDim arrPage(objTabGrp.Count - intDocNumber -1, 2) '■保存したいページのURLを取得して保存用タブグループで新規Documentを開く For i = intDocNumber To objTabGrp.Count - 1 'URL取得 strURL = objTabGrp.Item(i).URL '新規Document作成 NavigateNew strURL, , , , TAB_NAME_FOR_SAVE 'HTML生成用にURLとTitleを配列に入れる arrPage(j, 0) = j + 1 arrPage(j, 1) = objTabGrp.Item(i).Title '正規表現でURLから#は取っちゃう If InStr(strURL, "#") > 0 Then strURL = Mid(strURL, 1, InStr(strURL, "#") - 1) End If arrPage(j, 2) = strURL j = j + 1 Next '■選択文字列を取得 strSelect = CheckSelected(objDoc.ActiveFrameDocument) '■タイトル取得 strTitle = SetSelectedAsTitle(strSelect, GetCorrectFileName(arrPage(0, 1))) '■HTMLファイル作成 Call MakeHTML(arrPage, strTitle) '■保存ファイルPath取得 strPath = strPath & "\" & MakeDate(1) & strTitle '■保存 Do Until objTab.Item(0).ID = ActiveDocWin.ID objTab.Item(0).SetFocus Loop Return = objTab.SaveAllAsMHT(strPath , DL_FACTOR, SAVE_Shift_JIS) '■サウンドを鳴らす PlaySound SOUND_FILE '■保存用タブグループを閉じる objTab.Close End Sub '■■ サブルーチン ■■ '## Index用HTMLファイルを作成して ## Private Sub MakeHTML(arrData, strListTitle) Const TEMP_FOLDER = 2 Const ForReading = 1, ForAppending = 8 Const DQ = """" Dim objFSO, objText, strTempPath, strTempName, i 'Temporaryフォルダの取得 Set objFSO = CreateObject("Scripting.FileSystemObject") strTempPath = objFSO.GetSpecialFolder(TEMP_FOLDER) '一時ファイル名の生成 strTempName = Replace(objFSO.GetTempName, "tmp", "html") strTempName = strTempPath & "\" & strTempName 'ファイル作成 Set objText = objFSO.CreateTextFile(strTempName, True) 'HTMLを書き込む With objText .WriteLine "" .WriteLine "
" .WriteLine "" .WriteLine "" .WriteLine "" .WriteLine "