找回密码
 加入
搜索
查看: 930|回复: 3

[系统综合] [已解决]dllcall操作Everything.dll获取文件完整路径名

[复制链接]
发表于 2022-4-1 10:58:30 | 显示全部楼层 |阅读模式
本帖最后由 king8462 于 2022-4-1 12:38 编辑

想要获取指定搜索匹配的完整文件路径名,看了之前的帖子(https://www.autoitx.com/thread-38310-1-1.html),不会写Everything_GetResultFullPathName语法,请高手帮忙,谢谢!


修改了zzwwdd的帖子代码,虽然可以实现目的,但没有直接用这个Everything_GetResultFullPathName函数方便.

;先把 everthing.dll 放在相同目录下
#include <GUIConstantsEx.au3>
#include <GuiEdit.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>
#include <GuiMenu.au3>
#include <WinAPI.au3>

Local $wjm = ClipGet()
$dll = DllOpen("Everything64.dll")
$result = DllCall($dll, "none", "Everything_SetSearchW", "wstr", $wjm)
$result = DllCall($dll, "none", "Everything_QueryW", "BOOL", true)
;Local $jg = DllCall($dll, "DWORD", "Everything_GetNumFileResults")
Local $jg = DllCall($dll, "DWORD", "Everything_GetNumResults")
Local $mz = DllCall($dll, "wstr", "Everything_GetResultFileNameW","int","0") ;DWORD Everything_GetNumResults(void);
;MsgBox(0, 'test', $mz[0])
If $jg[0]>=1 Then

;MsgBox(0, 'test', $jg[0])

$test = DllCall($dll, "wstr", "Everything_GetResultPath","int",0) ;DWORD Everything_GetNumResults(void);
;MsgBox(0,"",$test[0])

DllClose($dll)
ShellExecute ($test[0]&'\'& $mz[0],@SW_SHOWMAXIMIZED)
EndIf


这是百度的AHK的代码:
  •   ; 两种方式获取文件的完整路径,推荐后面那种
  •   path:=DllCall(dll "Everything_GetResultPath", "int",i, "Str")
  •   name:=DllCall(dll "Everything_GetResultFileName", "int",i, "Str")
  •   DllCall(dll "Everything_GetResultFullPathName", "int",i, "Str",fullname, "int",255)




下面是官方帮助文档内容:
Everything_GetResultFullPathName函数检索可见结果的完整路径和文件名。


句法
DWORD Everything_GetResultFullPathName(
    DWORD index,
    LPTSTR lpString,
    DWORD nMaxCount
);
参数
指数

可见结果的从零开始的索引。

lpString [出]

指向将接收文本的缓冲区的指针。如果字符串与缓冲区一样长或更长,则字符串将被截断并以 NULL 字符终止。

nMaxCount

指定要复制到缓冲区的最大字符数,包括 NULL 字符。如果文本超出此限制,则将其截断。
// 获取第一个可见结果的完整路径和文件名。
Everything_GetResultFullPathName(0,buf,sizeof(buf) / sizeof(TCHAR));

发表于 2022-4-1 11:21:06 | 显示全部楼层

Local $wjm = '1.txt';ClipGet()
$dll = DllOpen("Everything64.dll")
$result = DllCall($dll, "none", "Everything_SetSearchW", "wstr", $wjm)
$result = DllCall($dll, "none", "Everything_QueryW", "BOOL", True)
;Local $jg = DllCall($dll, "DWORD", "Everything_GetNumFileResults")
Local $jg = DllCall($dll, "DWORD", "Everything_GetNumResults")
Local $mz = DllCall($dll, "wstr", "Everything_GetResultFileNameW", "int", "0") ;DWORD Everything_GetNumResults(void);
;MsgBox(0, 'test', $mz[0])
If $jg[0] > 0 Then

        ;MsgBox(0, 'test', $jg[0])

        ;$test = DllCall($dll, "wstr", "Everything_GetResultPath", "int", 0) ;DWORD Everything_GetNumResults(void);
        ;MsgBox(0,"",$test[0])

        
        ;ShellExecute($test[0] & '\' & $mz[0], @SW_SHOWMAXIMIZED)
        
        For $iIndex = 1 To $jg[0]
                Local $aFile = DllCall($dll, 'dword', 'Everything_GetResultFullPathNameW', 'dword', $iIndex, 'wstr', '', 'DWORD', 0)
                ConsoleWrite('+ FilePath: ' & $aFile[2] & @CRLF)
        Next
EndIf
DllClose($dll)


评分

参与人数 1金钱 +10 收起 理由
king8462 + 10 很给力!

查看全部评分

发表于 2022-4-1 11:50:33 | 显示全部楼层
... 'dword', $iIndex - 1, ...

评分

参与人数 1金钱 +10 收起 理由
king8462 + 10 赞一个!

查看全部评分

 楼主| 发表于 2022-4-1 12:37:18 | 显示全部楼层
afan 发表于 2022-4-1 11:50
... 'dword', $iIndex - 1, ...

谢谢楼上两位大佬的帮助!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-3 23:05 , Processed in 0.071884 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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