分類:[.NET 全般]
2017/12/28(Thu) 12:24:27 編集(投稿者)
2017/12/28(Thu) 12:24:23 編集(投稿者)
2017/12/28(Thu) 12:17:19 編集(投稿者)
<pre><pre>2017/12/28(Thu) 12:15:25 編集(投稿者)
<pre><pre>2017/12/28(Thu) 12:14:31 編集(投稿者)
<pre><pre>あるファイルパスを指定し、
そのファイルパスが入ったフォルダーがエクスプローラー上で開かれていなければ、
そのフォルダを開き、
既にそのフォルダーが開かれていなければ、
そのウインドウを前面に表示するプログラムを作成しました。
このプログラムで一応動作するのですが、
このままだと、指定したフォルダーが複数開かれていた場合、
それら全てが前面表示されてしまいます。
どれが一つだけで良いので、
'Thread.Sleep(200)
'Marshal.ReleaseComObject(win)
'Exit Sub
というところのコメントアウトを外せば、うまくいくはずなのですが
なぜかこのコメントアウトを外すとウインドウが前面表示されません。
一体何が原因でしょうか?
Sub Folder_Open_Check2(filepath$)
Dim folpath As String = Get_Parent(filepath)
If Len(folpath) = 2 Then
folpath &= "\"
End If
Dim wins As New SHDocVw.ShellWindows
For i As Integer = 0 To wins.Count - 1
Dim win As IWebBrowser2 = CType(wins.Item(i), IWebBrowser2)
If win Is Nothing Then Continue For
Dim Name As String = Path.GetFileNameWithoutExtension(win.FullName.ToString)
If Name.ToUpper() = "EXPLORER" Then
Dim oDc2 As String = win.LocationURL
If oDc2 <> "" Then
Dim u As New Uri(oDc2)
Dim Path2 As String = u.LocalPath + Uri.UnescapeDataString(u.Fragment)
If Path2 = folpath Then
SetForegroundWindow(CType(win.HWND, IntPtr))
’Thread.Sleep(200)
'Marshal.ReleaseComObject(win)
'Exit Sub
End If
End If
End If
Marshal.ReleaseComObject(win)
Next i
Process.Start("EXPLORER.EXE", "/select,""" & filepath & """")
End Sub
</pre></pre></pre></pre></pre></pre>