51CTO技术论坛_中国领先的IT技术社区's Archiver

感冒不好玩 发表于 2006-8-29 02:00

判断windows的Desktop及其它目录

使用API函数SHGetSpecialFolder。shlobj.h里有SHGetSpecialFolder的原型声明。这个函数可以帮我们找到windows的Desktop目录、启动目录、我的文档目录等。
#q#d-Nl'wBc | SHGetSpecialFolder需要三个参数。 第一个参数是HWND,它指定了"所有者窗口":在调用这个函数时可能出现的对话框或消息框。第二个参数是一个整数id,决定哪个目录是待查找目录,它的取值可能是: Q2@u d yhj.i-s

u\7U$j s2y'FYbP CSIDL_BITBUCKET 回收站
+I;n@0n$_;g!I"~ CSIDL_CONTROLS 控制面板
7vLlEj+M|gpo CSIDL_DESKTOP Windows 桌面desktop 5o'lm)\G
CSIDL_DESKTOPDIRECTORY desktop的目录 ;j.ix*l#y9y#L4v
CSIDL_DRIVES 我的电脑
ff)S1U6h;f7j CSIDL_FONTS 字体目录 @9e8i]N&WS&U
CSIDL_NETHOOD 网上邻居
v3U8T+t3o ]E CSIDL_NETWORK 网上邻居virtual folder
dN'] kNW]gAF*ue CSIDL_PERSONAL 我的文档 8Ow_8RDyn5lh
CSIDL_PRINTERS 打印机 7[/T7[7}t"v1`
CSIDL_PROGRAMS 程序组 %KyL:U.K;I
CSIDL_RECENT 大多数最近打开的文档列一
An#O1HN0nZ CSIDL_SENDTO “发送到”菜单项 Y/|D"[PS v p
CSIDL_STARTMENU 任务条启动菜单项 y4a!v V ~!CE"t
CSIDL_STARTUP 启动目录
Squ%~)Q R Ev CSIDL_TEMPLATES 临时文档
8` \x/x"`[$` s 最后一个参数是pidl地址。SHGetSpecialFolderLocation把地址写到pidl。 I2G"J,Z;so6x @s
下面的代码演示了怎样使用SHGetSpecialFolderLocation: m"rj#Q;Jx5t1?l_q1vx

ba2S{] { s;^ //----------------------------------------------------------------------
#}P | YI+IG void __fastcall TForm1::Button1Click(TObject *Sender)
.SE&E*]2TD {
|8Y3O8{ LK;} LPITEMIDLIST pidl;
9cAh n[ Mk LPMALLOC pShellMalloc;v7Kq~|1o
char szDir[MAX_PATH]; G5Q[]KG(o#i

v\~4R0t&F4Q.K if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
qs?%Y^@&M6a {
&v&G4]["U if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,6Y sGE I*F*WE
CSIDL_DESKTOPDIRECTORY,L.W W2T#O;Z:iJhG
&pidl)))V eP5O2U6D [5w3{
{
/S,gP-Njm.^-s // 如果成功返回trueB(R0U9ml7WP
if(SHGetPathFromIDList(pidl, szDir))2b2x}sr%MDP W(B
{
z w%U['{ Label1->Caption = szDir;-}/b[9p0[BXAy
}
5Ay T`9vCU _
j}2F$N t|&@ pShellMalloc->Free(pidl);h"l N rB
}
7U"W*o3idm
/}@$_6PD.d pShellMalloc->Release();AZp6F*E)}0f#j
}
q`z,^V }
UY.I IRL l //---------------------------------------------------------------------- A xL5IKG
注意: 有些目录是空的。有些特定的目录在这个文件系统上并没有一个相应的目录。

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.