
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を探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ASP.NETのDLL入れ替えについて
-
visual studioの不要なDll削除方法
-
user32.dllがないためアプリが...
-
指定された引数が有効範囲にな...
-
VB6 - DLLの動的リンクの方法に...
-
C# DLL エントリ ポイントが...
-
ファイルをvbaで圧縮したいので...
-
VBAエディタのコード画面で、カ...
-
ウインドウズxpの「ファイルを...
-
python エラー
-
エクセルのエラーメッセージ「4...
-
<unistd.h>をVisualStudioでつ...
-
Visual studio2017で、2回目の...
-
アプリケーションのDLLファイル...
-
” OS ビルド ” の意味が分か...
-
VC++6の「プロセスへアタッチ」...
-
eclipseでデバックするとエラー...
-
Excelのエラーで困ってます。
-
DLL参照時に指定されたモジュー...
-
ビルド時のエラー(書き込みで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6.0(SP6)にて開発を行なって...
-
ASP.NETのDLL入れ替えについて
-
user32.dllがないためアプリが...
-
visual studioの不要なDll削除方法
-
res://ieframe.dll/について
-
C# DLL エントリ ポイントが...
-
VC++6.0 でのライブラリ参照方法
-
C++のdllの作り方を教えてく...
-
ファイルをvbaで圧縮したいので...
-
vb6で作成した画面が処理に時間...
-
指定された引数が有効範囲にな...
-
ptipi.dll に関し未解決問題
-
VBAエディタのコード画面で、カ...
-
[マインクラフト] Javaが64bit...
-
M365にアップデートしてからコ...
-
VB.NET xdoc2txtをつかってPDF...
-
プロシージャエントリポイント ...
-
WIN10で常にフォームを手前に
-
メイクファイルからdllを生成す...
-
エクセル マクロで指定フォルダ...
おすすめ情報
マクロ初心者で、検索すると質問のマクロを見つけました。
タスクバーのフォルダを開くマクロを探したのですが、
うまく見つけることが、できませんでした。
エクスプローラで開く目的は特に無いです。