- 締切済み
vbscript内にvbscriptを記述
option explicit on error resume next dim objie, objwshell set objwshell = createobject("wscript.shell") objwshell.appactivate "microsoft internet explorer" set objie = createobject("internetexplorer.application") objie.width = 380 objie.height = 100 objie.navigate "about:blank" objie.document.write "<html><head><title>終了処理</title><script language='vbscript'>" & vbcrlf objie.document.write "option explicit" & vbcrlf objie.document.write "function osu()" & vbcrlf objie.document.write " dim aaa" & vbcrlf objie.document.write " Set aaa = CreateObject('Wscript.Shell')" & vbcrlf objie.document.write " aaa.run 'wscript ログオフ.vbs', 1, true" & vbcrlf objie.document.write " set aaa = nothing" & vbcrlf objie.document.write "end function" & vbcrlf objie.document.write "</script></head>" & vbcrlf objie.document.write "<body bgcolor='#CCCCCC' style='overflow:hidden'><form name='form1'>" & vbcrlf objie.document.write "<input type='button' name='button1' value='ログオフ' onClick='osu()'>" & vbcrlf objie.document.write "</form></body></html>" & vbcrlf objie.visible = true objie.toolbar = false objie.statusbar = false objie.resizable = false set objwshell = nothing set objie = nothing 上記のプログラムを[.vbs]という拡張子で保存。 これは、vbsファイルをクリックするとIEの画面が出て、ログオフのボタンをクリックするとログオフするというものなのですが、うまくいきません。 vbsの中にまたvbsを記述しているからでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- temtecomai2
- ベストアンサー率61% (656/1071)
まず念のため、今回 aonagi さんがセキュリティ設定を変更した IE はセキュリティ的に見て危険な状態になっているってことだけは認識しておいてくださいね。 インターネットのどこかのページに記述されている VBScript を実行してしまう可能性があります。 そのスクリプトにはレジストリを操作するコードが書かれている可能性もあります。 > ところで、どうやったらパソコンに詳しくなれますか? これは新たに質問したほうがいいと思います。 コンピューター [技術者向け] > プログラミング > その他(プログラミング) あたりがいいんじゃないでしょうかね。 http://oshiete1.goo.ne.jp/c260.html
- temtecomai2
- ベストアンサー率61% (656/1071)
> しかし、ボタンをクリックしたら「エラー:ActiveXコンポーネントはオブジェクトを生成できません:wscript.shell」というのがでてきました。 > これはどんなエラーなのでしょうか? だから言ったじゃないですか。 > コードの不具合は以上ですが、インターネット オプションでのセキュリティの問題が出そうですね。 > A) 上記書き込み元 VBScript によって生成されたページ > B) A のソースを HDD に HTML として保存して開きなおしたページ > A= インターネットゾーン > B= マイ コンピュータ VBScript の下記行をコメントアウトしてもう一度実行してみてください。 objie.statusbar = false 生成された IE ウィンドウのステータスバーに「インターネットゾーン」って表示されてますよね? つまりセキュリティが一番堅い状態で実行されているのです。 普通にどこかのページを見ててページに表示されているボタンを押すとローカルにある VBScript ファイルを実行されちゃうのって問題ですよね? それと同じ状態だ、と IE が判断してるのです。 当方 IE 7 ですが、インターネット オプションで [セキュリティ] タブで「インターネット」を選択して [レベルのカスタマイズ] をクリック。 「スクリプトを実行しても安全だとマークされていない ActiveX コントロールの初期化とスクリプトの実行(セキュリティで保護されていない)」を「有効にする(セキュリティで保護されていない)」にしてから実行してみてください。 実行すると IE のウィンドウ上部に「現在のセキュリティ設定では、お使いのコンピュータが危険にさらされています。セキュリティの設定を変更するには、ここをクリックしてください...」という説明が出ます。 この警告の×を押してもいいですが、かろうじてウィンドウに表示されている [ログオフ] ボタンをクリックすると "ログオフ.vbs" を実行しようとします。 (ログオフ.vbs の中身による実行結果は存じません・・・)
- temtecomai2
- ベストアンサー率61% (656/1071)
こういう場合はまず、うまく行った場合をイメージし、実際に生成される(事を期待する)HTML を書いてみましょう。 すると VBScript がおかしい旨のエラーが出るはずです。 んでよーく見てみると、HTML に書かれているスクリプトがおかしいことに気づきます。 HTML のルールでは ' は " の代わりに使用できますが、 VBScript のルールでは ' はコメントであり、' よりも後ろがコメントアウトされてしまいます。 すると以下のようなスクリプトが書いてあることになってしまいます。 Set aaa = CreateObject( aaa.run (コメントと見なされる部分は書いてません) したがって、ブラウザでホストされる VBScript 内で使っている ' を " に変える必要があるため、書き込み元の VBScript では下記のようにします。 objIE.Document.Write "Set aaa = CreateObject(""Wscript.Shell"")" & vbCrLf objIE.Document.Write "aaa.run ""WScript ログオフ.vbs"", 1, true" & vbCrLf コードの不具合は以上ですが、インターネット オプションでのセキュリティの問題が出そうですね。 A) 上記書き込み元 VBScript によって生成されたページ B) A のソースを HDD に HTML として保存して開きなおしたページ A= インターネットゾーン B= マイ コンピュータ がんばってください。
補足
適確な指示ありがとうございます。 今まではファイルをダブルクリックした時点でエラーが出ていましたが、今回からは出なくなりました。 しかし、ボタンをクリックしたら「エラー:ActiveXコンポーネントはオブジェクトを生成できません:wscript.shell」というのがでてきました。 これはどんなエラーなのでしょうか?
補足
見事に実行してくれました。 全てあなたのおかげです。本当にありがとうございました。 ところで、どうやったらパソコンに詳しくなれますか?