ここから本文です

VBSでウィンドウを常に最前に表示することってできませんか? Googleでも検...

oda********さん

2008/12/2500:33:24

VBSでウィンドウを常に最前に表示することってできませんか?
Googleでも検索してみたのですが、方法がみつかりません。
できれば具体的にお願いします

補足msgboxやinputboxなどのウィンドウです

閲覧数:
13,752
回答数:
1
お礼:
25枚

違反報告

ベストアンサーに選ばれた回答

mik********さん

編集あり2008/12/2522:57:54

「ウインドウ」が何か、教えてください。

・VBSで出すウインドウ(MsgBoxみたいなの)ですか?
・VBSから起動したアプリケーション(WshShell.Runで起動するなど)のウインドウですか?
・VBSと関係ない、別のアプリケーションですか?(すでに起動している特定のウインドウを、常に最前面にしたい?)

あとは、常に最前面というとSetWindowPos()を使うのが自然かと思いますが、VBS(WSH)からWindows APIを呼ぶのは難しそうですね。要件次第では、お望みの処理を行うCOMを作るか探すかして、それをVBSから呼ぶことも検討してはいかが?


補足:
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1217957967
を参考にしました。
Excelがインストールされていることが条件ですが、いちおうできました。

かなりトリッキーなコードだと思います。自分でも、正直驚いています。

ダイアログのタイトルを頼りにウインドウを探し出してSetWindowPos()するので、最前面にしたいダイアログを出す前に、そのダイアログのタイトルをstrTitleにセットし、HWND_TOPMOST()を100ミリ秒の遅延呼び出しにしています。

下のコードを見てもらえばわかると思いますが、3行セットで書くこと、タイトルで識別していることを念頭に置けば、ある程度自由に使ってもらえると思います。


Option Explicit

Dim objHtml
Dim strTargetTitle

Dim strInput

Set objHtml = CreateObject("HTMLFile")

strTargetTitle = "タイトル1"
objHtml.parentWindow.setTimeout GetRef("HWND_TOPMOST"), 100
MsgBox "最前面に出すメッセージボックスです", vbOkOnly, "タイトル1"

MsgBox "普通のメッセージボックスです", vbOkOnly, "タイトル1"

strTargetTitle = "タイトル2"
objHtml.parentWindow.setTimeout GetRef("HWND_TOPMOST"), 100
strInput = InputBox("最前面に出すインプットボックスです", "タイトル2")

strInput = InputBox("普通のインプットボックスです", "タイトル2")


Set objHtml = Nothing


Sub HWND_TOPMOST()
Dim ExcelApp
Dim hWnd
Dim lRtn
Set ExcelApp = CreateObject("Excel.Application")
hWnd = ExcelApp.ExecuteExcel4Macro("CALL(""user32"",""FindWindowA"",""JJC"",0,""" & strTargetTitle & """)")
lRtn = ExcelApp.ExecuteExcel4Macro("CALL(""user32"",""SetWindowPos"",""JJJJJJJJ""," & hWnd & ",-1,0,0,0,0,3)")
Set ExcelApp = Nothing
End Sub

質問した人からのコメント

2008/12/26 23:11:34

参考になります、ありがとうございました

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる