
No.3ベストアンサー
- 回答日時:
試しに作ってみました。
超ヘビーな内容になってしまいます。wmi で作る予定でしたが、このほうがまだましなのかもしれません。
以下の
If myCap Like "ローカル*" Then '**
のキャプションの名称を予め記録しておいて、書き出しておきます。
それを そのセンテンスの Like "●●●*" とワイルドカードを入れて設定してください。ただ、実用には、かなり疑問がつくプログラムです。
こちらは、Windows 10 ですが、Explorer のClass 名が変更されたのはいつかは分かりませんが、下位バージョンの時は、ExplorerWClass ですから、FindWindow で、Hwnd が取れるのを確認してから実行してください。今回は、久々にちゃんと出来たようです。
Excel は、32bit 版でお願いします。OS側は関係ありません。もし、64bit 版ですと、以下、API関数のすべてを書き直さなくてはなりません。
'//標準モジュール
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function IsWindowVisible Lib "user32.dll" (ByVal hwnd As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
'Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Declare Function GetNextWindow Lib "user32.dll" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long
Private Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function SetWindowPos Lib "user32.dll" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const GW_HWNDLAST = &H1
Private Const GW_HWNDNEXT = &H2
Private Const SW_MAXIMIZE As Long = &H3
Private Const SW_MINIMIZE As Long = &H6
Private Const SW_RESTORE As Long = &H9
Private Const HWND_TOPMOST As Long = &HFFFF
Private Const SWP_NOSIZE As Long = &H1
Private Const SWP_NOMOVE As Long = &H2
Sub GetCaption()
Dim hwnd As Long
Dim strCaption As String * 50
' Dim strClassName As String * 50
Dim myCap As String
hwnd = FindWindow("CabinetWClass", vbNullString)
If hwnd = 0 Then
MsgBox "エクスプローラーは立ち上がっていません。"
'ここで、MsgBox の代わりに、OpenFolders()を呼び出しも可能
Exit Sub
End If
Do
If IsWindowVisible(hwnd) Then
DoEvents
GetWindowText hwnd, strCaption, Len(strCaption)
If strClassName Like "CabinetWClass*" Then Stop
myCap = Left(strCaption, InStr(strCaption, vbNullChar) - 1)
If myCap Like "ローカル*" Then '**
ShowWindow hwnd, SW_RESTORE
SetWindowPos hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
Exit Do
End If
End If
hwnd = GetNextWindow(hwnd, GW_HWNDNEXT)
Loop Until hwnd = GetNextWindow(hwnd, GW_HWNDLAST)
If myCap = "" Then
Call OpenFolders
End If
End Sub
'
Sub OpenFolders()
Dim targ As String
targ = "C:\" 'キャプションが「ローカル」になる
Shell "C:\Windows\Explorer.exe " & targ, vbNormalFocus
End Sub
'//
マクロの内容は理解できませんでしたが、コピペで実行するとフォルダを重複せずに開く事ができました。
簡単は、マクロでできると思って試行錯誤していましたが、結局できず今回質問させて貰いました。
マクロまで作って頂き本当にありがとうございました。
No.2
- 回答日時:
しばらく考えてみて、起動後のタスクバーにあるプログラムなどから、特定のプログラムをゲットして実行するワザというものを思い出しました。
wmi を使うのだろうとは思いますが、pid から、handle にするとか、初心者とか中級というレベルの話ではないし、単なる興味だけでは、到底届かないものです。VBAでも使いますが、それとは別のカテゴリのプログラムです。wmi の中に、そのものずばりはありませんが、以下が参考になるでしょう。
http://www.wmifun.net/
また、VBAには、フォルダー名を取得するダイアログがありますから、それを使うのが良いです。
Application.FileDialog(msoFileDialogFolderPicker)
操作的には、タスクバーのフォルダをクリックするだけなので
簡単なマクロなのだと思い、いろいろ検索したのにそれらしいマクロが
見つからない理由が、分かりました。簡単ではないのですね。。。
『フォルダー名を取得するダイアログ』の使い方調べてみます。
回答、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】フォルダを3つ、POモニター上に、決まった並べ方をしたい 4 2022/08/31 11:05
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- Visual Basic(VBA) エクセルのマクロについて教えてください 物件ごとのフォルダを作成してます そのフォルダ内にサブフォル 2 2023/07/02 17:58
- Excel(エクセル) 【マクロ】フォルダを2つのモニターの定位置に並べたい 2 2022/09/02 01:14
- Access(アクセス) エクセルのマクロについて教えてください。 2 2023/02/03 16:07
- Excel(エクセル) 【VBAファイル移動】2つのマクロを順に実行。1つ目のマクロが実行不可⇒2つ目が実行不可となる件 2 2022/07/29 12:17
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/02/21 11:19
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/20 16:59
- Visual Basic(VBA) 【マクロ】フォルダにファイルが1つも無い時に、ファイルがありませんとメッセージを表示する 4 2022/08/28 08:48
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
res://ieframe.dll/について
-
ASP.NETのDLL入れ替えについて
-
C# DLL エントリ ポイントが...
-
vb6で作成した画面が処理に時間...
-
エクセル マクロで指定フォルダ...
-
ファイルをvbaで圧縮したいので...
-
パソリからIDをVB6で読み込みた...
-
指定された引数が有効範囲にな...
-
visual studioの不要なDll削除方法
-
VB.NET xdoc2txtをつかってPDF...
-
M365にアップデートしてからコ...
-
VB6 - DLLの動的リンクの方法に...
-
VBAエディタのコード画面で、カ...
-
[VBA]64b版-行数表示.dllの登録...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
” OS ビルド ” の意味が分か...
-
Cランタイムライブラリのヘッダ...
-
エクセルVBAではRound...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
user32.dllがないためアプリが...
-
visual studioの不要なDll削除方法
-
ASP.NETのDLL入れ替えについて
-
VB6.0(SP6)にて開発を行なって...
-
VBAエディタのコード画面で、カ...
-
VBにてIMEの入力モードを変える...
-
res://ieframe.dll/について
-
C# DLL エントリ ポイントが...
-
ファイルをvbaで圧縮したいので...
-
M365にアップデートしてからコ...
-
自作のDLLがみつからない
-
VBからIMEパッドを呼び出す方法...
-
vb6で作成した画面が処理に時間...
-
*.exeと異なるフォルダのDLLを...
-
MSFlexGridコントロールのエラ...
-
スタートメニューの「ファイル...
-
指定された引数が有効範囲にな...
-
プロシージャエントリポイント ...
-
VC++6.0 でのライブラリ参照方法
-
WIN10で常にフォームを手前に
おすすめ情報
マクロ初心者で、検索すると質問のマクロを見つけました。
タスクバーのフォルダを開くマクロを探したのですが、
うまく見つけることが、できませんでした。
エクスプローラで開く目的は特に無いです。