
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
隣の枝がはみ出してきたら切ってもいい?最もやってはいけないことは?
「隣の木が越境してきて困るが、勝手に切ってはいけないと聞くし…」そう思っている方も多いだろう。実は、2023年4月1日に民法が改正され、この「越境枝」のルールが大きく変わった。 教えて!gooでも「境界から出て...
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C# DLL エントリ ポイントが...
-
user32.dllがないためアプリが...
-
visual studioの不要なDll削除方法
-
shell32.dll のアイコンを使っ...
-
指定された引数が有効範囲にな...
-
USB機器のCプログラミングについて
-
ASP.NETのDLL入れ替えについて
-
ILMergeのエラーの原因と対策
-
python エラー
-
<unistd.h>をVisualStudioでつ...
-
” OS ビルド ” の意味が分か...
-
Makefile作成時の拡張子.oとは?
-
エクセルのエラーメッセージ「4...
-
unsigned long long 型のフォー...
-
Eclipseのブレークポイントが○...
-
VC++6.0からVC++.NET2005へ移植
-
組み込みソフト。ROM領域にデータ
-
VB2008で定数に色の設定をした...
-
他のLinuxでも動くa.outの作り方
-
DLLファイルの逆コンパイラにつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
res://ieframe.dll/について
-
VB6.0(SP6)にて開発を行なって...
-
ASP.NETのDLL入れ替えについて
-
visual studioの不要なDll削除方法
-
指定された引数が有効範囲にな...
-
C# DLL エントリ ポイントが...
-
user32.dllがないためアプリが...
-
VBAエディタのコード画面で、カ...
-
MSFlexGridコントロールのエラ...
-
パソリからIDをVB6で読み込みた...
-
*.exeと異なるフォルダのDLLを...
-
vb6で作成した画面が処理に時間...
-
VC++6.0 でのライブラリ参照方法
-
Java hs_err_pid0000.log解析
-
ファイルをvbaで圧縮したいので...
-
VB.NET xdoc2txtをつかってPDF...
-
M365にアップデートしてからコ...
-
VBにてIMEの入力モードを変える...
-
dllのロードアドレスについて
-
ILMergeのエラーの原因と対策
おすすめ情報
マクロ初心者で、検索すると質問のマクロを見つけました。
タスクバーのフォルダを開くマクロを探したのですが、
うまく見つけることが、できませんでした。
エクスプローラで開く目的は特に無いです。