找回密码
 加入
搜索
查看: 2297|回复: 9

[AU3基础] 关于au3操作DirectUIHWND类的请教

[复制链接]
发表于 2020-2-8 23:23:59 | 显示全部楼层 |阅读模式
HotKeySet("o", "GetFocusedFullPath")

Func GetFocusedFullPath()
        $ListViewHWnd = ControlGetHandle("", "", "SysListView321")
        $ItemSelectedId = ControlListView("", "", $ListViewHWnd, "GetSelected")
        $ItemText = ControlListView("", "", $ListViewHWnd, "GetText", $ItemSelectedId)
        $Path = ControlGetText("", "", "Edit1")
        MsgBox(0, "", $Path & $ItemText)
EndFunc   ;==>GetFocusedFullPath

While 1
        Sleep(1000)
WEnd
以上代码是从论坛中找的某高人的代码,它可以在鼠标选中的情况下,按O键显示文件名。
但我用到资源管理器中,比如我的电脑中,打开D盘后,执行后不能显示文件名,是空,
我观察了一下,在桌面运行是SysListView321类的操作,但在资源管理器中是DirectUIHWND类的操作。
查了些资料,能力有限,还是没办法改为DirectUIHWND操作,请各位高手们,版主们指导一下使用方法,谢谢!
 楼主| 发表于 2020-2-8 23:26:41 | 显示全部楼层
忘记说了,我使用的是win7操作系统64位
发表于 2020-2-9 00:16:53 | 显示全部楼层
Au3Info.exe查看
桌面:SysListView321
资源管理器中:SysTreeView321
发表于 2020-2-9 00:18:47 | 显示全部楼层
故:将代码中的 list  全部更改为: tree,   即可:
HotKeySet("o", "GetFocusedFullPath")

Func GetFocusedFullPath()
        $ListViewHWnd = ControlGetHandle("", "", "SysTreeView321");SysListView321")
        $ItemSelectedId = ControlTreeView("", "", $ListViewHWnd, "GetSelected");ControlListView("", "", $ListViewHWnd, "GetSelected")
        $ItemText = ControlTreeView("", "", $ListViewHWnd, "GetText", $ItemSelectedId);ControlListView("", "", $ListViewHWnd, "GetText", $ItemSelectedId)
        $Path = ControlGetText("", "", "Edit1")
        MsgBox(0, "", $Path & $ItemText)
EndFunc   ;==>GetFocusedFullPath

While 1
        Sleep(1000)
WEnd

发表于 2020-2-9 00:28:13 | 显示全部楼层
本帖最后由 floor6ggg 于 2020-2-9 00:31 编辑

win7操作系统64位PC版本,测试通过,           资源管理器左侧框,鼠标选中的情况下,按O键显示文件名。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2020-2-9 14:53:56 | 显示全部楼层
你的代码左侧是可以正常运行,但我是想在右侧主窗口来用,右侧是DirectUIHWND3类,不知道怎么操作
发表于 2020-2-9 23:32:07 | 显示全部楼层
本帖最后由 floor6ggg 于 2020-2-9 23:41 编辑

DirectUIHWND 貌似没有直接现成的函数代码可以 直接操作,猜想 dllcall应该可以实现,但本人对这一块没有入门不熟悉!!!!应该有多种解法的,能力有限,自己写不出来………………………期待高人的解法…………
外网找了一下,发现如果要实现楼主的目标,也可以采用其他的方式:ObjCreate("Shell.Application")
发表于 2020-2-9 23:39:31 | 显示全部楼层
本帖最后由 floor6ggg 于 2020-2-9 23:58 编辑

效果图如图所示:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2020-2-9 23:46:26 | 显示全部楼层
本帖最后由 floor6ggg 于 2020-2-9 23:54 编辑

win7系统PC版本测试通过:AutoIt(AU3) v3.3.7.15
HotKeySet("o", "GetFocusedFullPath")

Func GetFocusedFullPath()
$hWnd = WinGetHandle('[class:CabinetWClass]','')
$hWnd_DirectUIHWND = ControlGetHandle($hWnd,'','[CLASS:DirectUIHWND; INSTANCE:3]')
$oSHFolderView=_ObjectSHFolderViewFromWin($hWnd)
If Not @error Then    
    $sFileToSelect=$oSHFolderView.FocusedItem.Name
        $p=$oSHFolderView.FocusedItem.path
        MsgBox(0,'选择的是: ',$sFileToSelect& @CRLF &$p)
EndIf 
EndFunc   ;==>GetFocusedFullPath

While 1
        Sleep(1000)
WEnd

Func _ObjectSHFolderViewFromWin($hWnd)
    If Not IsHWnd($hWnd) Then Return SetError(1,0,0)
    Local $oShell,$oShellWindows,$oIEObject,$oSHFolderView
    $oShell=ObjCreate("Shell.Application")
    If Not IsObj($oShell) Then Return SetError(2,0,0)

;   Get a 'ShellWindows Collection' object
    $oShellWindows = $oShell.Windows()
    If Not IsObj($oShellWindows) Then Return SetError(3,0,0)

;   Iterate through the collection - each of type 'InternetExplorer' Object
    For $oIEObject In $oShellWindows
        If $oIEObject.HWND = $hWnd Then
            ; InternetExplorer->Document = ShellFolderView object
            $oSHFolderView=$oIEObject.Document
            If IsObj($oSHFolderView) Then Return $oSHFolderView
            Return SetError(4,0,0)
        EndIf
    Next

    Return SetError(-1,0,0)
EndFunc

 楼主| 发表于 2020-2-14 21:07:46 | 显示全部楼层
这个ObjCreate("Shell.Application")的方法,在资源管理器是可以,但没有支持桌面操作。呵呵,慢慢研究着,期待其它高手!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-26 04:47 , Processed in 0.074851 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表