lxz 发表于 2010-4-1 22:41:27

来学习了''''''

xwlzx 发表于 2010-4-2 13:02:49

回复 1# afan

afan真是厉害啊,高手是怎么练成啊!

hearton 发表于 2010-4-3 18:44:54

http://autoitx.com/forum.php?mod=viewthread&tid=13921
这个不就可以了吗?
可以给畸形文件夹设置ARSH属性呢

afan 发表于 2010-4-3 20:26:02

回复 64# hearton

这里只是讨论获取其短文件名,而且一楼早已有过方法(见附件),只是想能否有更好的方法~
就设置属性问题以下即可#include "_FileGetShortName.au3"
$file = 'c:\test.' ;畸形文件夹路径
$n = _FileGetShortName($file) ;获取短文件名
FileSetAttrib($n, '+r+a+s+h') ;增加RASH属性
Msgbox(0, 0, $file & ' 已消失,点击确定后出现~')
FileSetAttrib($n, '-r-a-s-h') ;去除RASH属性

卫和谐 发表于 2010-4-4 10:47:55

试用了一下新的函数,还是有问题。
如:要得到文件夹 Resource Hacker 3.5. 的短文件名,会得到返回值0!

afan 发表于 2010-4-4 13:35:50

回复 66# 卫和谐


    奇怪,我这正常返回

dtooboss 发表于 2010-4-6 12:02:53

本帖最后由 dtooboss 于 2010-4-6 12:12 编辑

        $result = DllCall("kernel32.dll", "int", "GetShortPathName", "str", $aFile, "str", "", "int", 260)       
        ConsoleWrite($result&@LF)上面的代码$result = 0 的是畸形文件夹可以用 if 判断    $result = 长文件名 $result = 短文件名。





短文件名命名是无规则的,因为短文件名可以被更改,提供个思路。

用 kernel32.dll 的 SetShortPathName 函数可以把畸形文件夹的短文件名直接改为 头两个字符+固定6个字符就行了,

这样只用读长文件名的头两个字符就能得到当前的短文件名了。

afan 发表于 2010-4-6 12:12:01

短文件名命名是无规则的,因为短文件名可以被更改,提供个思路。

用 kernel32.dll 的 SetShortPathName...
dtooboss 发表于 2010-4-6 12:02 http://www.autoitx.com/images/common/back.gif

貌似不能获取畸形文件夹的短名,请测试下,谢谢

dtooboss 发表于 2010-4-6 12:14:17

本帖最后由 dtooboss 于 2010-4-6 12:16 编辑

貌似不能获取畸形文件夹的短名,请测试下,谢谢
afan 发表于 2010-4-6 12:12 http://www.autoitx.com/images/common/back.gif

嗯,这个是底层核心函数了,只有通过得到长文件名的句柄,在取得段文件名的前面用 SetShortPathName 统一更改畸形文件夹的短文件名,就能得到了。

也就是说,我们更本先不用得到,你设置他是什么短文件名,他就变成什么了。

afan 发表于 2010-4-6 12:22:47

嗯,这个是底层核心函数了,只有通过得到长文件名的句柄,在取得段文件名的前面用 SetShortPathName 统 ...
dtooboss 发表于 2010-4-6 12:14 http://www.autoitx.com/images/common/back.gif


    你的意思是可以直接修改底层的短文件名,而不会改变长文件名?能否举例说明下$a = 'abc 3.5.'
RunWait(@ComSpec & ' /C Md "' & $a & '.\"', '', 0)如何获取 'abc 3.5.' 的短名,谢谢~

netegg 发表于 2010-4-6 12:28:49

afan, apiex里有这个函数

afan 发表于 2010-4-6 12:29:59

afan, apiex里有这个函数
netegg 发表于 2010-4-6 12:28 http://www.autoitx.com/images/common/back.gif


    哦,是哪个?

netegg 发表于 2010-4-6 12:41:17

回复 74# afan
_WinAPI_ShellGetFileInfo,看看这个行不行

dtooboss 发表于 2010-4-6 12:49:25

本帖最后由 dtooboss 于 2010-4-6 13:03 编辑

bool SetFileShortName(IntPtr hFile, string lpShortName);
Private Declare Function GetShortPathName Lib "kernel32.dll" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long
Private Declare Function SetFileShortName Lib "kernel32.dll" Alias "SetFileShortNameA" (ByVal handle As Long, ByVal lpszShortName As String) As Boolean

本来长文件名和短文件名就没有必然的对应关系(后6字符)
只是在 $mtf 目录结构里生成了一个标记而已,
用 kernel32.dll 的SetFileShortName 函数可以更改这种对应
可以理解为 line 或者类似快捷方式的形式,所以短文件名可以更改。
而长文件名却可以保持不变。

格式应该是DllCall("kernel32.dll", "bool", "SetShortPathName", "Int_Ptr", $hFile, "str", "xxxxxx~1"); $hFile 为文件句柄。

afan 发表于 2010-4-6 13:13:56

回复afan
_WinAPI_ShellGetFileInfo,看看这个行不行
netegg 发表于 2010-4-6 12:41 http://www.autoitx.com/images/common/back.gif


    貌似不行…
页: 1 2 3 4 [5] 6 7 8 9 10
查看完整版本: 获取畸形文件夹的短文件名