在xp系统下‘我的文档‘的路径问题(35分)

J

jzg2002

Unregistered / Unconfirmed
GUEST, unregistred user!
在xp系统下‘我的文档‘的路径中有此台机器的用户名,而不向98系统下的'我的文档'的
路径就是C:/My Documents;我现在要调用xp系统下的‘我的文档‘中的文件,但我
在这台机器上指定的‘我的文档’的路径,在另一台机器上就因路径不同而不能使用,那位
朋友帮我解决一下这个问题,使xp下的‘我的文档’的路径在每一台机器上通用
 
type
DEF_REC_SHELLFOLDER_INFO=record
AdminTools :STRING;
AppData :STRING;
Cache :STRING;
CDBurning :STRING;
Cookies :STRING;
Desktop :STRING;
Favorities :STRING;
LocalAppData :STRING;
LocalSetting :STRING;
Personal :STRING;
MyDocuments :STRING;
MyMuisc :STRING;
MyPictures :STRING;
MyVideo :STRING;
NetHood :STRING;
PrintHood :STRING;
Programs :STRING;
Recent :STRING;
SendTo :STRING;
StartMenu :STRING;
StartUp :STRING;
Templates :STRING;
AllUserAdminTools :STRING;
AllUserDesktop :STRING;
AllUserAppData :STRING;
AllUserFavorites :STRING;
AllUserPrograms :STRING;
AllUserStartMenu :STRING;
AllUserStartUp :STRING;
AllUserTemplates :STRING;
AllUserMusic :STRING;
AllUserPictures :STRING;
AllUserVideo :STRING;
AllUserDocuments :STRING;
AllUserPersonal :STRING;
oInit :BOOL; END;




//-----------[SHELL FOLDER]-----------------------------------------------------------------------
FUNCTION FkShellFolderInit():BOOL;
VAR reg : TRegistry;
BEGIN
reg:=TRegistry.Create;
//[CURRENT USER]-------------------------------------[]
reg.RootKey:=HKEY_CURRENT_USER;
reg.OpenKey('Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders', false);
//[READ DATA]
PUB_REC_SHELLFOLDER.AdminTools:=reg.ReadString('Administrative Tools');
PUB_REC_SHELLFOLDER.AppData:=reg.ReadString('AppData');
PUB_REC_SHELLFOLDER.Cache:=reg.ReadString('Cache');
PUB_REC_SHELLFOLDER.CDBurning:=reg.ReadString('CD Burning');
PUB_REC_SHELLFOLDER.Cookies:=reg.ReadString('Cookies');
PUB_REC_SHELLFOLDER.Desktop:=reg.ReadString('Desktop');
PUB_REC_SHELLFOLDER.Favorities:=reg.ReadString('Favorities');
PUB_REC_SHELLFOLDER.LocalAppData:=reg.ReadString('Local AppData');
PUB_REC_SHELLFOLDER.LocalSetting:=reg.ReadString('Local Settings');
PUB_REC_SHELLFOLDER.Personal:=reg.ReadString('Personal');
PUB_REC_SHELLFOLDER.MyDocuments:=reg.ReadString('Personal');
PUB_REC_SHELLFOLDER.MyMuisc:=reg.ReadString('My Music');
PUB_REC_SHELLFOLDER.MyPictures:=reg.ReadString('My Pictures');
PUB_REC_SHELLFOLDER.MyVideo:=reg.ReadString('My Video');
PUB_REC_SHELLFOLDER.NetHood:=reg.ReadString('NetHood');
PUB_REC_SHELLFOLDER.PrintHood:=reg.ReadString('PrintHood');
PUB_REC_SHELLFOLDER.Programs:=reg.ReadString('Programs');
PUB_REC_SHELLFOLDER.Recent:=reg.ReadString('Recent');
PUB_REC_SHELLFOLDER.SendTo:=reg.ReadString('SentTo');
PUB_REC_SHELLFOLDER.StartMenu:=reg.ReadString('Start Menu');
PUB_REC_SHELLFOLDER.StartUp:=reg.ReadString('Startup');
PUB_REC_SHELLFOLDER.Templates:=reg.ReadString('Templates');
reg.CloseKey;
//[ALL USER ]-------------------------------------[]
reg.RootKey:= HKEY_LOCAL_MACHINE;
reg.OpenKey('Software/Microsoft/Windows/CurrentVersion/Explorer/Shell Folders', false);
PUB_REC_SHELLFOLDER.AllUserAdminTools:=reg.ReadString('Common Administrative Tools');
PUB_REC_SHELLFOLDER.AllUserDesktop:=reg.ReadString('Common Desktop');
PUB_REC_SHELLFOLDER.AllUserAppData:=reg.ReadString('Common AppData');
PUB_REC_SHELLFOLDER.AllUserFavorites:=reg.ReadString('Common Favorites');
PUB_REC_SHELLFOLDER.AllUserPrograms:=reg.ReadString('Common Programs');
PUB_REC_SHELLFOLDER.AllUserStartMenu:=reg.ReadString('Common Start Menu');
PUB_REC_SHELLFOLDER.AllUserStartUp:=reg.ReadString('Common Startup');
PUB_REC_SHELLFOLDER.AllUserTemplates:=reg.ReadString('Common Templates');
PUB_REC_SHELLFOLDER.AllUserMusic:=reg.ReadString('CommonMusic');
PUB_REC_SHELLFOLDER.AllUserPictures:=reg.ReadString('CommonPictures');
PUB_REC_SHELLFOLDER.AllUserVideo:=reg.ReadString('CommonVideo');
PUB_REC_SHELLFOLDER.AllUserDocuments:=reg.ReadString('Personal');
reg.CloseKey; reg.Free; PUB_REC_SHELLFOLDER.oInit:=TRUE;
END;


PUB_REC_SHELLFOLDER.MyDocuments 就是了


 
兄弟,难道不行?????????????
 
编译不了呀,好像很复杂
 
PUB_REC_SHELLFOLDER,编译时说没有定义
 
收藏先
没定义就定义一下吧,应该是一个DEF_REC_SHELLFOLDER_INFO类型的吧。
 

VAR PUB_REC_SHELLFOLDER:DEF_REC_SHELLFOLDER_INFO;
定义一下不就可以了。
 
PUB_REC_SHELLFOLDER.MyDocuments 该如何使用,我把它放到了buttonclick中,但出错了
 
相当于一个字符串变量
注意: PUB_REC_SHELLFOLDER 是全局变量
VAR PUB_REC_SHELLFOLDER:DEF_REC_SHELLFOLDER_INFO;

例如:ShowMessage(PUB_REC_SHELLFOLDER.MyDocuments);
 
有现成的Shell API 可用, 何需操纵注册表? [:)]
MSDN 上的定义:
BOOL SHGetSpecialFolderPath(
HWND hwndOwner, // 窗口句柄
LPTSTR lpszPath, // 返回字串的地址
int nFolder, // CSIDL
BOOL fCreate // 如果为真,且目录不存在,则创建之
);

使用该函数你需要 uses ShlObj 单元
例:
function GetMyDocumentPath: string;
var
path: array[0..MAX_PATH] of char;
begin
if SHGetSpecialFolderPath(0,path,CSIDL_PERSONAL,true) then
Result:=string(path);
end;
 
编译通过了,ShowMessage(PUB_REC_SHELLFOLDER.MyDocuments);但什么消息也没有呀,
我想用filelistbox显示‘我的文档’的内容,在98下很容易实现,但在xp下无法实现,
因为路径在没一台机器上都是不一样的
 
接受答案了.
 
顶部