繁体   English   中英

如何将Windows资源管理器窗口设置为活动窗口

[英]How to set a windows explorer window as the active window

我试图在完成后启动一个宏来选择或激活Windows资源管理器窗口,如果找不到它,则打开窗口。 目前它确实在打开时找到窗口句柄(保存为“窗口”),但它不会激活该窗口!

Private Declare Function FindWindow Lib "user32" Alias _
    "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long

Private Declare Function BringWindowToTop Lib "user32" (ByVal hWnd As Long) As Long

Dim directory As String
directory = "C:\...\practice contracts\"

Dim directorySplit() As String
directorySplit = Split(directory, "\")

'--the rest of the macro--   

Dim window As Long
window = FindWindow("CabinetWClass", directorySplit(UBound(directorySplit) - 1))

If window <> 0 Then
    BringWindowToTop window
Else
    Shell "explorer.exe " & directory, vbNormalFocus
End If

我也尝试过AppActivate directorySplit(UBound(directorySplit) - 1)而不是FindWindow但它也会找到但不会激活窗口。 我可以告诉它找到窗口及其句柄,因为如果我关闭资源管理器窗口并尝试再次运行AppActivate ,它将引发错误。

任何帮助,将不胜感激。

你能试试吗?

它在两种情况下都适用于我。 刚试了一遍。

如果它在appactivate上出错,因为它找不到窗口,它会进入窗口打开部分并打开文件夹。

On Error GoTo WindowOpen
AppActivate directorySplit(UBound(directorySplit) - 1)
Exit Sub

WindowOpen:
    Shell "explorer.exe " & directory, vbNormalFocus

这是另一种解决方案 - 只需尝试关闭窗口(如果存在),然后从Shell调用同一窗口:

If Window <> 0 Then Windows(Window).Close
Shell "explorer.exe " & directory, vbNormalFocus

它应该非常强大,你可以通过VBA轻松改变焦点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM