
エクセル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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
VBAで既に開いている別アプリケーションのオブジェクトを得る
Visual Basic(VBA)
-
VBAで他のプログラムが起動しているか調べる方法
Visual Basic(VBA)
-
vbaから他のアプリを終了
Visual Basic(VBA)
-
-
4
VBAでの SendKeysの変数指定方法
Excel(エクセル)
-
5
ExcelVBAにてアプリをタスクマネージャーから強制終了させたいのですが
Visual Basic(VBA)
-
6
EXCEL VBAから他アプリケーションを操作することは可能ですか?
Visual Basic(VBA)
-
7
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
8
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
9
エクセルから現在起動しているアクセスファイルをアクティブにしたい
Access(アクセス)
-
10
エクセルVBAでNumLockキーの状態を確認する
Excel(エクセル)
-
11
VB6.0 SHELLで起動したプログラムを終了さしたいのですが
Visual Basic(VBA)
-
12
外部プロセスを終了したい!!
Visual Basic(VBA)
-
13
プロセスIDの取得方法について
Visual Basic(VBA)
-
14
【Excel VBA】マクロでExcel自体を終了させたい
Excel(エクセル)
-
15
VBA(エクセル)で自動的にボタンをクリックさせるには
その他(プログラミング・Web制作)
-
16
Excel VBAで他アプリケーションの文字列取得
Excel(エクセル)
-
17
VBAでOutlookを終了させたい ExcelVBAで既に起動されているOutlookを終了させる
Visual Basic(VBA)
-
18
VBAでこんなことできますか?
PowerPoint(パワーポイント)
-
19
VBA:結合されたセルに対する「Target」について
Access(アクセス)
-
20
ExcelVBAでBookを開く時にファイル名の一部だけを指定で
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
FORMが開いているかどうかの確...
-
起動中のアプリ、ソフトの取得
-
DLLをREGSVR32しないで利用する...
-
タスクトレイ常駐するプログラ...
-
WebBrowserコントロールでの印刷
-
NEC 再セットアップできない
-
メモリの「コミット済み」の意...
-
Windows98SE ・Meの動作「上限...
-
HDDからSSDに換装したらまた変...
-
\\Device\\Harddisk1\\DR1 でコ...
-
これは何ですか?igfxext.exe
-
FMVで「トラブル解決ナビ」を使...
-
NECノートPC 初期化方法を教え...
-
パソコン起動時にF1を押さない...
-
起動時に毎回 Press The ESC Key
-
古いIBMパソコンのBIOS設定の起...
-
プロファイルエラーについて
-
このエラーはどういうことでし...
-
tightvncで灰色の画面になります。
-
PCを起動すると画面が真っ黒で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
FORMが開いているかどうかの確...
-
起動中のアプリ、ソフトの取得
-
DLLをREGSVR32しないで利用する...
-
Eclipse4.2について
-
Javaで環境変数を動的に変更す...
-
エクセルは立ち上げると記憶が...
-
ちょっと分からないので、教え...
-
タスクスケジュールで定時にポ...
-
Adobe Page Mill3.0jについて...
-
PCのパワー配分の見方
-
apacheの起動できません。
-
自動ログイン(windows2000pro)
-
プログラムからOS標準ブラウザ...
-
IPアドレスのみをMsgBoxで表示...
-
タスクトレイ常駐するプログラ...
-
VB6.0のツールバー標準メニュー...
-
ホームページのレジ処理はどう...
-
コマンドプロンプトでIEを起動...
-
どうしても登録できません。ど...
-
WebBrowserコントロールでの印刷
おすすめ情報