热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

奇怪的问题:我改变注册表中屏保路经的设定,可是只有8.3之类的短文件名才有效,长文件名没有用!为什么?

我用的是Win2Kpro,用代码改变了注册表“HKEY_CURRENT_USER\ControlPanel\Desktop\”中的“ScreenSaveActive”为“1”,“SCRNSAVE.E
我用的是Win2Kpro,用代码改变了注册表“HKEY_CURRENT_USER\Control Panel\Desktop\”中的“ScreenSaveActive”为“1”,“SCRNSAVE.EXE”的值改写为windows根目录下的一个*.scr文件。这个屏保文件是用中文的,很长,比如“c:\windows\我的新屏保.scr”。

  可是打开桌面的“属性”来确认,发现并没有改变当前屏保,重启PC也没有改变。可手动改变当前屏保的话,“SCRNSAVE.EXE”的值变为“c:\windows\我的新~1.scr”。在代码中设定为这样的短文件名也马上更改了当前屏保!

  为什么?我怎么才能知道某个长文件名会变成什么样的短文件名?(我的新~1.scr? 我的新~2.scr? 我的新~3.scr?)

2 个解决方案

#1


Declare Function GetShortPathName Lib "kernel32" Alias "GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As String, ByVal cchBuffer As Long) As Long

获取指定文件的短路径名
Long,装载到lpszShortPath缓冲区的字符数量。如lpszShortPath的长度不足,不能容下文件名,就返回需要的缓冲区长度lpszLongPath ---  String,指定欲获取短路径名的那个文件的名字。可以是个完整路径,或者由当前目录决定

  lpszShortPath --  String,指定一个缓冲区,用于装载文件的短路径和文件名

  cchBuffer ------  Long,lpszShortPath缓冲区长度

#2


我怎么才能知道某个长文件名会变成什么样的短文件名?

在命令提示符下运行一下 dir /x就可以知道相应的短文件名了。

当然在程序里用GetShortPathName 就可以了。

推荐阅读
author-avatar
情感顾问世界
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有