HTA + VBScript (+ Javascript)でコントロールボックスを制御する方法はあるか?

このQ&Aのポイント
  • HTA + VBScript(+ Javascript)を使用して「特定のファイルをイントラネット内の別PC(Server)からコピーするツール」を作成しました。しかし、ファイルコピー中にHTAのフォームを終了すると再度実行できない状態になります。
  • そこで、「コピー中のみHTAフォームに付随するコントロールボックスの×ボタンを無効にする」機能を追加したいと考えています。しかし、HTA + VBScriptでコントロールボックスの制御に介入することはできるのでしょうか?
  • また、コピー中にHTAフォームを非表示にする方法も考えましたが、フォーム上にコピー中であることを示すメッセージを表示しているため、この案を採用したくありません。良い方法があれば教えてください。
回答を見る
  • ベストアンサー

HTA + VBScript (+ Javascript)でコントロールボックスを制御できますか?

HTA + VBScript(+ Javascript)で「特定のファイルをイントラネット内の別PC(Server)からコピーするツール」を作成しました。イメージ的にはフォーム上の「更新ボタン」をクリックするとコピーダイアログが表示されるようなものです。 このツールを使いファイルコピー中(コピーダイアログが表示されているとき)にHTAのフォームを終了するとプロセス上にmshta.exeが残りHTAを再度実行することができない状態になります。 そこで「コピー中のみHTAフォームに付随するコントロールボックスの×ボタンを無効にする」ような機能を追加したいのですが、HTA + VBScriptでコントロールボックスの制御に介入することはできるのでしょうか? コントロールボックス自体を非表示にすることはできますが認知度の高い表現なので残したいと考えています。 また、コピー中にHTAフォームのvisibilityをhiddenにしてフォームを隠しておく方法も考えたのですが、フォーム上にコピー中であることを示すメッセージを表示したりしているのでこの案もできれば採用したくありません。 何か良い方法がありましたら教えてください。よろしくお願いします。 OS:Windows XP Pro IE:Internet Explorer

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

別法です。コピー自体は別プロセスであると割り切ってしまっては? コピー自体(CopyHereメソッドと思われます)を別のVBSとして 保存し、ボタンのイベント処理ではRunメソッド(非同期)で、この VBSを実行するようにします。非同期のRunメソッドはプロセス起動後 直ぐに制御を戻しますので、×ボタンでHTAを閉じてもmshta.exeが 残る可能性は殆どありません。 但し、コピーがいつ終了したかは直接確かめる方法がないので、 コピー中メッセージを表示しないか、VBSからHTA画面にSendKeysを 発行する等の方法で同期を取ります。

CrownMiffy
質問者

お礼

試験的にvbs外部ファイルを作成し試してみましたが、仰る通りHTAを閉じてもmshta.exeが残らないことを確認しました。 ありがとうございました。

CrownMiffy
質問者

補足

アドバイスありがとうございます。仕組みは概ね理解しました。 時間が掛かると思いますが試してみたいと思います。

その他の回答 (1)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

「閉じる」ボタンだけを抑止する方法は無いようです。 もし、C言語等でプログラムできるなら、画面のウィンドウハンドルを 使って制御することができます。 尚、SYSMENUを非表示にしても Alt + F4 で閉じますので、KeyDown イベントで抑えておかないと「抜け道」が残ってしまいます。

CrownMiffy
質問者

お礼

やはりHTAではコントロールボックスに介入はできないのですね。。。 本職ではないのでプログラム言語は扱えないです。 現象の発生条件自体、通常使用では起こらないと思われるので仕様として残すことも考えます。 Alt + F4はとりあえずコントロールボックス制御が解決できてから考えようと思っておりました。

