エクセルVBAで、ユーザーフォームのリストボックスに
現在起動中のアプリやソフト(最小化されてみえないものや、エクセルのウィンドウに隠れてみないもの)の
一覧を表示させ、リストボックス上で選択した際に
その選択したアプリ、ソフトを前面に表示させたいです。
起動中のタスクを調べるコードなどはネット上に上がっていましたが
それだとバックグラウンドで動いているものなども
読み取ってしまい求めている動作になりません。
立ち上がっているが、最小化、ウィンドウ裏に隠れているものを
前面に、といのが行いたいことです。
どなたかご存知の方がいらっしゃれば宜しくお願いします。
No.3ベストアンサー
- 回答日時:
If InStr(strClassName, "Window") = 0 Then
これはちょっと厳しいようですね アプリやソフトの対象が広いですし
strClassName使っちゃAPIなのでダメ見たい・・
FindWindow IsWindowVisible GetNextWindow GetClassName
Const GW_HWNDLAST = 1
Const GW_HWNDNEXT = 2
Dim hWnd As Long
Sub main()
Dim strCaption As String * 500
Dim strClassName As String * 128
hWnd = FindWindow(vbNullString, vbNullString)
Dim arrWnd(), strCap As String
Dim n As Long
Do
If IsWindowVisible(hWnd) Then
GetClassName hWnd, strClassName, Len(strClassName)
If Not Left(strClassName, InStr(strClassName, vbNullChar) - 1) Like "*Window" Then
GetWindowText hWnd, strCaption, Len(strCaption)
strCap = Left(strCaption, InStr(strCaption, vbNullChar) - 1)
If strCap <> "" Then
ReDim Preserve arrWnd(1, n)
arrWnd(0, n) = strCap
arrWnd(1, n) = hWnd
n = n + 1
End If
End If
End If
hWnd = GetNextWindow(hWnd, GW_HWNDNEXT)
Loop Until hWnd = GetNextWindow(hWnd, GW_HWNDLAST)
Range("A1").Resize(UBound(arrWnd, 2) + 1, UBound(arrWnd, 1) + 1).Value _
= Application.Transpose(arrWnd)
End Sub
No.2
- 回答日時:
#1 If IsWindowVisible(hwnd) Then だとダメなのですね
想像するに・・ GetClassName を使って ClassName を取得し
Windowクラスを排除するのはどうでしょう
・
・
Dim strClassName As String * 128
hWnd = FindWindow(vbNullString, vbNullString)
・
・
Do
If IsWindowVisible(hWnd) Then
GetClassName hWnd, strClassName, Len(strClassName)
If InStr(strClassName, "Window") = 0 Then
GetWindowText hWnd, strCaption, Len(strCaption)
cap = Left(strCaption, InStr(strCaption, vbNullChar) - 1)
こんなのでどうでしょう・・・
後のSetForegroundWindowでの処理を考えると
WindowText(strCaption)に対応するhWndが必要と思われますので
Collectionでなく2次元配列の方が都合が良さそうですね
No.1
- 回答日時:
こんにちは
>それだとバックグラウンドで動いているものなども
やり方は色々ありそうですが
>一覧を表示
なのでキャプションの有無でWindowがあるか確認するのはどうでしょう
WindowsAPI Declare PtrSafe Function / Declare Function で
EnumWindows GetWindow GetWindowText
最前面アクティブ (取得時hwndはリストボックスのカラムに入れておく)
SetForegroundWindow
こんな構成で出来るような気がします・・
ヒントを頂きありがとうございます。
頂いたヒントをもとにネットを徘徊していたら
下記のコードが見つかりました。
ですがこのコードですと、バックグランドの物を拾ってきてしまいます。
『ここをこうすれば』みたなものがありましたら
教えて頂けないでしょうか。
文字数の関係で64Bit/32Bitの処理分けコードを省いております
Option Explicit
Const GW_HWNDLAST = 1
Const GW_HWNDNEXT = 2
'-------------------------------------------------------------------------------------
Sub main()
Dim strCaption As String * 500
hwnd = FindWindow(vbNullString, vbNullString)
Dim caps As Collection
Set caps = New Collection
Dim cap 'As String
Do
If IsWindowVisible(hwnd) Then
GetWindowText hwnd, strCaption, Len(strCaption)
cap = Left(strCaption, InStr(strCaption, vbNullChar) - 1)
If cap <> "" Then
caps.Add cap
End If
End If
hwnd = GetNextWindow(hwnd, GW_HWNDNEXT)
Loop Until hwnd = GetNextWindow(hwnd, GW_HWNDLAST)
For Each cap In caps
Debug.Print cap
Next cap
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 ソフトの実行を自動化したいです。 1 2022/10/15 16:09
- Windows 10 Windows11タスクバーやエクスプローラー、スタートメニュー 動画全画面時にカーソルが見えない 1 2022/04/08 00:03
- Windows 10 Windows10でセーフモードが出来ません。 2 2022/04/22 23:37
- Windows Me・NT・2000 widows xpのエラーで利用ができなくなりました 3 2022/12/21 13:43
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- フリーソフト 使用期間切れのDVDfab12でDVDをコピーしようとした時のエラー表示について 1 2022/09/09 01:58
- Windows 10 拡大鏡の音声読み上げ機能が機能しません 2 2023/02/23 22:34
- デジタルカメラ 録画した4K動画を、フルピクセルで再生したい 5 2023/05/10 00:05
- Windows 10 windows11が突然起動しなくなりました 3 2022/06/30 17:49
- Excel(エクセル) エクセルでcsvファイルを開いてVBAを使いたい 7 2022/04/28 11:12
このQ&Aを見た人はこんなQ&Aも見ています
-
好きなおでんの具材ドラフト会議しましょう
肌寒くなってきて、温かい食べ物がおいしい季節になってきましたね。 みなさんはおでんの具材でひとつ選ぶなら何にしますか? 1番好きなおでんの具材を教えてください。
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
プリン+醤油=ウニみたいな組み合わせメニューを教えて!
プリンと醤油を一緒に食べると「ウニ」の味がする! というような意外な組み合わせから、新しい味になる食べ物って色々ありますよね。 あなたがこれまでに試した「組み合わせメニュー」を教えてください。
-
うちのカレーにはこれが入ってる!って食材ありますか?
カレーって同じルーから作っても、家庭によって入っているものや味が微妙に違っていて面白いですよね! 「我が家のカレーにはこれが入ってるよ!」 という食材や調味料はありますか?
-
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
vbaから他のアプリを終了
Visual Basic(VBA)
-
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
-
4
現在起動中のアプリケーションの名前を知りたい
Visual Basic(VBA)
-
5
VBAで他のプログラムが起動しているか調べる方法
Visual Basic(VBA)
-
6
Vba アプリケーションが立ち上がるまで待つ
Excel(エクセル)
-
7
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
8
ExcelVBAにてアプリをタスクマネージャーから強制終了させたいのですが
Visual Basic(VBA)
-
9
メッセージボックスを前面に表示させるには?
Visual Basic(VBA)
-
10
ウィンドウを終了させたい・・・
Visual Basic(VBA)
-
11
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
12
VB6.0 SHELLで起動したプログラムを終了さしたいのですが
Visual Basic(VBA)
-
13
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
14
VBAのコマンドボタンの文字列の改行方法は?
Visual Basic(VBA)
-
15
EXCEL VBAから他アプリケーションを操作することは可能ですか?
Visual Basic(VBA)
-
16
エクセルマクロで、別のブックが開いているかを判定したいのですが。
その他(Microsoft Office)
-
17
エクセルVBAでNumLockキーの状態を確認する
Excel(エクセル)
-
18
EnumChildWindowsの使い方(VBA)
Visual Basic(VBA)
-
19
VBAで任意のウインドウのサイズを変更する方法
Visual Basic(VBA)
-
20
バックグラウンドのプロセスのエクセルを閉じる方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FORMが開いているかどうかの確...
-
起動中のアプリ、ソフトの取得
-
IEとクロームの表示ずれ
-
VBでメールを起動させるには・・・
-
DLLをREGSVR32しないで利用する...
-
Javaで環境変数を動的に変更す...
-
プログラムからOS標準ブラウザ...
-
WebBrowserコントロールでの印刷
-
VBscriptでのエクセルの起動に...
-
メモリの「コミット済み」の意...
-
LAN内でのIPアドレスの重複につ...
-
プロファイルエラーについて
-
メモリが"written"になることは...
-
RECOVERY(D:)ってなんですか?
-
\\Device\\Harddisk1\\DR1 でコ...
-
エラー!「ディスプレイドライ...
-
会計ソフトJDL macで使いたい W...
-
PCを起動すると画面が真っ黒で...
-
Windows98SE ・Meの動作「上限...
-
DtoD HD内でリカバリ
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FORMが開いているかどうかの確...
-
起動中のアプリ、ソフトの取得
-
DLLをREGSVR32しないで利用する...
-
VC++からブラウザを起動し...
-
タスクトレイ常駐するプログラ...
-
IPアドレスのみをMsgBoxで表示...
-
Javaで環境変数を動的に変更す...
-
VBscriptでのエクセルの起動に...
-
プログラムからOS標準ブラウザ...
-
SSI 文字化けしてしまう
-
アプリケーション実行中にタス...
-
Accessのフォームをコマンドラ...
-
VBのフォームサイズについて
-
VB6.0のツールバー標準メニュー...
-
macでのFTP転送(ドリームウェー...
-
「mailto:」の書式
-
VBでメールを起動させるには・・・
-
98プログラム言語をDos-Vで読み...
-
yahooメールの添付について
-
IEとクロームの表示ずれ
おすすめ情報