• ベストアンサー

WSH オブジェクト作成時の違い

JScriptです。 var obj = WScript.CreateObject("WScript.Shell"); と var obj = new ActiveXObject("WScript.Shell"); 等で振る舞いが変わってくる事はあるでしょうか? またどちらを使うべきでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#251971
noname#251971
回答No.1

どちらの場合も生成されるのは同じCOMのオブジェクトなので振る舞いに違いはありません。 前者はWSHが提供するCOMオブジェクト生成インターフェースで、後者はJScriptが提供するCOMオブジェクト生成インターフェースというだけです。 作成対象がWSHと無関係ならば、JScriptの記述を使う方がコピペ出来て良いということもあるかも知れませんが、作成するオブジェクトがWSHのものなので、どちらを使うべきとかは無くて単純に好みで決めて良いと思います。 このあたりを気にするということは、ある程度コードを書く思想というかスタイルがある方と思いますので、書いているコードのコンテキストに合わせて選べば良いかと思います。

popepon
質問者

お礼

ご回答ありがとうございます。大変参考になりました。 ActiveXObjectのIEからくるセキュリティ的な話(作成出来ないとか)が あったようなので気になっていたのですが特に差異は無いとの事しょうか? 個人的にはXMLHTTPオブジェクト等をCreateObjectで作成するのは 何か違和感を感じるので使い分けようかと思いますが 動作に変わりは無いとの事なので確信が持てて良かったと思います。 有難う御座いました。

その他の回答 (1)

noname#251971
noname#251971
回答No.2

自分の回答は質問のコンテキストが普通にWindows上で実行するWSHスクリプトの前提で書いていました。 セキュリティ的な話が絡んでくるのは、HTML内のスクリプトとして実行する場合の話ではないですか? その場合は、ブラウザの設定等でオブジェクトが生成できる/できないとかがあるかとおもいますが、それはどのインターフェースを使うかではなくて、どのオブジェクトをというのが問題になってくるかと思います。 (ただ、HTML内からの話は自分はあまり利用した事が無いので詳しくありません^^;)

popepon
質問者

お礼

ご回答有難う御座います。 HTML内の話なんですね、参考になりました。

