ばんのしゃーによかばんた さん 2005年 10月 01日 17時 03分 47秒

>ばんのしゃーによかばんた さん 2005年 03月 06日 15時 59分 55秒
>>門外漢 さん 2005年 02月 26日 21時 35分 52秒
>>工夫すればさらに信頼済みサイトゾーンも可能です。
>これは、どうも駄目みたいです。XP SP2
>>・イントラネットゾーン
>これは、可能ですね。

信頼済みサイト(中)から、「Webページ、完全」で保存しても、開くと
「インターネットゾーン」(高)になって、うまく表示されません。:-<
工夫が足りないのでしょうか?

サイトを「イントラネットゾーン」(中)に移すと、こちらはよいようです。

ところで、この「Webページ、完全」は、本体ファイルを操作すると、
.filesが勝手に消され、ごみ箱にもなく、復元も出来ず、悲惨なことに。
これは立派(?)なデータ破壊「障害」です。:-<

自動で複写/移動されるメリットとデータが消えてなくなるデメリットを
天秤に架けて、関係を切りました。
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
"NoFileFolderConnection"=dword:00000001

それから、「Webページ、完全」は「完全」に拘り過ぎてると思います。
「完全」に保存できないときは、全く保存しない。all or nothing.
だったら、「Webページ、出来る範囲で完全」とか、作ってほしい。:-p


まこ さん (null) 2005年 10月 01日 11時 19分 46秒
URL:null

おはようございます。
ちゃっぴさん。ありがとうございます。

いろりろサイトをさがして

Function IPCONFIG()

Dim strComputer, CRLF

strComputer = "."
CRLF = Chr(13) & Chr(10)
Set objWMIService = GetObject ("winmgmts:" & "!\\" & strComputer & "\root\cimv2")
Set colAdapters = objWMIService.ExecQuery ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled = True")


     TxtOut =""
     For Each objAdapter in colAdapters
    
     If Instr(objAdapter.Description,"-") > 10 then
          If Instr(objAdapter.Description,"-") > Instr(objAdapter.Description,"(") and Instr(objAdapter.Description,"(") >10 then
               NICInfo = left(objAdapter.Description , Instr(objAdapter.Description,"(")-1)
          else
               NICInfo = left(objAdapter.Description , Instr(objAdapter.Description,"-")-1)
          end if
     Elseif Instr(objAdapter.Description,"(") >10 then
          If Instr(objAdapter.Description,"(") > Instr(objAdapter.Description,"-") and Instr(objAdapter.Description,"-") >10 then
               NICInfo = left(objAdapter.Description , Instr(objAdapter.Description,"-")-1)
          else
               NICInfo = left(objAdapter.Description , Instr(objAdapter.Description,"(")-1)
          end if
     Else
          NICInfo = objAdapter.Description
     end if
    
     TxtOut = TxtOut & NICInfo & CRLF
    
     TxtOut = TxtOut & "MAC: " & objAdapter.MACAddress & CRLF
    
     TxtOut = TxtOut & "IP : " & objAdapter.IPAddress(i)
     if objAdapter.dhcpenabled then
          TxtOut = TxtOut & " (DHCP)"
     end if
     TxtOut = TxtOut & " / " & objAdapter.IPSubnet(i) & CRLF

     TxtOut = TxtOut & CRLF

     Next
    
     IPCONFIG = TxtOut

End Function

こんな感じで出来るようになりました

しかし、なぜか、メールを送信するときとしないときがあり不安定です。これは何が原因なのでしょう?
まったく同じソースなのにいじってないのに。送信しないときがあります。

で、メーラーで一度、通常通り送受信した後は、必ず
送信されます。なんなのでしょう?

AKA さん 2005年 10月 01日 05時 40分 27秒

DynamicWrapperをまた少しいじってみました。
構造体が「使える」とは言うものの、まだまだ「便利に使える」とは言えない状態です。

とりあえずDWord/Word/AString/WStringのPeek/Pokeを追加してみました。

そして、構造体のカプセル化(オブジェクト化)をスクリプトで行ってみました。新しいサンプルを見てください。
ただ、VBScript、JScript共にオブジェクト定義の仕方が一部わからなかったので、少しすっきりと書けなかった部分があります。(特にデストラクタがわからない・・・)

あと、DynamicWrapperが威力を発揮する、IEの表示ページ保存スクリプトを作ってみたので新たに同梱しました。

http://winscript.s41.xrea.com/wiki/index.php?plugin=attach&pcmd=open&file=DW95603.LZH&refer=%5B%5B%A5%A2%A5%C3%A5%D7%A5%ED%A1%BC%A5%C0%A1%BC%5D%5D

ちゃっぴ さん 2005年 09月 30日 22時 14分 40秒

To まこ さん (null) 2005年 09月 30日 17時 51分 23秒

Query(WQL)を変更して、対象のAdapterを特定すればいいです。

ScriptOmatic という便利なToolがありますので、
それで対象の Adapter を特定できる Property を探しましょう。

ちゃっぴ さん 2005年 09月 30日 22時 12分 15秒

To ばんのしゃーによかばんた さん 2005年 09月 27日 18時 37分 51秒

> 「プライバシー」タブと「詳細設定」タブが、まだ、よく分かりません。

「プライバシー」の内容は、この間のZonesの配下にあるGUIDのKeyです。
REZ_Binary なんで解説はご勘弁を・・・
# 調べる気おきませんので・・・昔はよくやったものですが・・・

ちなみにCookieの許可済みとかは、
[HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\P3P\History]
になります。構造はZoneMapと同じみたいですです。

「詳細設定」は正直厄介です。というのは、いろんなところに分かれていますので・・・

[HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
[HKCU\Software\Microsoft\Internet Explorer\Main]
[HKCU\Software\Microsoft\Internet Explorer\Main\FeatureControl]

設定変更して、Registry を Compare 掛けてみるのがいいでしょう。

> こういうカスタム設定が、保存復元されなくて困りません?

対応する Registry を Backup してますので
新たに環境作るときはたたくだけですみます。

というより、実はIEをそれほど使用していないってのが・・・あ、やめとこ

Nomu さん 2005年 09月 30日 21時 09分 58秒

> この方法をコマンドラインやVBSCriptで実現することはできないでしょうか?
> 以下のコードがそれにあたるかな、と試してみたのですが、異なるドメインの端末を指定することはできませんでした。

実現する方法はわかりません。m(_ _)m
ただ、実現しなければいけない必然性も文面からはよくわからない。。

それ以前の投稿では、WMIでは取得できているとのことですし、
MMCをスナップインとして保存しておけばRunするだけのような。。。

Scriptで暗黙的に(Silent)でも取れているし、
GUIでもいけるのだから、どちらかを選べばそれで終わりのような。。

私 要件勘違いしてますか?


まこ さん (null) 2005年 09月 30日 17時 51分 23秒
URL:null

すみません。問題が発生しました。
IPアドレス取得をメッセージボックスでない場合はどうすれば
いいのでしょう?下記のようにしたのですが、
ループの2回目がメールの本文に来てしまいます。
ちなみにBフレッツ、モデムPC直結なので
IPが二つあるのです。

dim ipadd
Set IPConfigSet = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each IPConfig In IPConfigSet

     If Not IsNull(IPConfig.IPAddress) Then
          ipadd = Join(IPConfig.IPAddress,",")
     End If

Next

必要なものはPPPadpterプロバイダの情報なんですけど。
どなたか、ご教授お願いいたします。

まこ さん (null) 2005年 09月 30日 16時 01分 15秒
URL:null

うにさん、管理人さん解決しました。

  mailto = "aaa@aaa.com"

上記を下記のように直したらうまくいきました。
よかったです。

  mailto = "<aaa@aaa.com>"

で、IP取得も組み入れ無事納得いく仕様になりました。
ほんとありがとうおございます。


ばんのしゃーによかばんた さん 2005年 09月 30日 15時 58分 05秒

>門外漢 さん 2005年 09月 29日 09時 28分 41秒
>一般には      ゾーン設定
>インターネットゾーン  高
>イントラネットゾーン  高(会社の場合は管理者の指示)
>信頼済みサイトゾーン  中( -中低にしない- )
>制限付きサイトゾーン  高
>にすべきという定石があります。

最低限、これをOSの標準設定にすべきですよね。
現状のOSの標準設定で被害を受けたユーザは、
メーカに損害賠償請求できるのではないでしょうか。

>信頼済みサイトゾーンはHTTPS(SSL)必須の設定をし、ゾーンは中。
>バンキングなどどうしてもという場合のみサイト登録します。
>次にイントラネットゾーンを第二信頼済みサイトゾーンとします。
>こちらはSSL不要とします。ゾーン設定は中。JavaScriptなしだと
>使えないようなサイトを登録する目的です。ActiveScriptを可能と
>してActiveX(Flash含む)を殺すオプションも考えるとなお良いでしょう。
>WindowsUpdate用のサイト登録は多少面倒ですが。;p

バンキングやWindowsUpdate用のサイトなどは、高では絶対に作れないもの
なのでしょうか。

今日のようにインターネットを物騒にしているのは、メーカばかりではなく、
ユーザにセキュリティレベルを下げるように強要するバンキングなどのサイトや
WindowsUpdate用のサイトなど、私だけは大丈夫と言っているサイト側にも
責任の一端があると思います。そこのところを自覚して、これからは、
スクリプトフリーのサイトを標榜したほうが企業価値が上がるのではないかな。


みみ さん 2005年 09月 30日 15時 09分 33秒

お返事ありがとうございます。

確かに教えていただいた方法で実現できました。
「別のコンピュータ」ダイアログで異なるドメインに属する端末を師弟すると
権限を要求されることなくイベントログの参照が可能になりました。
ありがとうございます。

この方法をコマンドラインやVBSCriptで実現することはできないでしょうか?
以下のコードがそれにあたるかな、と試してみたのですが、異なるドメインの端末を指定することはできませんでした。

mmc.exe X:\WINDOWS\system32\eventvwr.msc /computer=(ドメイン名)\(コンピュータ名称)

うに さん (null) 2005年 09月 30日 14時 28分 15秒
URL:null

>まこ さん (null) 2005年 09月 30日 09時 11分 36秒

横レス失礼します。
興味があったので、僕も試してみました。
BASP21というのをインストールするのですね。
インストールしてなかったらエラーがでました。
エラーがでないと言うことはインストール済みですよね。
さて、同じソースで試させてもらったのですが、あっさりメールは届きましたよ。

すでに検討済みな項目だったら申し訳ないのですが、
もしかしたらsvname(SMTPサーバー名)が間違ってませんか?
あとメルアドは同ドメインでしょうか?(fromの部分です)
以前はこのfromに適当なモノを書いてもほとんどのISPで送信できましたが、
今はほとんどのISPで異なるドメインで送信しようとするとBANされるようです。
しかも送信失敗のメールデーモンも帰ってこないようです。
(おかげで携帯メールをパソコンで送信できなくなった泣)
でも、自パソでメールサーバーをたてて(SMTP)サーバーをlocalhost指定すればその限りではありません。

以上を試してみてください。

Nomu さん 2005年 09月 30日 11時 42分 02秒

以前 Nomuさんという方に

>http://www.atmarkit.co.jp/fwin2k/operation/mmccons/mmccons_01.html
>で、イベントログを覗くアプリケーションをMicrosoft純正で作成し、
>それをRunするのがシンプルでよいかと思われます。

=========================================================
お呼びが掛かったNomuです
こちらの環境では他のマシンのイベントログを閲覧できるように
MMCが作成できました。(勿論、ドメインのセキュリティポリシー
などに阻まれるケースはあるかもしれませんね。)
権限の問題ではなくMMCの操作手順の問題だと仮定して、
こちらで他のマシンのイベントログを閲覧できるようにした
手順を書きます。

1)MMCを起動。
2)ファイルメニュー⇒スナップインの追加と削除
3)表示されるモーダルダイアログで追加ボタンをクリック
4)更に表示されるモーダルダイアログで、イベントビューアを選択
5)自分自身(localhost)か他のコンピュータかを聞いてくるので、
  他のコンピュータを選択。
6)更に表示されるモーダルダイアログで、他のコンピュータを指定

こんな感じです。


まこ さん (null) 2005年 09月 30日 09時 11分 36秒
URL:null

再度投稿
to 管理人むたぐちさんへ

おはようございます。
こんな感じなのですけど、メールがきません。
エラーメッセージは出ません。
何が悪いのでしょうか?

   Dim bobj, mailto, mailfrom, subj, body, files, msg
   Set bobj = CreateObject("BASP21")
   Const svname = "aaa.ne.jp"
   mailto = "aaa@aaa.com"
   mailfrom = "<aaa@aaa.com>"
   subj = "テスト"
   body = "仕事がんばれよ"
   msg = bobj.SendMail(svname,mailto,mailfrom, subj,body,files)
   SendMail = msg
   Set bobj = Nothing

みみ さん 2005年 09月 29日 21時 53分 10秒

以前 Nomuさんという方に

>セキュリティ権限周りの設定が必要かもしれませんし、
>OSが記述されていないので、使用可能かわかりませんが、
>MMCが使用可能な環境であれば(MMCの定義、使用方法は下記URLを参照)
>http://www.atmarkit.co.jp/fwin2k/operation/mmccons/mmccons_01.html
>で、イベントログを覗くアプリケーションをMicrosoft純正で作成し、
>それをRunするのがシンプルでよいかと思われます。

>他のマシンのログイベントをMMCで覗く処理は作成していませんが、
>他のマシンのサービスを覗く処理は作成したことがありますので、
>同じMMCの枠組みで可能ではないかと思われます。

と教えていただき、Scriptでリモートコンピュータのイベントログを取得する方法は確立したのですが、MMCで除くことができないんです。

ばんのしゃーによかばんた さん 2005年 09月 29日 17時 10分 34秒

私はWin32APIを使うときは、専らExcelVBA派なんですが、
もっと軽くて一般向けのVBAホストアプリはないものでしょうか。
Wordはもっと重いし、OutlookやVisioは、一般的でないし。
極論すれば、VBAをホストするだけのアプリでよいのだけれど。

昔、アプリ用スクリプトの覇権争いで、VBAを無償でライセンス提供して
普及しようとしてませんでしたっけ。
VBAをホストする軽くて格安のアプリがあればよいのに。

或いは、Officeにそういうツールがあってもいいですね。


ばんのしゃーによかばんた さん 2005年 09月 29日 17時 10分 13秒

>ばんのしゃーによかばんた さん 2005年 09月 27日 18時 36分 46秒
>>藤崎 さん 2005年 09月 24日 22時 39分 29秒
>IME2000でないので、外れかも知れませんが、
>IMEJPUEX.EXEでなく、IMJPDCT.EXEから辿ればよいのでは?

中を覗いたところ、

RunDLL32.EXE IMJPDCT.DLL,OpenDicTool

で、直接、開けるようです。

>しかし、タブストリップはスクリプト泣かせですよね。

なので、ちょっと験してみました。

>管理人むたぐち さん 2005年 09月 25日 00時 04分 26秒
>To: 藤崎 さん
>プロパティダイアログではCtrl+Homeをクリックすれば最初のタブが
>選択されます。
>その後カーソルキーの→を指定数だけ送ればいいのではないでしょうか。

これは、タブの名前のところにフォーカスがあるときだけ、
カーソルキーの左右やHome/End/Ctrl+PgUp/Ctrl+PgDnが利くみたいで、
フォーカスが他にあると駄目みたいです。

そして、タブの名前のところにフォーカスを当てるよい方法がないようです。
Tabキーでそのうちに当たりますが、当たったことが分からないので駄目です。
システムのプロパティはたまたま、開いたときにタブの名前のところに
フォーカスがあるのでうまく行くようです。

やっぱり、
>しかし、タブストリップはスクリプト泣かせですよね。

こういうのは、Win32APIを使えば、なんとかできるのでしょうか?


ばんのしゃーによかばんた さん 2005年 09月 29日 17時 09分 55秒

>みみ さん 2005年 07月 25日 19時 59分 11秒
>>ばんのしゃーによかばんたさんへ
>>※ところで、cdiffを作ろうとしている?
>cdiffというのが何かわかりませんが、二つのファイルを比較し、相違点を
>抽出するようなスクリプトを作ろうとしています。