関連するQ&A

  • htaファイルに渡したパスを取得するには。

    vbsファイルを開くと「ファイル選択」ダイアログを表示してテキストファイルを選択するとそのファイルのパス先をhtaファイルのSPANタグに渡して表示するところまで作成する事ができました。このSPANタグに表示したパスをVBScriptで取得する事が解らず、困っています。 どのようにすればhtaファイルに渡したパスをVBScriptで取得する方法をご存知の方がいましたらアドバイスいただけませんでしょうか。 何卒、宜しくお願いします。

  • htaファイルの呼び出し

    現在業務にて必要となる資料(フォルダやExcel、URL)へのアクセスをhtaファイル(今後A.htaとする)のボタン経由で 行っております。アクセスが必要となる資料の増加に伴い、ボタン経由で別ウィンドウ(別htaファイル=今後B.htaとする)を起動する 仕組みの構築を進めております。 そこでA.htaファイル内でVBScriptでB.htaファイルを起動する仕組みを作りました。しかしながら、ファイルサーバ上に 両htaファイルを配置し、実行したところ、B.htaファイル起動時に実行するかの確認ダイアログが出力されてしまいました。 このダイアログを出力しないようにしたいのですが、良い方法はございますでしょうか。 ※尚、そもそも本構成(hta実行をVBScriptで行っている)に問題がある場合は、ご指摘頂けますと幸いです。 ■A.htaファイル ==================================================================================================================================== Function submado() Set objWShell = CreateObject("WScript.Shell") objWShell.Run "submado.hta" End Function ~~~~~~~~割愛~~~~~~~~ <td><input type="button" class="btn-primary" value="サブウィンドウ" onclick="submado()" style="WIDTH: 200px; HEIGHT: 25px"></td> ====================================================================================================================================

  • VBScriptで自作ダイアログボックスを表示することはできますか?

    VBScriptで自作ダイアログボックスを表示することはできますか? VBScriptで対話的に別プログラムの初期設定情報を設定したいと考えています。 基本的な質問で恐縮ですが、VBSCriptで自作のダイアログボックスを表示し、 入力値を取得することは可能でしょうか。 明確なイメージは持っていないのですが、Excelなどでフォームを作成して VBScriptから呼び出し、入力値を取得するといったことができないでしょうか。 もしご存知でしたらやり方の概要(本当に簡便で構いません)をご教示頂けると 有難いです。よろしくお願いいたします。

  • VBScriptかJavaScriptについての質問です。

    初心者名質問で申し訳ないです。 今現在、拡張子を「.hta」にして、 基本的にVBSでスクリプトを組んでいます。 現在「親.hta」ファイルから「子.hta」ファイルを呼び出す スクリプトを作っています。 で、「子.hta」ファイルが存在するフォルダの名前を 「子.hta」ファイルに表示させたいのです。 方法がよく分からなかったため、現在「子.hta」では、 VBSで自分のフォルダ名を「変数A」に取得して、 JavaScriptで「変数A」を表示させる方法をとっています。 しかし、この方法では表示されるフォルダ名が、 なぜか「子.hta」のフォルダ名ではなく、 「親.hta」のフォルダ名になってしまっています。。 フォルダを取得した時点で、 親のフォルダを取得してしまっているのでしょうが、 子自身のフォルダ名を取得するには どうすれば良いのでしょうか。 VBScript、JavaScriptどちらの方法でも良いので、 教えていただければ幸いです。

  • コントロールツールボックス

     コントロールツールボックスをWordで使用可能にし、コマンドボタンを挿入したいのですが、挿入時にボタンをクリックすると、自動的に文書上にボタンができてしまいます。また、コードを入れて、動かそうと思ってクリックすると、動作せず、コードの中身、モジュールが表示されるだけです。どこを直せば良いのでしょうか(Excelでの「ツール」→「ユーザー設定」でコマンドタブから「フォーム」を選んだ時にできるようなボタンはWordにはないのでしょうか)?

  • VBScriptでMsgBoxのYesNoボックスを自動的にクリックしたい

    VBScriptであるボタンをクリックして表示された、MsgBoxの表示されたYes Noボックスを自動的にクリックしたいと考えています。 下記のように、VBScriptでボタンやコンボボックスを選んだりクリックした後にMsgBoxで”はい”、”いいえ”が表示されて、その表示されたMsgBoxで”はい”をクリックしたいのですが、コマンドが分からず困っています。 IEオブジェクト.Document.フォーム名.コンボボックス名.selectedIndex = 0からの番号

  • カレンダーコントロールのダイアログボックス

    ACCESSでボタンをクリックすると、カレンダーコントロールのダイアログボックスが表示されて、日付が入力出来るようにしたいのですが... この方法で日付を入力するテキストボックスに共通で使用出来たらと考えています。 カレンダーコントロールのダイアログボックスの作成から分からないのでお願いします。

  • フォームとコントロールツールボックスの違い

    コマンドボタンでVBAのプログラムを実行させたいんですがフォームとコントロールツールボックスにあるコマンドボタンの違いがよくわかりません???? どうやって使い分ければいいんでしょーか???

  • IllustratorCS3でのJavascriptを使ったGUIコントロールについて

    IllustratorCS3でJavascriptを使ったGUIコントロールの使い方について質問です。 Javascriptで以下のようにテキストボックスの横に参照ボタンを置き、ボタンをクリックすると「ファイル選択」ダイアログを表示し、そこで選択したファイルのパスをテキストボックスに表示したいと思っています。 以下のようなソースを作成しました。 winObj = new Window("dialog","テキスト変換ツール",[100,50,330,200]); sbtnObj=winObj.add("button",[180,20,220,40],"参照"); ftxtObj=winObj.add("edittext",[10,10,180,40],"ファイル名を入力してください。"); sbtnObj.onClick=function(){ ffilename=File.openDialog("テキストファイルを指定してください。"); if(ffilename){ ftxtObj.text=ffilename; } } これですと、参照ボタンをクリックしてファイルを選択すると、テキストボックス(ftxtObj.text)に「File」と表示されてしまいます。ここには選択したファイルのパスを表示したいのですが、どなたかご存知の方がいらっしゃいましたらよろしくお願いします。

  • VBからhtaファイルを開くには?

    VB6.0で小さなアプリケーションを作っています。 同じフォルダ内にあるhtaファイルをVBから開きたいのですが、うまくいかずに悩んでしまっています。 具体的には、VBのフォームにボタンを作り、それを押すとhtaアプリが別ウィンドウで起動するという形です。 この方法について何かご存知でしたらアドバイス宜しくお願いします。

専門家に質問してみよう