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/について
-
VB6.0(SP6)にて開発を行なって...
-
エクセル マクロで指定フォルダ...
-
ベースアドレスの設定について
-
ulib.dllがみつかりません
-
コマンドラインで商用利用可能...
-
ファイルをvbaで圧縮したいので...
-
【COM】DLLからDLLをロードでき...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
適切な変換関数が存在しない???
-
VBAを何回も作り直して、容量が...
-
unsigned long long 型のフォー...
-
アプリケーションのDLLファイル...
-
ソフトの開発言語を調べる方法
-
Excelのエラーで困ってます。
-
すべてのリビルド: 0 正常、 0 ...
-
visual studio2019でデバッグが...
-
1 つ以上の複数回定義されてい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
visual studioの不要なDll削除方法
-
ファイルをvbaで圧縮したいので...
-
VB6.0(SP6)にて開発を行なって...
-
res://ieframe.dll/について
-
C# DLL エントリ ポイントが...
-
ASP.NETのDLL入れ替えについて
-
WIN10で常にフォームを手前に
-
VBAエディタのコード画面で、カ...
-
VB.NET xdoc2txtをつかってPDF...
-
VC++6.0 でのライブラリ参照方法
-
MFC7.0ランタイムライブラリ
-
指定された引数が有効範囲にな...
-
user32.dllがないためアプリが...
-
自作のDLLがみつからない
-
VBからIMEパッドを呼び出す方法...
-
dllをいじる。。
-
vb6で作成した画面が処理に時間...
-
M365にアップデートしてからコ...
-
[VBA]64b版-行数表示.dllの登録...
-
*.exeと異なるフォルダのDLLを...
おすすめ情報
マクロ初心者で、検索すると質問のマクロを見つけました。
タスクバーのフォルダを開くマクロを探したのですが、
うまく見つけることが、できませんでした。
エクスプローラで開く目的は特に無いです。