業界用途と思いますが、この手の比較ツールの需要が恒常的に高いんです。
過去記事のWinDiffの話もZIP.VBSを上回る需要があったりして、ちょっと意外です。
なかなか、いいのがないようで、それだけ、みなさんお困りみたいです。
業界なんだから自分で作ればいいのに。:-p

ところで、最近、FC.EXEに/Nオプションなんてのがあるのに気付きました。遅い!
そこで、遅蒔きながら、これを使って、業界向けに比較ツールを作ってみました。

二つのファイルを比較し、変更箇所を枠で囲んで表示します。
と言っても、表示が目的でなく、このHTMLファイルをIEで印刷して、
ソースのグループレビューに使うのです。ほら業界向けでしょう?

FCdiff.VBS ファイル1 ファイル2
――――――――――――――――――――――――――――――――――――――
Option Explicit
Dim wShell
Dim fso
Dim ie
Dim FileName1
Dim FileName2
Dim FileName3
Dim FileName4
Dim StdOut

Set wShell=CreateObject("WScript.Shell")
Set fso=CreateObject("Scripting.FileSystemObject")
FileName1=WScript.Arguments.Item(0)
FileName2=WScript.Arguments.Item(1)
FileName3=fso.BuildPath(fso.GetSpecialFolder(2).Path,fso.GetTempName())
If UCase(fso.GetBaseName(WScript.FullName))="WSCRIPT" Then
 FileName4=fso.BuildPath(fso.GetSpecialFolder(2).Path,fso.GetBaseName(fso.GetTempName()) & ".HTM")
End If
wShell.Run "CMD.EXE /CFC.EXE /N """&FileName1&""" """&FileName2&""" >"""&FileName3&"""",0,True
If IsEmpty(FileName4) Then
 Set StdOut=WScript.StdOut
Else
 Set StdOut=fso.CreateTextFile(FileName4)
End If
Call diff(FileName3)
fso.DeleteFile FileName3

If Not IsEmpty(FileName4) Then
 StdOut.Close
 Set ie=CreateObject("InternetExplorer.Application")
 ie.Visible=True
 ie.Navigate FileName4
 Do While TypeName(ie)="IWebBrowser2"
  WScript.Sleep 1000
 Loop
 fso.DeleteFile FileName4
End If

WScript.Quit

Sub diff(FileName3)
Dim FileName
Dim FileName1
Dim FileName2
Dim File1
Dim File3
Dim Line1
Dim Line3
Dim Matches
Dim LineNum1:LineNum1=0
Dim LineNum2:LineNum2=0
Dim LineNum3
Dim LineNum1x
Dim LineNum2x
Dim Lines1:Lines1=Array()
Dim Lines2:Lines2=Array()
Dim k,m

Dim re1
Set re1=New RegExp
re1.Pattern="^ファイル (.*) と (.*) を比較しています$"
Rem        FileName1 FileName2

Dim re2
Set re2=New RegExp
re2.Pattern="^\x2a\x2a\x2a\x2a\x2a (.*)$"

Dim re3
Set re3=New RegExp
re3.Pattern="^([ 0-9][ 0-9][ 0-9][ 0-9][0-9]): (.*)$"

Set File3=fso.OpenTextFile(FileName3)

StdOut.WriteLine "<html><head>"
StdOut.WriteLine "<META http-equiv=Content-Type content=""text/html; charset=shift_jis"">"
StdOut.WriteLine "</head><body><table border>"

Line3=File3.ReadLine
Set Matches=re1.Execute(Line3)
FileName1=Matches.Item(0).SubMatches.Item(0)
FileName2=Matches.Item(0).SubMatches.Item(1)
'MsgBox FileName1
'MsgBox FileName2
StdOut.WriteLine "<tr bordercolor=black><td width=5%></td><td width=45%>"&FileName1&"</td><td width=5%></td><td width=45%>"&FileName2&"</td></tr>"

Set File1=fso.OpenTextFile(FileName1)

Do While Not File3.AtEndOfStream
 Line3=File3.ReadLine
 If re3.Test(Line3) Then
  Set Matches=re3.Execute(Line3)
  LineNum3=Matches.Item(0).SubMatches.Item(0)
  Line1=Matches.Item(0).SubMatches.Item(1)
  LineNum3=CLng(Trim(LineNum3))
  If FileName=FileName1 Then
   ReDim Preserve Lines1(UBound(Lines1)+1)
   Lines1(UBound(Lines1))=Line1
   If UBound(Lines1)=0 Then
'    MsgBox LineNum3
    LineNum1x=LineNum3
   End If
  ElseIf FileName=FileName2 Then
   ReDim Preserve Lines2(UBound(Lines2)+1)
   Lines2(UBound(Lines2))=Line1
   If UBound(Lines2)=0 Then
'    MsgBox LineNum3
    LineNum2x=LineNum3
   End If
  Else
   MsgBox Escape(FileName)
  End If
 ElseIf re2.Test(Line3) Then
  Set Matches=re2.Execute(Line3)
  FileName=Matches.Item(0).SubMatches.Item(0)
'  MsgBox FileName
 ElseIf Line3="*****" Then
  FileName=""
'  MsgBox Line3
  If LineNum1x Then
   If LineNum2x Then
    If Lines1(UBound(Lines1))=Lines2(UBound(Lines2)) Then
     ReDim Preserve Lines1(UBound(Lines1)-1)
     ReDim Preserve Lines2(UBound(Lines2)-1)
    End If
    If Lines1(0)=Lines2(0) Then
     For k=0 To UBound(Lines1)-1
      Lines1(k)=Lines1(k+1)
     Next
     For k=0 To UBound(Lines1)-1
      Lines1(k)=Lines1(k+1)
     Next
     ReDim Preserve Lines1(UBound(Lines1)-1)
     ReDim Preserve Lines2(UBound(Lines2)-1)
     LineNum1x=LineNum1x+1
     LineNum2x=LineNum2x+1
    End If
   End If
  End If
  If LineNum1x Then
   For k=LineNum1+1 To LineNum1x-1
    LineNum1=LineNum1+1
    LineNum2=LineNum2+1
    Line1=File1.ReadLine
    StdOut.WriteLine "<tr bordercolor=white><td>"&LineNum1&"</td><td>"&text2html(Line1)&"</td><td>"&LineNum2&"</td><td>"&text2html(Line1)&"</td></tr>"
   Next
  Else
   For k=LineNum1+1 To LineNum2x-1
    LineNum1=LineNum1+1
    LineNum2=LineNum2+1
    Line1=File1.ReadLine
    StdOut.WriteLine "<tr bordercolor=white><td>"&LineNum1&"</td><td>"&text2html(Line1)&"</td><td>"&LineNum2&"</td><td>"&text2html(Line1)&"</td></tr>"
   Next
  End If
  m=UBound(Lines1)
  If m<UBound(Lines2) Then m=UBound(Lines2)
  For k=0 To m
   If k<=UBound(Lines1) And k<=UBound(Lines2) Then
     LineNum1=LineNum1+1
     Line1=File1.ReadLine
     LineNum2=LineNum2+1
    StdOut.WriteLine "<tr bordercolor=black><td>"&LineNum1&"</td><td>"&text2html(Lines1(k))&"</td><td>"&LineNum2&"</td><td>"&text2html(Lines2(k))&"</td></tr>"
   ElseIf k<=UBound(Lines1) Then
     LineNum1=LineNum1+1
     Line1=File1.ReadLine
    StdOut.WriteLine "<tr bordercolor=black><td>"&LineNum1&"</td><td>"&text2html(Lines1(k))&"</td><td></td><td></td></tr>"
   Else
     LineNum2=LineNum2+1
    StdOut.WriteLine "<tr bordercolor=black><td></td><td></td><td>"&LineNum2&"</td><td>"&text2html(Lines2(k))&"</td></tr>"
   End If
  Next
  Lines1=Array()
  Lines2=Array()
  LineNum1x=0
  LineNum2x=0
 ElseIf Line3="" Then
 Else
  MsgBox "? " & Line3
 End If
Loop
Do While Not File1.AtEndOfStream
 LineNum1=LineNum1+1
 LineNum2=LineNum2+1
 Line1=File1.ReadLine
 StdOut.WriteLine "<tr bordercolor=white><td>"&LineNum1&"</td><td>"&text2html(Line1)&"</td><td>"&LineNum2&"</td><td>"&text2html(Line1)&"</td></tr>"
Loop

StdOut.WriteLine "</table></body></html>"
End Sub

Function text2html(Text)
Text=Replace(Text,"&","&amp;")
Text=Replace(Text,">","&gt;")
Text=Replace(Text,"<","&lt;")
Text=Replace(Text,"""","&quot;")
text2html=Text
End Function
――――――――――――――――――――――――――――――――――――――
本当は、変更箇所をまとめてブロックで囲みたいのですが、
やり方が分からないので、今は、変更箇所を一行ごとに囲んでいます。
ちょっと煩いですね。なにかよい方法があれば教えてください。


