m765555 发表于 2020-2-8 23:23:59

关于au3操作DirectUIHWND类的请教

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操作,请各位高手们,版主们指导一下使用方法,谢谢!

m765555 发表于 2020-2-8 23:26:41

忘记说了,我使用的是win7操作系统64位

floor6ggg 发表于 2020-2-9 00:16:53

Au3Info.exe查看
桌面:SysListView321
资源管理器中:SysTreeView321

floor6ggg 发表于 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

floor6ggg 发表于 2020-2-9 00:28:13

本帖最后由 floor6ggg 于 2020-2-9 00:31 编辑

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

m765555 发表于 2020-2-9 14:53:56

你的代码左侧是可以正常运行,但我是想在右侧主窗口来用,右侧是DirectUIHWND3类,不知道怎么操作

floor6ggg 发表于 2020-2-9 23:32:07

本帖最后由 floor6ggg 于 2020-2-9 23:41 编辑

DirectUIHWND 貌似没有直接现成的函数代码可以 直接操作,猜想 dllcall应该可以实现,但本人对这一块没有入门不熟悉!!!!应该有多种解法的,能力有限,自己写不出来………………………期待高人的解法…………
外网找了一下,发现如果要实现楼主的目标,也可以采用其他的方式:ObjCreate("Shell.Application")

floor6ggg 发表于 2020-2-9 23:39:31

本帖最后由 floor6ggg 于 2020-2-9 23:58 编辑

效果图如图所示:

floor6ggg 发表于 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('','')
$hWnd_DirectUIHWND = ControlGetHandle($hWnd,'','')
$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

m765555 发表于 2020-2-14 21:07:46

这个ObjCreate("Shell.Application")的方法,在资源管理器是可以,但没有支持桌面操作。呵呵,慢慢研究着,期待其它高手!
页: [1]
查看完整版本: 关于au3操作DirectUIHWND类的请教