关于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操作,请各位高手们,版主们指导一下使用方法,谢谢!
忘记说了,我使用的是win7操作系统64位 Au3Info.exe查看
桌面:SysListView321
资源管理器中:SysTreeView321
故:将代码中的 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:31 编辑
win7操作系统64位PC版本,测试通过, 资源管理器左侧框,鼠标选中的情况下,按O键显示文件名。
你的代码左侧是可以正常运行,但我是想在右侧主窗口来用,右侧是DirectUIHWND3类,不知道怎么操作 本帖最后由 floor6ggg 于 2020-2-9 23:41 编辑
DirectUIHWND 貌似没有直接现成的函数代码可以 直接操作,猜想 dllcall应该可以实现,但本人对这一块没有入门不熟悉!!!!应该有多种解法的,能力有限,自己写不出来………………………期待高人的解法…………
外网找了一下,发现如果要实现楼主的目标,也可以采用其他的方式:ObjCreate("Shell.Application")
本帖最后由 floor6ggg 于 2020-2-9 23:58 编辑
效果图如图所示: 本帖最后由 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
这个ObjCreate("Shell.Application")的方法,在资源管理器是可以,但没有支持桌面操作。呵呵,慢慢研究着,期待其它高手!
页:
[1]