うに さん (null) 2005年 09月 29日 11時 15分 15秒
URL:null

Java実行環境

もしかしたらみなさん既知かもしれませんが、
wShell.Execを使ってJavaプログラムの標準出力を得ようとすると、
System32の方のjava.exeを使ってしまうようです。

Set objExec = objShell.Exec("Java -version")
等すると

Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.3', but '1.4' is required.
Error: could not find java.dll
Error: could not find Java 2 Runtime Environment.

な、エラーがでます。
回避策としてPATHをsystem32より前にJDKのPATHがくるようにするのですが、
この方法が使えないようです。
cscript.exe自体がsystem32にあるから、当たり前といえば当たり前ですが・・・。

"cmd /c java -version" とするか フルパスで指定することで実行はできます。

が・・・自分でJDKをインストールしていたり、多バージョンを使い分けたい人は
system32の中のjava.exeはトラブルメーカーなので消してしまっても良いような気がします。

誤りがあったらご指摘お願いします。

門外漢 さん 2005年 09月 29日 09時 28分 41秒


>ばんのしゃーによかばんた さん 2005年 09月 27日 18時 37分 30秒
>そういうときは、むたぐちさんのように、
>制限付きサイトゾーンを使えばよいのでは?
>|管理人むたぐち さん 2000年 04月 20日 22時 30分 24秒

>>管理人むたぐち さん
>>2000年 04月 20日 22時 30分 24秒
>>          スクリプト ActiveX
>>インターネットゾーン  ×     × 
>>制限付きサイトゾーン  ○     ×
>>信頼済みサイトゾーン  ○     ○

