プロが教える店舗&オフィスのセキュリティ対策術

 既存のプログラム(他の人が作成したもの)を参考にプログラムを作成しましたが、どうしても、希望通りの挙動となりません。ShellExecuteの部分が要点と思いますので、その点について教えてください。言語は JavaScript です。

 以下のような記述がありました。
----
var launcher = new ActiveXObject("Shell.Application");
launcher.ShellExecute(cmd, param, "", "open", "1");
----

 ShellExecute の引き数の cmd は、実行ファイル名(ファイルパス付)、param は実行ファイルの引き数です。これはこれで動いています。

 さて、これを参考に、cmd の部分にDOSコマンドを与えました。すると、DOSコマンドは実行されたものの、実行の瞬間に黒いウィンドウ(おそらく、コマンドプロンプトと思われます)が一瞬表示されました。この黒いウィンドウを表示させずにDOSコマンドを実行させたいのですが、引き数を調整することでそのようなことは可能でしょうか。

 Webで調べたところ、ShellExecute の引き数として SW_SHOWNORMAL や SW_MAXIMIZE などを与える方法もあるようですが、SW_*** を紹介しているWebページでは、そもそも引き数の個数が上記と異なっていたりします。

 ご助言をお願い致します。

A 回答 (2件)

最後の引数を0にしたらどうですか。


launcher.ShellExecute(cmd, param, "", "open", 0);

ShellExecuteという名前はWin32APIから来ています。
他の言語であっても同名で似たような動作をする関数が大概存在しますが、
当然、名前を一緒にしただけなので引数などのインターフェースが違ってきます。
そういうわけで検索するときは「Shell.Application」を付けて検索するなどした方がいいかもしれません。

http://msdn.microsoft.com/library/default.asp?ur …
    • good
    • 0
この回答へのお礼

 情報をご提供くださり、ありがとうございます。

 最後の引数を 1 → 0 に変更して試行したのですが、それでも黒い画面が一瞬表示されてしまいました。他の方からの情報も加味すると、これについてはどうしようもないものと考えました。今回実行しようとしているDOSコマンドに相当する関数を探す、などの方向転換をするつもりです。

 ご教示いただいたURLですが、いくら探しても見つからなかった ShellExecute のインタフェース(引数)が分かり、大変参考になります。

 どうもありがとうございました。

お礼日時:2007/02/03 18:22

★『ShellExecute』関数では無理です。


・引数に『SW_SHOWNORMAL』や『SW_MAXIMIZE』を与えてもそれは『コマンド・プロンプト』の
 ウインドウを制御するものではありません。実行させる DOS コマンドなどへの指示です。
 つまり、メモ帳などを起動させようとして『SW_MAXIMIZE』を指定するとメモ帳のウインドウが
 最大化されて表示されます。また、『SW_HIDE』を指定してもメモ帳などのウインドウが非表示
 になるだけです。
・あと Web で調べて ShellExecute の引数の数が違うのは、Web での情報が Windows の API 関数
 の引数を説明しているページがほとんどで、Java Script はその API 関数も利用できるように
 機能を取り込んでいるだけです。このため、引数の順番も何か違っていますね。注意が必要!
・『Java Script』はあまり詳しくありませんが、API関数ならば『CreateProcess』関数などの
 プロセスを起動させる方法で『コマンド・プロンプト』を非表示で実行できたと思います。
 『Java Script』にも似たような関数があればそれを検索などして探して下さい。
・以上。『ShellExecute』関数では無理という事だけアドバイスします。
・おわり。

参考URL:http://msdn.microsoft.com/library/ja/default.asp …
    • good
    • 0
この回答へのお礼

 情報をご提供くださり、ありがとうございます。

 使用している関数 ShellExecute は、「SW_MAXIMIZE」を引数として受け付けるものとは異なるという事が分かり、これについて無駄に調査時間を消費しなくて済ませることができました。

 どうもありがとうございました。

お礼日時:2007/02/03 18:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A