tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトル.netでbatch
記事No4374
投稿日: 2006/10/04(Wed) 17:01
投稿者へたれ
すいません。初めて投稿します。

.netでbatchを作成しているのですがうまくいきません。

pathの中にあるhtmlファイルとサブフォルダを検索し、

htmlファイルの場合は<body>タグに

ロジックを追加して、上書き保存。その際に拡張子をbkにしてバックアップも作成する。

んで最後に処理件数を表示するのですが、

htmlにロジックを追加するところでうまく追加が出来ずに困っています。

Dim intStart As Long
Dim intEnd As Long
Dim strRes As String
Dim AfterHTML As String
Dim StrChWord1 As String = "oncontextmenu='alert('右クリックは禁止です');return false' onCopy='alert(' コピーはできません');return false'"
Dim StrChWord2 As String = "<style type='text/css'>@media print  { body { display:   none; }}</style>"

intStart = InStr(strHTML, "<body")
intEnd = intStart + (InStr(strHTML, ">"))
strRes = strHTML.Substring(intStart, intEnd - intStart + intMid)
AfterHTML = strHTML.Replace(strRes, strRes & StrChWord1 & StrChWord2)

ちなみにhtmlの中身は
<html>
<head>
</head>
<body link=blue vlink=purple class=xl61>
    <table width=500>
        <tr>
            <td>xxx</td>
        </tr>
    </table>
</body>
</html>

説明下手で分かり辛いかもしれませんが…
分かる方がいらっしゃったらご指導願います。

[ツリー表示へ]
タイトルRe: .netでbatch
記事No4376
投稿日: 2006/10/04(Wed) 18:33
投稿者魔界の仮面弁士
> .netでbatchを作成しているのですがうまくいきません。
バッチファイル(*.bat)のことかと思いました…。

複数の html ファイルに、「右クリック禁止」のコードを埋め込みたいという事ですね。


> intStart = InStr(strHTML, "<body")
あまり深いことを考えないのであれば、
  Dim StrChWord1 As String _
    = "<body oncontextmenu=""alert('右クリックは禁止です');return false""" _
    & " onCopy=""alert(' コピーはできません');return false"""
  Dim AfterHTML As String = Replace(strHTML, "<body", StrChWord1, Compare:=CompareMethod.Text)
といった程度でも良さそうです。

ですが実際には、<!--<body>--> などを無視しなければいけなかったり、
すでに oncontextmenu が使用済みだった場合の対策が必要になるのでしょうけれども。


それ以外の方法としては、

案1) MSHTML の DOM を使って編集し、それを保存する。

案2) "Microsoft DHTMLEdit コントロール"を使う。(ActiveX コントロール)
 ただし、VB.NETから使えるかどうかは未検証…。

案3) oncontextmenu を処理するビヘイビア(*.htcファイル)を作り、それをStyleタグに
 "<style> body {behavior:url(hoge.htc)}</style>" などとして指定する。

案4) 案3 のビヘイビアを、style タグではなく、外部の css ファイルにて指定する。

などといった手もあるかな。

[ツリー表示へ]
タイトルRe: .netでbatch
記事No4377
投稿日: 2006/10/04(Wed) 19:20
投稿者大吉末吉
へたれ さん こんにちは。

とりあえず、提示されたコードで変なところ。

> intStart = InStr(strHTML, "<body")
これは、「文字列strHTMLの『先頭』から、文字列"<body"を探す」なので良いのです
が、

> intEnd = intStart + (InStr(strHTML, ">"))
こちらは、探した「"<body"の位置」に、「文字列strHTMLの『先頭』から、文字列&q
uot;>"を探し」た結果を足す。
となってしまいますよ。
つまり、最初の">"である、

> <html>
の">"がHITします。

こういう、「途中から探す」場合は、引数が1つ多い「InStr関数」を使ってください。

「Strings.InStr メソッド」
http://msdn2.microsoft.com/ja-jp/library/microsoft.visualbasic.strings.instr.aspx
の下側。

[ツリー表示へ]