関連するQ&A

  • WSHでシャットダウン

    WSH(JScript)でシャットダウンする方法を教えてください。 OSは2000とXPです。 XPだけなら以下の方法で出来るようですが、 2000で実行するとエラーになってしまいます。 var ws = new ActiveXObject("WScript.Shell"); ws.Run("shutdown -s -f");

  • WSH .TargetPath 中の /

    JScript です。 CreateShortcutプロパティのTargetPathを指定する際、 引数など渡す為のコマンドラインを含ませようとする場合 スラッシュを期待するものが実際には¥に置き換わってしまいます。 明示的にスラッシュを指定する事は出来るでしょうか? var objSh = WScript.CreateObject("WScript.Shell"); var sc = objSh.CreateShortcut("C:\\test.lnk"); sc.TargetPath = "C:\\test.exe \/m" など、/m で引数で渡そうとすると WScript.Echoなどでは正しく/mと表示されますが 実際のショートカットでは¥mと表示されてしまいます。 指定する方法はありますでしょうか? あと"C:\\test.exe \”C:\\test.exe\"" などの渡し方もエラーになってしまいます。 どの様に記述すべきでしょうか

  • WSHでスクロールの制御をしたいと考えています。

    WSHでスクロールの制御をしたいと考えています。 いつも開いているフォルダがあるのですが、そのフォルダで利用するものは一番下の方にあるため、フォルダを開いてフォルダの一番下までスクロールするという動作を自動化したいと考えています。 取り敢えず、フォルダを開くところまでは、 var objWShell = new ActiveXObject("WScript.Shell") objWShell.Run("H:\\") として、出来るようになりました。 後は、End keyのような動作かスクロールさせる動作をさせたいのですが検索しても見つかりません。 どなたか宜しくお願いします。

  • HTMLにWSHを組み込む

    HTMLにWSHのコードを書く事は可能ですか? たとえば、ページ開くとNotePad.EXEが起動するようにしたいのですが 以下のような書き方をすると WScriptが宣言されていません。 とエラーになります。 <HTML> <HEAD> <TITLE>起動のテスト</TITLE> </HEAD> <meta http-equiv="Content-Script-Type" content="text/JavaScript"> <BODY> <SCRIPT LANGUAGE="JavaScript"> var title = "メモ帳"; var wsh = WScript.CreateObject("WScript.Shell"); wsh.Run( "NotePad.EXE" ); </SCRIPT> </BODY> </HTML> いい案がある方教えてください。

    • ベストアンサー
    • HTML
  • WSHのエラー対策

    いつも参考にさせて頂いております。 当方環境: OS WinXP WSH Version 5.7 現在、WSH+JScript でFTPによるファイル転送のプログラムを作成しております。 ところが、実行させてみると、FTPコマンド実行のところでエラーが発生します。 (IPやコマンドファイルはスクリプト内で取得しています) var ws = WScript.CreateObject("WScript.Shell"); var errCode = ws.Run("ftp -i -s:"+cf+" "+ip_add,0,true); エラーメッセージ:「処理を待つことができません。」 MicrosoftのHPで検索したら、以下の事が分かりました。 「通常このエラーは、あるプロセス (ショートカット リンクの実行など) が完了するまでスクリプトが待機しているときに、そのプロセスが値を返さない場合に発生します。」 色々なHP見ても、大体皆さんFTPコマンドはこのように実行されているんですが、どこが違うのでしょうか? また、このエラーへの対処方法をご存知の方がいらっしゃいましたら、 ご教授下さい。

  • [WSH] ファイルのコピーができない

    こんにちは。 次のようなスクリプトでFTPフォルダにファイルをコピーしようとしたのですが、カレントフォルダにファイルがコピーされてしまうようです。 どうすれば、FTPフォルダにファイルをコピーできるのでしょうか? var objShell = WScript.CreateObject("Shell.Application"); var objFolder = objShell.NameSpace("ftp://user:password@sitename/directory/"); objFolder.CopyHere("C:\\WINNT\\win.ini"); WScript.Sleep(6000); ※下記のページを参考にさせていただき作成しました。http://homepage3.nifty.com/aya_js/wsh/wsh25.htm

  • WSH(JScript)既に開いているIEのビジー

    .run で起動させた物がIEである場合、 そのIEの .busy や .readyState を取得したいと考えています。 たとえば以下の様な感じです。 var shApp = WScript.CreateObject("Shell.Application"); var iehandle; // 起動されてなければ実行する if(launchflag == 0){ var objSh = WScript.CreateObject("WScript.Shell"); objSh.Run("実行するとIEが起動するVBS等"); } //////// Aの地点 /////////////// // 対象ウィンドウが無いか探す for(i= 0; i< shApp.Windows().Count; i++){ // ここで対象のIEが見つればTrue if(shApp.Windows().item(i).FullName.match(/iexplore.exe$/i) && shApp.Windows().item(i).document.title.match(/対象のIEタイトル/i)){ iehandle = i; break; } } while(shApp.Windows().item(iehandle).document.readyState == "complete"){WScript.Sleep(100);} // 起動したのを確認してすぐ次の処理へ この例だとAの地点(その↓のif文の判定)で原因不明のエラーがでます。 ただ、WScript.Sleep(2000);などを入れて待機すると問題無く動作するので IEが起動しきる前に参照しようとしてエラーになっているのではないかと思われます。 どの様にするべきでしょうか?

  • アプリで作成したexeファイルを実行する。

    Fortraで作成したexeファイルをサーバ上で動かしたいのですが 過去の履歴から下記プログラムをみつけましたが 上手く動作しません。 他の方法等ありましたらお教えください。 サーバー OS:Windows serever2003 IIS クライアント OS:Windows XP SP2 fortan 中身:固定のテキストを読んで計算し固定のファイルに結果を書く --------過去検索で見つけたものを元にexe名を変更した------- <html> <body> <SCRIPT LANGUAGE=javascript> <!-- function RunFile(file) { var WshShell = new ActiveXObject("WScript.Shell"); WshShell.Run(file,1); } //--> </SCRIPT> <input type=button value="計算" onClick="RunFile('a.exe')"> </body> </html> エラー:オートメーションサーバーはオブジェクトを作成できません 場所:var WshShell = new ActiveXObject("WScript.Shell"); 動作:クライアント側からIEで開いて実行

  • WSHでファイルを読み込まない。。。

    WSHで2個以上のtxtファイルの中身を連結して1つのファイルにして 掃き出すというプログラムを作りました。 いったんは正常に動作をしたのですが、最近PCの乗り換えを行い、 それ以降まったく動作しなくなりました。。。 仕事で使うプログラムの一部なので困っています。 どなたかご教授ください!! OSはPCの乗り換えをする前も後もXPのSP2です。 var objArgs = WScript.Arguments; var xmldc = new ActiveXObject("Microsoft.XMLDOM"); xmldc.async = false; //読み込んだファイルの数が2個以上か数える。 if (objArgs.Count() < 2) {//1個の場合・・・ WScript.Echo("txtファイルを2つ以上選択してください"); } else { //2個以上のときの処理 } 上記のプログラムで、2個以上のファイルをドラッグアンドドロップ で読み込ませようとしても必ず、 "txtファイルを2つ以上選択してください" と表示されます。 なぜでしょう??

  • WSHスクリプトでブラウザ更新

    教えてください。 WSHスクリプトでブラウザの更新をF5ではなくてControl + Rしたいのです。 Set WshShell = WScript.CreateObject("WScript.Shell") WScript.Sleep 2000 WshShell.AppActivate "テスト" WScript.Sleep 2000 WshShell.SendKeys "^R" WScript.Sleep 2000 WScript.Echo "終了" 最初の一回目の実行時はできるのですが、それ以降更新してくれません。 よろしくお願いいたします。