• 締切済み

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を記述しているからでしょうか?

noname#53923
noname#53923

みんなの回答

回答No.3

まず念のため、今回 aonagi さんがセキュリティ設定を変更した IE はセキュリティ的に見て危険な状態になっているってことだけは認識しておいてくださいね。 インターネットのどこかのページに記述されている VBScript を実行してしまう可能性があります。 そのスクリプトにはレジストリを操作するコードが書かれている可能性もあります。 > ところで、どうやったらパソコンに詳しくなれますか? これは新たに質問したほうがいいと思います。 コンピューター [技術者向け] > プログラミング > その他(プログラミング) あたりがいいんじゃないでしょうかね。 http://oshiete1.goo.ne.jp/c260.html

回答No.2

> しかし、ボタンをクリックしたら「エラー:ActiveXコンポーネントはオブジェクトを生成できません:wscript.shell」というのがでてきました。 > これはどんなエラーなのでしょうか? だから言ったじゃないですか。 > コードの不具合は以上ですが、インターネット オプションでのセキュリティの問題が出そうですね。 > A) 上記書き込み元 VBScript によって生成されたページ > B) A のソースを HDD に HTML として保存して開きなおしたページ > A= インターネットゾーン > B= マイ コンピュータ VBScript の下記行をコメントアウトしてもう一度実行してみてください。 objie.statusbar = false 生成された IE ウィンドウのステータスバーに「インターネットゾーン」って表示されてますよね? つまりセキュリティが一番堅い状態で実行されているのです。 普通にどこかのページを見ててページに表示されているボタンを押すとローカルにある VBScript ファイルを実行されちゃうのって問題ですよね? それと同じ状態だ、と IE が判断してるのです。 当方 IE 7 ですが、インターネット オプションで [セキュリティ] タブで「インターネット」を選択して [レベルのカスタマイズ] をクリック。 「スクリプトを実行しても安全だとマークされていない ActiveX コントロールの初期化とスクリプトの実行(セキュリティで保護されていない)」を「有効にする(セキュリティで保護されていない)」にしてから実行してみてください。 実行すると IE のウィンドウ上部に「現在のセキュリティ設定では、お使いのコンピュータが危険にさらされています。セキュリティの設定を変更するには、ここをクリックしてください...」という説明が出ます。 この警告の×を押してもいいですが、かろうじてウィンドウに表示されている [ログオフ] ボタンをクリックすると "ログオフ.vbs" を実行しようとします。 (ログオフ.vbs の中身による実行結果は存じません・・・)

noname#53923
質問者

補足

見事に実行してくれました。 全てあなたのおかげです。本当にありがとうございました。 ところで、どうやったらパソコンに詳しくなれますか?

回答No.1

こういう場合はまず、うまく行った場合をイメージし、実際に生成される(事を期待する)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= マイ コンピュータ がんばってください。

noname#53923
質問者

補足

適確な指示ありがとうございます。 今まではファイルをダブルクリックした時点でエラーが出ていましたが、今回からは出なくなりました。 しかし、ボタンをクリックしたら「エラー:ActiveXコンポーネントはオブジェクトを生成できません:wscript.shell」というのがでてきました。 これはどんなエラーなのでしょうか?