>>てな具合にしています。「制限付き」サイトゾーンを本来の用途とは別な使い方を
>>していますが(^^;

2005年現在のXPでは一般にはこの設定はお勧め出来ません。というのは設計上
もっとも外敵からの作為が行われやすい、OutlookExpressで受信したHTMLメール
が制限付きサイトゾーンで処理される為です。ここを甘くしてはいけません。
以上は一般論です。細かい注意をすれば大丈夫ですが、安全かつ簡単という
本来の意図を逸脱してしまいます。

一般には      ゾーン設定
インターネットゾーン  高
イントラネットゾーン  高(会社の場合は管理者の指示)
信頼済みサイトゾーン  中( -中低にしない- )
制限付きサイトゾーン  高
にすべきという定石があります。


なお、バリエーションとして以下のような工夫をする個人もいます。
会社では難しいことでしょう。

信頼済みサイトゾーンはHTTPS(SSL)必須の設定をし、ゾーンは中。
バンキングなどどうしてもという場合のみサイト登録します。
次にイントラネットゾーンを第二信頼済みサイトゾーンとします。
こちらはSSL不要とします。ゾーン設定は中。JavaScriptなしだと
使えないようなサイトを登録する目的です。ActiveScriptを可能と
してActiveX(Flash含む)を殺すオプションも考えるとなお良いでしょう。
インターネットゾーン、制限付きサイトゾーンの設定は高にします。
いくらか柔軟かつ信頼度の高い設定となります。
WindowsUpdate用のサイト登録は多少面倒ですが。;p
なおXP系では、第二信頼済みサイトゾーン用のイントラネットゾーン
の設定において以下の3種類は殺します。チェックをはずします。
「ほかのゾーンにないローカルのサイトをすべて含める」
「プロキシサーバーを使用しないサイトをすべて含める」
「すべてのネットワークパス(UNC)を含める」
なんでもかんでもイントラネット扱いにはしないという意志表示です。
(イントラ使っていてもサイト設定さえすれば
上記のチェックは不要なはずのですがねぇ)

※制限付きサイトゾーンで「高」にしておいてカスタムにし
ActiveScriptだけオンにしActiveXを切っておく人がいましたが
これは危険です。JavaScriptだけで(ActiveXなしで)キーボート
のタッチを監視する手法があるからです。そんなHTMLメールが
来たらとてもいやですよね;p
これ、既にMicrosoftには連絡済ですが「奥深くまで関連している
部分が大きいので」メジャーバージョンアップまで修正不可能
とのこと。パッチは出ません。さりとてIE7が出ても
IE6を使うユーザはまだまだいるわけで。IE6SP3が出て修正に
なればよいですね;d



みみ さん 2005年 09月 28日 19時 15分 31秒

お世話になります。

別のユーザとしてリモートコンピュータのイベントログを取得したいのですが、runasコマンドを使用せずに行いたいと考えています。

どなたか良い方法をご存知ないでしょうか・

まこ さん (null) 2005年 09月 28日 09時 48分 45秒
URL:null

おはようございます。
こんな感じなのですけど、メールがきません。
エラーメッセージは出ません。
何が悪いのでしょうか?

     Dim bobj, mailto, mailfrom, subj, body, files, msg
     Set bobj = CreateObject("BASP21")
     Const svname = "aaa.ne.jp"
     mailto = "aaa@aaa.com"
     mailfrom = "<aaa@aaa.com>"
     subj = "テスト"
     body = "仕事がんばれよ"
     msg = bobj.SendMail(svname,mailto,mailfrom, subj,body,files)
     SendMail = msg
     Set bobj = Nothing

マッドアングラー さん 2005年 09月 28日 09時 48分 41秒

リモートマシン上でDOSコマンド実施し、DOSコマンドの出力を
ローカルマシンで表示させたいと思っております。

下記のスクリプトはローカルマシン上でDOSコマンド実施+出力
なのですが、ローカルマシンから遠隔でDOSコマンド実行し、
DOSコマンドの出力をローカルマシンに出力することが
目標です。ご教授の程宜しくお願い致します。

Set wShell = CreateObject("WScript.Shell")
Set oExec = wShell.Exec("cmd.exe /c route print")
MsgBox oExec.StdOut.ReadAll()

↑これを以下のような方法でリモートからDOSコマンドを実施し、出力を
 ローカルマシンで表示できれば。。。。

Set Locator = CreateObject("WbemScripting.SWbemLocator")
Set Services = Locator.ConnectServer (Computer, NameSpace, User, Pass)
Set RemoteCom = Services.get("Win32_Process")

できればWin32_IP4RouteTableを使用しない(route printの出力通り)
方法を模索しております。


藤崎 さん 2005年 09月 27日 21時 32分 01秒

ばんのしゃーによかばんたさんへ

すみません、敬称が抜けてました、 失礼しました。


藤崎 さん 2005年 09月 27日 21時 28分 52秒

管理人むたぐちさん へ

遅くなりました、やはりWindows 2000でも指定できませんでした。
なんか簡単そうで難しいですね。(^^)

山田さんへ

拙い例でしたがそう言ってくださるとうれしいです。

ばんのしゃーによかばんたへ

IMJPDCT.EXEですか、自分でも直接的なものを探していましたが
見つけられずにいました。また出社時に確認してみます。

都合で暫くは投稿できません、
僅かな間でしたがすごく勉強になりました。
皆さんありがとうございました。

山田 さん 2005年 09月 27日 19時 28分 21秒

もしご存知なら。
ちょっとまだ調査しきれていないのですが。。。

2ヶ月前の月を取得したい場合、DateAddで、引数をマイナスにすれば
いいと思うのですが。
日付全体ではなく、月だけを取得する、出力されるフォーマットを整形するには、どうすればよいのでしょうか。

管理人むたぐち さん 2005年 09月 27日 19時 10分 49秒

To: まこ さん

> また、受信側は普通にインターネット、メールをしています。
> (プロバイダを使用して)
> それでもなおかつ、独自に受信側のマシンにPOP3サーバー
> を構築しないといけないのですか?

プロバイダのメールアカウントを用いるということであれば、
受信側にサーバーを立てる必要はないと思います。
# 最初のご質問ではそのあたりが曖昧でしたので…。

> 、それからBASP21はただ単にセットアップしただけでいいのですね?

はい。

> また、そのまま使えそうなソースはないでしょうか?

BASP21のサイトにあるサンプルでは駄目でしょうか。
http://www.hi-ho.ne.jp/babaq/basp21.html

山田 さん 2005年 09月 27日 18時 57分 57秒

藤崎さん、
サンプルありがとうございます。
参考にさせていただき、なんとかできそうな気がしてきました。
大変、参考になりました。
ありがとうございました。

まこ さん (null) 2005年 09月 27日 18時 44分 24秒
URL:null

管理人さんありがとうございます。

>BASP21のSendMailメソッドを使えばメールの送信は可能です。
>送信側にはIISなどサーバーは必要ありません。
>ですが、受信側にはPOP3サーバーが立ち上がっている必要が>あります。

つまり、送信側は何もサーバーなどは構築しなくていいということですよね。
また、受信側は普通にインターネット、メールをしています。
(プロバイダを使用して)
それでもなおかつ、独自に受信側のマシンにPOP3サーバー
を構築しないといけないのですか?
あ、それからBASP21はただ単にセットアップしただけでいいのですね?

また、そのまま使えそうなソースはないでしょうか?
62-03のたるさんのを参照してみたのですが、いまひとつわかりませんでした。

ばんのしゃーによかばんた さん 2005年 09月 27日 18時 37分 51秒

>ちゃっぴ さん 2005年 09月 23日 18時 11分 54秒
>>ばんのしゃーによかばんた さん 2005年 09月 19日 15時 29分 11秒
>>「インターネットのプロパティ」の「セキュリティ」の
>>「レベルのカストマイズ」の「セキュリティの設定」の一覧のところを
>>印刷やテキストファイルに取り出す方法はないものでしょうか。
>>レジストリを読んでいちいち変換するしかないものでしょうか。

「セキュリティの設定」の一覧は、

>HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\SO

で、大体対応が取れました。

「プライバシー」タブと「詳細設定」タブが、まだ、よく分かりません。

しかし、どうしてこういうUIにするんでしょうかね。
トラブル時に、他人と設定を比較しようとして、困るじゃないですか。
困ったときの奥の手、PrintScreenを使っても、1回で取り切れないし。
見た目ではなく、データとしてのWISIWIGをちゃんと実現してほしいもんです。

それと、セキュリティレベルを高にすると、正常に動かないサイトは、
アクセス条件を明示すべきだと思うのですが、全然そうなってないのは
どうしてなんでしょう。(MS関係だけかも知れませんが。)
セキュリティレベルを高にしているユーザは無視できるほどに
圧倒的少数派なのでしょうか。


ばんのしゃーによかばんた さん 2005年 09月 27日 18時 37分 30秒

>ちゃっぴ さん 2005年 09月 20日 23時 00分 18秒
>とりあえず、Webbrowser Control の許可が必要なようです。
>私は、Internet Zone では無効にしていますので・・

こういうカスタム設定が、保存復元されなくて困りません?
カスタム設定から、高中低に一時的に変えて、カスタム設定に戻すと
また設定し直しになるので、嫌になります。
カスタム設定に名前を付けて、高中低○□△から選べるようにしてほしいです。

もしそれが出来れば、OEMメーカやセキュリティソフト会社製の○○推奨
○○用カスタム設定が組み込まれて、一般ユーザがより安全になると思います。
あの設定を自分で適切に変更できる人がどれほどいるか疑問です。

># ほんとは、Active Script も無効にしたいんですが、
># そうなるともう一つぐらいZoneがないと・・・

そういうときは、むたぐちさんのように、
制限付きサイトゾーンを使えばよいのでは?

|管理人むたぐち さん 2000年 04月 20日 22時 30分 24秒


ばんのしゃーによかばんた さん 2005年 09月 27日 18時 37分 10秒

>ぷろぐぅ さん 2005年 08月 31日 18時 28分 37秒
>そこで質問なのですが、印刷ダイアログの制御(「ファイルへ出力」を利用したい)する場合簡単な記述方法はありますか?
>WordVBAであれば、PrintOutというものが存在し出力後のファイル名などまで指定する事ができるのですが…

この「ファイルへ出力」は、一般に何に使うんでしょう?
File:ポートや、Wordまでがサポートするほどの、
一般的によく使う用途があるのでしょうか?

思い浮かぶのは、
Generic/TextOnlyプリンタでテキストファイル化、
PostScriptプリンタでPSファイル化して、GSViewで表示するとか、
くらいで、それが一般的とも思えないし、
それ以外は、バイナリで使い道がなさそうに思うのですが。

バイナリのプリントファイルを印刷する方法が一般にあるのでしょうか?
APIを使えば出来そうですが、COPYとかでも出来るとか。


ばんのしゃーによかばんた さん 2005年 09月 27日 18時 36分 46秒

>藤崎 さん 2005年 09月 24日 22時 39分 29秒

IME2000でないので、外れかも知れませんが、
IMEJPUEX.EXEでなく、IMJPDCT.EXEから辿ればよいのでは?

しかし、タブストリップはスクリプト泣かせですよね。
昔は、タブストリップにもショートカットがあるのが普通だったような。
最近はないのが普通になったような気がします。
どうして不便にするんでしょう。

それと、この手の辞書ユーティリティには、普通、
コマンドラインオプションが有るはずだと思ったのですが、
発見できませんでした。どうもなさそうです。

なんとも不便なUIですね。


管理人むたぐち さん 2005年 09月 27日 17時 36分 03秒

To: まこ さん

BASP21のSendMailメソッドを使えばメールの送信は可能です。
送信側にはIISなどサーバーは必要ありません。
ですが、受信側にはPOP3サーバーが立ち上がっている必要があります。

まこ さん (null) 2005年 09月 27日 13時 48分 15秒
URL:null

はじめましていろいろ勉強させて頂きました。
ありがとうございます。
今回、パソコンの起動時にIPアドレスを取得し、
自動でメールを送信したいのですが。
環境はWindowsXPです。
iisありません。
で、アウトルック、同エクスプレスなどでなくてもいいです。
なんでも構いません。より簡単な方法がいいのです。
初心者なのでどうも出来ません。どなたかご教授お願いいたします。
BASP21を使えば簡単そうなのですが、
これはただ単にセットアップするだけでいいのでしょうか?
iisなどサーバはいらないのでしょうか?

現在の進行状況。

Set IPConfigSet = GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
("select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")
For Each IPConfig In IPConfigSet

     If Not IsNull(IPConfig.IPAddress) Then
          msgbox Join(IPConfig.IPAddress,",")
     End If

Next

これで一応IPは取得できました。

あとは、この値をメールで送りたいのです。
メッセージボックスなどいりません。
勝手に送信するだけでいいのです。

なお、リモートするために相手側はただパソコンの電源を
入れるだけにしたいのです。
Bフレッツでつながっています。
ルーターはなく、モデムと直結です。

以上、どうかよろしくお願いいたします。

藤崎 さん 2005年 09月 26日 20時 03分 20秒

管理人むたぐちさんへ

こちらから質問しておいて申し訳ありません。
今日は都合で会社に行けなかったので、明日試してみます。

山田 さんへ

ご希望の要件を満たしているかわかりませんが
識者登場までの場つなぎで一例を作ってみました。

一行ごとに名前(拡張子を除く)が書き込まれたテキスト
ファイルを読み込み、その名前のファイルを削除します。

この例では、削除されるファイル群(拡張子は.LOGで固定)と、
書き込み用のテキストファイル(仮称=Deletelist.txt)が
共にデスクトップ上に存在していることを前提にしています。


Set ObjShell = WScript.CreateObject("WScript.Shell")
StrPass = ObjShell.SpecialFolders("Desktop")

Set Fso = CreateObject("Scripting.FileSystemObject")
Set ObjFile = Fso.OpenTextFile(StrPass&"\Deletelist.txt")

Do Until ObjFile.AtEndOfLine
DeleteName = ObjFile.Readline
DeleteFileName = Fso.DeleteFile (StrPass&"\"&DeleteName&".log")
Loop

ObjFile.Close    

山田 さん 2005年 09月 26日 16時 09分 11秒

VBSで、ファイル(ログ)を定期的に削除するスクリプトを組んでいます。
ログの部分(変数部分)を、簡単に変更できるようにし、柔軟性のあるスクリプトを作りたいと考えています。
たとえば、ログを指定する部分をtxtに記入し、毎回その設定txtを読み込んでログを削除するなど。
いろいろ調べてみたのですが、VBSでは、このあたりのサンプルがみあたりませんでした。VBで開発しなくてはいけないのでしょうか。
ご教示よろしくお願いいたします。

藤崎 さん 2005年 09月 25日 07時 30分 51秒

管理人むたぐちさん、早速の返信ありがとうございます。

手元のWindows Xpでは、システムのプロパティでは仰ったCtrl+Homeで
うまくいきますが、IMEのプロパティでは指定できないようです。

会社の端末はWindows 2000なので出社したときに試してみます。

管理人むたぐち さん 2005年 09月 25日 00時 05分 09秒

>プロパティダイアログではCtrl+Homeをクリックすれば最初のタブが

クリックではなくキー押下ですね。失礼しました。

管理人むたぐち さん 2005年 09月 25日 00時 04分 26秒

To: 藤崎 さん

プロパティダイアログではCtrl+Homeをクリックすれば最初のタブが
選択されます。
その後カーソルキーの→を指定数だけ送ればいいのではないでしょうか。
IME 2000のダイアログでもできるかどうかわかりませんが
お試しください。

藤崎 さん 2005年 09月 24日 22時 39分 29秒

【内容】はじめまして、藤崎と申します。よろしければ教えてください。

会社の業務用単語を入れ替える必要があったため、辞書内の
単語登録の内容を変更するVBスクリプトを作成しています。
Microsoft IME2000 のプロパティウインドウの辞書/学習タブに
Sendkeysで各キーを送り、ファイルから単語登録をおこなうもので
ユーザごとに3.5FDよりVBスクリプトを実行しています。

ここで問題なのがユーザごとにMicrosoft IME2000 のプロパティウインドウ
のタブを手動で辞書/学習タブに切り替える必要があるということです。
ご覧のとおり6秒の間にこれを行うという、なんとも情けない状況です。
   
前置きが長くなりましたが次が質問したいことです。

Microsoft IME2000 のプロパティウインドウのタブ(ここでは辞書/学習タブ)
を指定して開くにはどうしたらよいのか?ということです。
たとえばコントロールパネルのシステムのプロパティの左から2番目のタブは
control.exe sysdm.cpl,,1で指定できることは当サイトで勉強して
知っているのですが、今回のような場合の指定の方法がわからないのです。

以下はVBスクリプトの内容です、よろしくお願いします。

Set ObjShell = WScript.CreateObject("WScript.Shell")
ObjShell.Run "C:\WINNT\IME\IMEJP\IMEJPUEX.EXE"        

         With WScript
.Sleep 6000 '→(*)ユーザごとにデフォルトのタブが違うためここで手動で指定。
Objshell.Sendkeys"t"
.Sleep 1000
Objshell.Sendkeys"%(t)"
.Sleep 1000
Objshell.Sendkeys"l"
.Sleep 1000
Objshell.Sendkeys"olddic.txt"
.Sleep 1000
Objshell.Sendkeys"~"
.Sleep 1000
Objshell.Sendkeys"o"
.Sleep 1000
Objshell.Sendkeys"~"
.Sleep 5000
'-----------------------------------------------------------------------------
Objshell.Sendkeys"%(t)"
.Sleep 1000
Objshell.Sendkeys"r"
.Sleep 1000
Objshell.Sendkeys"olddic.txt"
.Sleep 1000
Objshell.Sendkeys"~"
.Sleep 1000
Objshell.Sendkeys"o"
.Sleep 1000
Objshell.Sendkeys"~"      
'-----------------------------------------------------------------------------
.Sleep 3000
Objshell.Sendkeys"%(t)"
.Sleep 1000
Objshell.Sendkeys"t"
.Sleep 1000
Objshell.Sendkeys"{tab}"
.Sleep 1000
Objshell.Sendkeys"{tab}"
.Sleep 1000
Objshell.Sendkeys"i"
.Sleep 1000
Objshell.Sendkeys"{f4}"
.Sleep 1000
Objshell.Sendkeys"3"
.Sleep 1000
Objshell.Sendkeys"~"
.Sleep 1000
Objshell.Sendkeys"{tab}"
.Sleep 1000
Objshell.Sendkeys"{tab}"
.Sleep 1000
Objshell.Sendkeys"newdic.txt"
.Sleep 1000
Objshell.Sendkeys"~"
.Sleep 1000
Objshell.Sendkeys"o"
.Sleep 2000
Objshell.Sendkeys"~"
.Sleep 1000
Objshell.Sendkeys"~"
.Sleep 1000
Objshell.Sendkeys"%(f)"
.Sleep 1000
Objshell.Sendkeys"x"
.Sleep 1000
Objshell.Sendkeys"%({f4})"
Taisyo = Msgbox (" すべて終了しました。ログオフしますか?",4," 単語登録作業の結果")

IF Taisyo =6 Then
Set ObjShut = GetObject("Winmgmts:{ImpersonationLevel = Impersonate, (Shutdown)}")
Set ObjOS = ObjShut.InstancesOf("Win32_OperatingSystem")
For Each ObjSystem In objOS
   ObjSystem.Win32Shutdown 0
Next
Else .Quit
End IF
        End With

管理人むたぐち さん 2005年 09月 24日 21時 33分 05秒

アップローダーの問題に関して。

こちらでダウンロードしたファイルにも先頭にLFが挿入されて1バイト
大きくなっていることを確認しました。
http://pukiwiki.sourceforge.jp/index.php?PukiWiki%2Fxrea.com%E3%81%B8%E3%81%AE%E8%A8%AD%E7%BD%AE
を参考に、.htaccessにLayoutIgnoreURIを追加しているのですが
効果がないようです…orz
# RSS出力は問題ないのになぜ?

というわけで申し訳ありませんが、正常に解凍できない場合は
先頭1バイトを削るなどの対処をお願いいたします。

Kouichi さん 2005年 09月 24日 20時 11分 10秒

>AKAさん
vbNullStringの対応ありがとうございました!
すばらしいコンポーネントを提供してくださったことに心から感謝申し上げます。

>ファイルサイズ
ダウンローダーを使ってDLしましたら、47,518バイトになりました。

魔界の仮面弁士 さん 2005年 09月 24日 19時 19分 02秒

> もしかして、アップローダ側の問題でしょうか…?

Web上には、
  DW95AKA.LZH
  サイズ:47.5KB (47518 bytes)
と書かれていますが、ダウンロードしたファイルは 47,519 バイトでした。

# やっぱり1バイト多い……。(^^;

魔界の仮面弁士 さん 2005年 09月 24日 19時 16分 15秒

》つちや さん 2005年 09月 24日 09時 26分 34秒
> さっそくダウンロードしたDW95AKA.LZHですが、解凍しようとすると
> 「エンドマークが存在しません」というエラーがでましたので、
うちでは、「ファイルの先頭に余分なデータがあります。」と出ました。
もしかして、アップローダ側の問題でしょうか…? どのファイルを見ても、
先頭に0x0Aというバイナリが含まれているみたいなのですが。

# ちなみに先頭1バイトを削ったら、エラーが出なくなりました。(汗)

つちや さん 2005年 09月 24日 09時 26分 34秒

AKAさん、ごくろうさまです。
さっそくダウンロードしたDW95AKA.LZHですが、解凍しようとすると「エンドマークが存在しません」というエラーがでましたので、ご報告まで。
(解凍自体はできました)

AKA さん 2005年 09月 24日 07時 07分 42秒

DynamicWrapperですが、'i=w'型の所がまだ問題が残っていたので、仕様を変更して対応しました。(ドキュメントも間違えていたので訂正しました)
具体的には、元のコードでは、何かデータが返ってきてもそれをそのまま放置しますが、BSTRは文字数を再設定しないと、文字列結合などが正常にできなくなってしまいます。
この放置によって、文字変数を任意の構造体がわりに使うことが可能だったわけですが、Peek/Pokeがあるので、もはやそういうことをする必要は無い、と考え、文字数を再設定するようにしました。
これによって'w'はユニコード文字列専用のオプション、ということになり、構造体をやり取りする用途には使えなくなりました。

>>管理人さん

ローダーを使わせて頂きます。m(_ _)m

以下のアドレスです。
http://winscript.s41.xrea.com/wiki/index.php?plugin=attach&pcmd=open&file=DW95AKA.LZH&refer=%5B%5B%A5%A2%A5%C3%A5%D7%A5%ED%A1%BC%A5%C0%A1%BC%5D%5D

>>Kouichi さん

どうもすみません。

意図的に変えたつもりはないのですが、元のコードはかなり'当て込んだ'処理が多くエラーチェックが弱かったので、結構書き直しました。

それでOLE本来の仕様に合わせて、文字列値だけでなく変数や数値でも文字列に変換するようにしていたのですが、VT_BSTRによるVariantChangeType()がすんなり通ったということもあり、vbNullStringにきちんと注意を払っていませんでした。

今回、vbNullString対応コードを追加しましたので、お試し下さい。

指摘、大変有り難かったです。

ちゃっぴ さん 2005年 09月 23日 18時 11分 54秒

To ばんのしゃーによかばんた さん 2005年 09月 23日 17時 24分 15秒

>ばんのしゃーによかばんた さん 2005年 09月 19日 15時 29分 11秒
>「インターネットのプロパティ」の「セキュリティ」の
>「レベルのカストマイズ」の「セキュリティの設定」の一覧のところを
>印刷やテキストファイルに取り出す方法はないものでしょうか。
>レジストリを読んでいちいち変換するしかないものでしょうか。

あ、そちらの対応表が欲しかったのですか・・・
それでしたら、TweakOmatic に説明がありますね。

http://www.microsoft.com/japan/technet/scriptcenter/tools/twkmatic.mspx
# 英語です。
それから、下記 Registry Path を調べることによってもわかるでしょう。
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\SO
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\SOIEAK

それで、不明なところですけど、とりあえずわかっているものだけ・・・
2001 Authenticode で署名したコンポーネントを実行する(.Net)
2004 Authenticode で署名しないコンポーネントを実行する(.Net)
1809 ポップアップ マネージャの設定を適用する
2300 アクティブ コンテンツの、制限されたプロトコルでのコンピュータへのアクセスを許可する

あとは、こちらを参照してみてください。
URL Action Flags
http://msdn.microsoft.com/library/default.asp?url=/workshop/security/szone/reference/ifaces/iinternetsecuritymanager/getzonemappings.asp

ばんのしゃーによかばんた さん 2005年 09月 23日 17時 24分 15秒

>ばんのしゃーによかばんた さん 2005年 09月 19日 15時 29分 11秒
>「インターネットのプロパティ」の「セキュリティ」の
>「レベルのカストマイズ」の「セキュリティの設定」の一覧のところを
>印刷やテキストファイルに取り出す方法はないものでしょうか。
>レジストリを読んでいちいち変換するしかないものでしょうか。

分かる範囲で作ってみました。
レジストリとテキストの対応が分からないものがあります。ログオンより下。

セキュリティレベル.HTA
――――――――――――――――――――――――――――――――――――――
<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=shift_jis">
<script language=vbscript>
Option Explicit
Dim wShell
Set wShell=CreateObject("WScript.Shell")

Sub window_onload()
Dim j,k
For k=2 To 6
 oTable.rows(2).cells(k).innerText=GetLevel(oTable.rows(0).cells(k).innerText)
 For j=3 To oTable.rows.length-1
  oTable.rows(j).cells(k).innerText=GetValue(oTable.rows(0).cells(k).innerText,oTable.rows(j).cells(0).innerText)
 Next
Next
End Sub

Function GetLevel(zone)
Dim Value
Value=RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\"&zone&"\CurrentLevel")
Select Case Value
Case &H00000000 GetLevel="カスタム"
Case &H00012000 GetLevel="高"
Case &H00011000 GetLevel="中"
Case &H00010500 GetLevel="中低"
Case &H00010000 GetLevel="低"
Case Else    GetLevel=Value
End Select
End Function

Function GetValue(zone,name)
Dim Value
Dim k
Value=RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\"&zone&"\"&name)
Select Case TypeName(Value)
Case "Variant()"
 GetValue=0
 For k=UBound(Value) To 0 Step -1
  GetValue=GetValue*256+Value(k)
 Next
Case "Empty"
 GetValue=-1
Case Else
 GetValue=Value
End Select
Select Case name
Case "1A00"
 Select Case GetValue
 Case 0     GetValue="現在のユーザー名とパスワードで自動的にログオンする"
 Case 65536     GetValue="ユーザー名とパスワードを入力してログオンする"
 Case 131072     GetValue="イントラネット ゾーンのみで自動的にログオンする"
 Case 196608     GetValue="匿名でログオンする"
 Case Else
 End Select
Case "1C00","1E05"
 Select Case GetValue
 Case 0     GetValue="Java を無効にする"
 Case 65536     GetValue="安全性 - 高"
 Case 131072     GetValue="安全性 - 中"
 Case 196608     GetValue="安全性 - 低"
 Case 8388608     GetValue="カスタム"
 Case Else
 End Select
Case Else
 Select Case GetValue
 Case 0     GetValue="有効にする"
 Case 1     GetValue="ダイアログを表示する"
 Case 3     GetValue="無効にする"
 Case -1     GetValue="×"
 Case Else
 End Select
End Select
End Function

Function RegRead(key)
On Error Resume Next
RegRead=wShell.RegRead(key)
End Function
</script>
</head>
<body>
<table id=oTable BORDER=1>
<tr><td></td><td>ゾーンID</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td></tr>
<tr><td></td><td>セキュリティゾーン</td><td>マイ コンピュータ</td><td>イントラネット</td>
<td>信頼済みサイト</td><td>インターネット</td><td>制限付きサイト</td></tr>
<tr><td></td><td>セキュリティレベル</td><td></td><td></td><td></td><td></td><td></td>
<td>高</td><td>中</td><td>中低</td><td>低</td></tr>
<tr><td>1200</td><td>ActiveX コントロールとプラグインの実行
</td><td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>2201</td><td>ActiveX コントロールに対して自動的にダイアログを表示</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>無効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1201</td><td>スクリプトを実行しても安全だとマークされていない ActiveX コントロールの初期化とスクリプトの実行</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>無効にする</td><td>無効にする</td><td>ダイアログを表示する</td></tr>
<tr><td>1405</td><td>スクリプトを実行しても安全だとマークされている ActiveX コントロールのスクリプト実行</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>2000</td><td>バイナリ ビヘイビアとスクリプト ビヘイビア</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1001</td><td>署名済み ActiveX コントロールのダウンロード</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>ダイアログを表示する</td><td>ダイアログを表示する</td><td>有効にする</td></tr>
<tr><td>1004</td><td>未署名の ActiveX コントロールのダウンロード</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>無効にする</td><td>無効にする</td><td>ダイアログを表示する</td></tr>
<tr><td>1C00</td><td>Java の許可</td>
<td></td><td></td><td></td><td></td><td></td>
<td>Java を無効にする</td><td>安全性 - 高</td><td>安全性 - 中</td><td>安全性 - 低</td></tr>
<tr><td>1402</td><td>Java アプレットのスクリプト</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1400</td><td>アクティブ スクリプト</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1407</td><td>スクリプトによる貼り付け処理の許可</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1804</td><td>IFRAME のプログラムとファイルの起動</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>ダイアログを表示する</td><td>ダイアログを表示する</td><td>有効にする</td></tr>
<tr><td>1606</td><td>User Data の常設</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>2102</td><td>サイズや位置の制限なしにスクリプトでウィンドウを開くことを許可する</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>無効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1E05</td><td>ソフトウェア チャンネルのアクセス許可</td>
<td></td><td></td><td></td><td></td><td></td>
<td>安全性 - 高</td><td>安全性 - 中</td><td>>安全性 - 中</td><td>安全性 - 低</td></tr>
<tr><td>1800</td><td>デスクトップ項目のインストール</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>ダイアログを表示する</td><td>ダイアログを表示する</td><td>有効にする</td></tr>
<tr><td>1406</td><td>ドメイン間のデータ ソースのアクセス</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>無効にする</td><td>ダイアログを表示する</td><td>有効にする</td></tr>
<tr><td>1802</td><td>ファイルのドラッグ / ドロップ、またはコピー / 貼り付け</td>
<td></td><td></td><td></td><td></td><td></td>
<td>ダイアログを表示する</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1608</td><td>ページの自動読み込み</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1809</td><td>ポップアップ ブロックの使用</td>
<td></td><td></td><td></td><td></td><td></td>
<td>有効にする</td><td>有効にする</td><td>無効にする</td><td>無効にする</td></tr>
<tr><td>2101</td><td>より権限の少ない Web コンテンツ ゾーンの Web サイトがこのゾーンに移動できる</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>ダイアログを表示する</td></tr>
<tr><td>1601</td><td>暗号化されていないフォーム データの送信</td>
<td></td><td></td><td></td><td></td><td></td>
<td>ダイアログを表示する</td><td>ダイアログを表示する</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1607</td><td>異なるドメイン間のサブフレームの移動</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>2100</td><td>拡張子ではなく、内容によってファイルを開くこと</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1A04</td><td>既存のクライアント証明書が1つ、または存在しない場合の証明書の選択</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>無効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1609</td><td>混在したコンテンツを表示する</td>
<td></td><td></td><td></td><td></td><td></td>
<td>ダイアログを表示する</td><td>ダイアログを表示する</td><td>ダイアログを表示する</td><td>ダイアログを表示する</td></tr>
<tr><td>1803</td><td>ファイルのダウンロード</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>2200</td><td>ファイルのダウンロードに自動的にダイアログを表示</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>無効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1604</td><td>フォントのダウンロード</td>
<td></td><td></td><td></td><td></td><td></td>
<td>ダイアログを表示する</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1A00</td><td>ログオン</td>
<td></td><td></td><td></td><td></td><td></td>
<td>ユーザー名とパスワードを入力してログオンする</td><td>イントラネット ゾーンのみで自動的にログオンする</td><td>イントラネット ゾーンのみで自動的にログオンする</td><td>現在のユーザー名とパスワードで自動的にログオンする</td></tr>

<tr><td>1605</td><td>不明</td>
<td></td><td></td><td></td><td></td><td></td>
<td>有効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1805</td><td>不明</td>
<td></td><td></td><td></td><td></td><td></td>
<td>有効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1A02</td><td>コンピュータに保存されている永続的な Cookie の使用許可不明</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1A03</td><td>セッションごとの Cookie の使用許可 (保存なし)</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1A05</td><td>サード パーティの永続的 Cookie の使用許可</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>ダイアログを表示する</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1A06</td><td>サード パーティのセッション Cookie の使用許可</td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1A10</td><td>プライバシーの設定</td>
<td></td><td></td><td></td><td></td><td></td>
<td>有効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>2001</td><td></td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>2004</td><td></td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1206</td><td>WebOC のスクリプト</td>
<td></td><td></td><td></td><td></td><td></td>
<td>有効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1806</td><td>アプリケーションと安全でないファイルの起動</td>
<td></td><td></td><td></td><td></td><td></td>
<td>有効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1807</td><td></td>
<td></td><td></td><td></td><td></td><td></td>
<td>有効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>1808</td><td></td>
<td></td><td></td><td></td><td></td><td></td>
<td>有効にする</td><td>有効にする</td><td>有効にする</td><td>有効にする</td></tr>
<tr><td>2300</td><td></td>
<td></td><td></td><td></td><td></td><td></td>
<td>無効にする</td><td>ダイアログを表示する</td><td>ダイアログを表示する</td><td>ダイアログを表示する</td></tr>
</table>
</body>
</html>


うに さん (null) 2005年 09月 21日 09時 56分 11秒
URL:null

>管理人むたぐち さん 2005年 09月 20日 18時 57分 52秒


>     JavaのIndexOfに相当する関数はVBSではInStr関数です。
>     次のようにすると「映画」を取り出せます。
>
>     strSource = "私は昨日映画を見ました。"
>     str1 = "昨日"
>     str2 = "を"
>     Msgbox Mid(strSource,InStr(strSource,str1) + Len(str1), _
>     InStr(strSource,str2) - InStr(strSource,str1) - Len(str1))


御丁寧にありがとうございます。
早速やってみたところうまく取り出せました!
基本中の基本なのでしょうか・・・
頭の中に”indexof”しか浮かばず、ヘルプで検索したら
VBSにはFirstindexofしかないらしく、使い方もよくわからず混乱してしまいました。


>     また、こんなことをする必要はないですが、RegExpのFirstIndexを
>     InStrの代わりに使うにはこのようにします。

>     strSource = "私は昨日映画を見ました。"
>     Set RegEx = New RegExp
>     RegEx.Global = False
>     RegEx.Pattern = "昨日"
>     If RegEx.Test(strSource) Then
>        Set Matches = RegEx.Execute(strSource)
>        MsgBox Matches(0).FirstIndex
>     End If

>     コード中、RegEx.Global = Falseとある行がポイントで、これを記述しておくと
>     最初の1回しか正規表現の判定をしません。よって、Matchesオブジェクトの
>     中身は1つのMatchオブジェクトだけとなり、Matches(0)でその中身が取り出せます。


よくわかりました!
サンプルはTrueばかりでした。False指定することによって文字通り”はじめ”だけを取り出せるのですね。
MatchesはFor文でMatches(0)、Matches(1)、Matches(2)、、、
というようにインデントしていくのですね。
Matchグループの要素Matches(0)、Matches(1)、Matches(2)、、、
ということでよろしいでしょうか。
ヘルプを見てもいまいちわかりにくかったのですが、これでよくわかりました。
ありがとうございました。



>     さて、どうせ正規表現を使うのならもっと正規表現らしく
>     使ったほうが良いでしょう。

>     strSource = "私は昨日映画を見ました。"
>     Set RegEx = New RegExp
>     RegEx.Global = False
>     RegEx.Pattern = "昨日(.+)を"
>     If RegEx.Test(strSource) Then
>        Set Matches = RegEx.Execute(strSource)
>        MsgBox Matches(0).SubMatches(0)
>     End If

>     これはPattern文字列に「『昨日』と『映画』の間に任意の文字列が
>     挟まった文字列」を指定し、挟まった文字列をSubmatch文字列として
>     指定したものです。
>     最初のMatchの最初のSubMatch、つまりをMatches(0).SubMatches(0)を
>     取り出すと、目的の文字列になります。

正規表現を使った方がスマートですね。
僕には未だ少し難しいですが、勉強してみたいと思います。
SubMatchコレクションですね。
ヘルプで見てみたのですが、難しいですね・・・
サブマッチ文字列、というのですね。


御丁寧にありがとうございます。
おかげさまで作業を進めることができます。

Kouichi さん 2005年 09月 21日 06時 48分 03秒

>AKAさん

改良型DynamicWrapperありがとうございました。
構造体が簡単に扱えるようになり、可能性が広がりました。

そして、早速の質問で申し訳ありません(__;)
vbNullStringの扱いなのですが、オリジナルのDynamicWrapperとは扱い方が変わったのでしょうか?

具体的には、FindWindowExAで使おうとしたときなのですが、

Call DW.Register ( "USER32.DLL", "FindWindowExA", "i=hhss", "r=h" )
(中略)
hTemp = DW.FindWindowExA(hTemp, 0, "TrayClockWClass", vbNullstring)

クラス名「TrayClockWClass」を持つウィンドウには、テキストがあります。
以前のDynamicWrapperでは、これで取得できたのですが、改良型のほうではTemp=0が返ってしまいます。

なお、vbNullString ではなく、テキストを指定すれば、正常にウィンドウハンドルを返してきます。

Return