関連するQ&A

  • VBScriptでHTMLを生成しJPG画像を表示させるには?

    いつもありがとうございます。 早速質問ですが,職場での周知用に,vbsでHTMLを生成し, ファイルサーバにある画像(JPG)を取得して,HTMLに埋め込もうとしています。 具体的には以下のとおり表示させようとしていて,XP+IE6だとうまくいくのですが,Vista+IE7だと画像が表示されません。 (生成されたHTMLファイル自体は,画像が表示されます。  VBSで一連の流れにした場合のみ表示できないようです。) つたない文章で申し訳ございませんが,Vista+IE7で表示させるため,お知恵をいただけませんでしょうか。 画像を他部署で作成し,頻繁に更新するため,VBS自体はクライアントに置きっぱなしで,ファイルサーバの画像ファイルを差替えして運用したいと思っています。 --- sub Open_HTML(strImageFile) Dim objIE Dim objShell '初期設定(ウィンドウサイズ、表示位置に使用) WScript.Echo "html作成" & strImageFile 'IEオブジェクトを作成 Set objIE = CreateObject("InternetExplorer.Application") 'IEの画面を表示 objIE.Visible = True 'カラのページを表示 '(これを行わないと以降のdocument.writeなどがエラーになるため) objIE.Navigate "about:blank" 'HTMLを出力します objIE.Document.Write "<html>" & vbcrlf objIE.Document.Write "<head>" & vbcrlf objIE.Document.Write "<title>HTML画像挿入テスト</title>" & vbcrlf objIE.Document.Write "</head>" & vbcrlf objIE.Document.Write "<body>" & vbcrlf objIE.Document.Write "<table border=4 width=""100%"" height=""100%"">" & vbcrlf objIE.Document.Write "<tr>" & vbcrlf objIE.Document.Write "<td align=""center"" valign=""middle"">" & vbcrlf objIE.Document.Write "<IMG SRC=" & strImageFile & "> " & vbcrlf objIE.Document.Write "</td>" & vbcrlf objIE.Document.Write "</tr>" & vbcrlf objIE.Document.Write "</table>" & vbcrlf objIE.Document.Write "</body>" & vbcrlf objIE.Document.Write "</html>" & vbcrlf 'IEをアクティブに Set objShell = WScript.CreateObject("WScript.Shell") objShell.AppActivate("HTML画像挿入テスト - Microsoft Internet Explorer") objShell.AppActivate("HTML画像挿入テスト - Windows Internet Explorer") objIE.FullScreen = True '30秒表示 WScript.Sleep(30000) '画面のクリア objIE.Navigate "about:blank" 'IEの終了 objIE.Quit 'オブジェクトの破棄 Set objIE = Nothing Set objShell = Nothing end sub

  • vbscriptを用いて他のVBSファイルを実行

    プログラム ---------------------------------------------------------------- option explicit dim objwshell set objwshell = createobject("wscript.shell") objwshell.run "ファイルのフルパス", 1, false set objwshell = nothing --------------------------------------------------------------- その「ファイルのフルパス」上に「notepad.exe」と入力するとメモ帳が起動するんですけど、他のファイル(vbs、jsなど)を指定するとエラーが出ます。 もしかしてこれは拡張子が「.exe」のファイルだけしか起動できないのでしょうか? ちなみに上のファイルを保存するときの拡張子は「.vbs」です。

  • vbscriptでhtmlのソース保存

    vbscriptにてIEを操作し、指定URLのhtmlソースコードをファイルに保存するスクリプトを作成しています。 ですが、サイトによっては取得に失敗するケースがあり、原因が分かりません。 下記の例では、yahooのトップページは取得できますが、amazonのトップページは 取得できませんでした。 申し訳ありませんが、原因と解決策を教えていただきたいです。 よろしくお願いいたします。 尚、環境はWinXP(SP3) 、IEはver8を使用しています。 '--------------------------------------------' Option Explicit Dim objIE Dim strBody Set objIE = CreateObject("InternetExplorer.Application") objIE.Visible = True objIE.Navigate "http://www.amazon.com/" 'objIE.Navigate "http://www.yahoo.co.jp/" Do Until objIE.Busy = False WScript.sleep(250) Loop' strBody = objIE.Document.Body.InnerHtml msgbox strBody Dim fso, tf Set fso = CreateObject("Scripting.FileSystemObject") Set tf = fso.CreateTextFile("test.txt", True) tf.Write strBody tf.Close Set objIE = Nothing '--------------------------------------------'

  • ノーツのデータをVBScriptで取得したい

    ノーツのデータをVBScriptで取得しようとしております。 そのために, 次のスクリプトを書きました。 Set objNotes = CreateObject("Notes.Notessession") databaseName = "xxxxxxx.nsf" Set objDB = objNotes.GetDatabase("",databaseName) universalID = "ffdecaef1b87c101c925656e000c02dc" Set objDoc = objDB.GetDocumentByUNID(universalID) If objDoc.HasItem("Subject") Then WScript.Stdout.Write("Yes"&vbCrLf) itemValueList = objDoc.GetItemValue("Subject") WScript.Stdout.Write(TypeName(itemValueList)&vbCrLf) WScript.Stdout.Write(itemValueList(0)&vbCrLf) Set objDoc = Nothing Set objDB = Nothing Set objNotes = Nothing 結果は Yes String() C:\temp\notesvalue.vbs(9,1) Microsoft VBScript 実行時エラー: 型が一致しません。: 'itemValueList' とGetItemValueの値を取得することができません。 上の例では, Subjectというアイテムを取得することにしていますが, その他のItemでもだめでした。 ノーツのバージョンは4.6a OSはWindows 2000 Professional でございます。 識者の方, どうすればGetItemValueから有効な値を取得できるかお教えください。 よろしくお願いいたします。

  • DoEvents

    VBSでDoEventsは使えないのでしょうか? *************************** Dim ObjIE dim i Set ObjIE = CreateObject("InternetExplorer.Application") ObjIE.Navigate "http://oshiete.goo.ne.jp/" ObjIE.Visible = True Do While ObjIE.Busy = True DoEvents Loop Do While ObjIE.Document.ReadyState <> "complete" DoEvents Loop Set ObjIE = Nothing *************************** だと、エラーになりました。 Wscript.sleep 3000 ならエラーにならずにコードは動きました。 VBAならDoEventsは使えるのに VBSで使えない理由を教えてください。

  • VBS(WSH)で開いたIEのウィンドウがアクティブにならない

    VBSでタイトルバーのみのIEウィンドウを開き、 SendKeyでtestと入力するスクリプトを作成しています。 ですが、開いたIEのウィンドウがアクティブにならず、 SendKeyがIEに送信されません。 VBSについては全くの初心者でして、ウィンドウがアクティブにならないのが 環境の問題なのか、プログラムの問題なのか判断できません。 どなたかご教授をお願いします。 IEのバージョンは8、OSはWinXPです。 以下、ソースです。 -------------------------------------------------- 'タイトルバーのみのIEを起動する Set WshShell = WScript.CreateObject("WScript.Shell") Set objIE = WScript.CreateObject("InternetExplorer.Application") objIE.Navigate("http://www.google.co.jp/") objIE.MenuBar = False objIE.StatusBar = False objIE.ToolBar = False objIE.AddressBar = False objIE.Visible = True '表示待ちループ Do While objIE.Busy WScript.Sleep 100 Loop '[test]で検索 WshShell.SendKeys("test") WScript.Sleep(100) WshShell.SendKeys("{TAB}") WScript.Sleep(100) WshShell.SendKeys("{ENTER}") --------------------------------------------------

  • Vbscriptエラー

    vbでメッセージBOXを用いてプログラムを起動できるようにしたいのですがエラーが出てしまいます。「インデックスが有効範囲にありません。」 どこが間違っているのでしょうか? ーーーーーーー Dim objWShell Dim a Dim b a = MsgBox (" 「」を利用。"&Chr(13)&Chr(13)&_ "    「」?    "&Chr(13)&Chr(13)&Chr(13)&_ " ---------------------------- "&Chr(13)&_ "  お問い合わせください。" , vbYesNo,"「r」") ' MsgBox vbYes&"="&a If a = vbYes Then Set objWShell = CreateObject("WScript.Shell") b = WScript.Arguments(0) If b = 0 Then objWShell.Run "C:\Windows\System32\notepad.exe" ,vbNormalFocus,False ' End If End If ーーーーー

  • VBscriptからIE11起動

    windows7(x64) IE11 IEを起動するスクリプトを.vbs作成しました。 vbsファイルをダブルクリックすると、↓エラーが発生するときがあります。 「 WScript.CreateObject: "InternetExplorer.Application" というオブジェクトを作成 できませんでした。」 ↓SRCです。 Dim IE Set IE = WScript.CreateObject("InternetExplorer.Application", "Event_") IE.Visible = True IE.Navigate ("http://www.yahoo.co.jp") set IE = nothing 数秒待ったり、vbsを連打すると起動します。 プロパティ(vbs右クリック)のスクリプトタブで実行時間を10秒にしてみても起動できないことがあります。 オブジェクトを作成しない方法はありますか? また、失敗している原因はなんでしょう?

  • VbscriptでIEのコントロール

    以下の2つのサイトを参考にIEの自動処理を作っています。 「IE 画面を、スクリプトで操作する (パソコン便利ツール集)」 http://makoto-watanabe.main.jp/htmlDOM.html 「WSH JScriptを使いこなそう ~キーボード操作~」 http://3rd.geocities.jp/kaito_extra/Source/KeybordCtrl.html そこで簡単なhtmlページを作り、javascriptの「confirm」を使って確認メッセージを表示しました。 この確認メッセージの「OK」か「キャンセル」をVbscriptの「SendKeys」を使ってコントロールしようとしてるのですが全く反応しません。 何がいけないのでしょうか? もちろん確認メッセージはアクティブの状態です。 開いたIEのオブジェクトなどでコントロールしないといけないのでしょうか? ちなみに、html内のjavascriptは次のようにしています。 <script Language="JavaScript"> <!-- confirm("よろしいですか?") //--> </script> Vbscriptは次の通りです。 Set objWshShell = Wscript.CreateObject("Wscript.Shell") Set objIE = CreateObject("InternetExplorer.Application")'IEの起動 objIE.Visible = True 'IEウィンドウを表示 siteurl = "http://テスト用のサイト/test.html" objIE.Navigate2 siteurl'指定ページを開く While objIE.ReadyState <> 4 Or objIE.Busy = True WScript.Sleep 1000 Wend objWshShell.SendKeys("{enter}") objIE.Quit Set objIE = Nothing WScript.quit

  • ASPからVBS実行時の権限

    ASPからWscript.Shellを使ってVBSを実行しているのですが、 ASP中のDBオープンには問題はないのですが、test.vbs中でオープンできません LOGファイルは"dbConnection-OK"までになっています。 権限の問題かどうかはわからないのですが、原因は何でしょうか? DBはODBC経由のSQLServerです。 ---------ASP-------------------------------------- <% Dim dbConnection Set dbConnection = CreateObject("ADODB.Connection") dbConnection.Open "testdb" dbConnection.Close Set dbConnection = Nothing '上記OPENに関して問題なし Dim WshShell Set WshShell = CreateObject("Wscript.Shell") WshShell.Run "cscript.exe e:\test.vbs 123", 0, True Set WshShell = Nothing %> <html> <head> <meta http-equiv="Cache-Control" content="no-cache" /> <title>Pipot.to</title> </head> <body> OK </body> </html> ---------test.vbs-------------------------------------- Dim ObjFSO Dim ObjTS Set ObjFSO = CreateObject("Scripting.FileSystemObject") Set ObjTS = ObjFSO.CreateTextFile("e:\log.txt") ObjTS.Write "LOG開始" Dim dbConnection Set dbConnection = CreateObject("ADODB.Connection") ObjTS.Write "dbConnection-OK" dbConnection.Open "testdb" ObjTS.Write "OPEN-OK" dbConnection.Close Set dbConnection = Nothing ObjTS.Close Set ObjTS = Nothing Set ObjFSO = Nothing

専門家に質問してみよう