delphi 获得系统目录
利用Api函数,现在我介绍两个Api函数,利用他们就可以轻松简单的获取这些特殊系统目录。
Function SHGetSpecialFolderLocation(hwndOwner: HWND; nFolder: Integer;
var ppidl: PItemIDList): HResult; stdcall;
Function SHGetPathFromIDList(pidl: PItemIDList; pszPath: PChar): BOOL;stdcall;
其中由nFolder参数指定的就是各个特殊系统目录:
CSIDL_DESKTOP:毫无疑问这就是桌面;
CSIDL_DRIVERS:我的电脑;
CSIDL_FAVORITES:收藏夹;
CSIDL_STARTUP:开始菜单;
CSIDL_NETWORK:网上邻居; uses shlobj;
var
pitem:PITEMIDLIST;
s:string;
begin
shGetSpecialFolderLocation(handle,CSIDL_DESKTOP,pitem);
setlength(s,100);
shGetPathFromIDList(pitem,pchar(s));
end; vName:= copy(s,1, Length(s)-pos('桌面',s)-15)+'\'; //////减15是为了减去 后面的 “#0#0.......” --------------------------------------------------------------------------------------------------------------------------------- 方法一:通过访问注册表
uses registry;
procedure Tsysdirfrm.FormShow(Sender: TObject);
var reg:Tregistry;
begin
reg:=Tregistry.create; reg.RootKey:=HKEY_USERS;
reg.OpenKey('\.DEFAULT\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders',false);
listbox1.items.add(reg.readstring('Desktop')) ;//桌面目录
listbox1.items.add(reg.readstring('Fonts'));//字体目录
listbox1.items.add(reg.readstring('NetHood')) ;//网上邻居
listbox1.items.add(reg.readstring('Personal'));//我的文档目录
listbox1.items.add(reg.readstring('Programs'));//开始菜单程序目录
listbox1.items.add(reg.readstring('Recent')) ;//存放用户最近访问文件快捷方式的目录
listbox1.items.add(reg.readstring('SendTo'));//发送到目录
listbox1.items.add(reg.readstring('Start Menu'));//开始菜单目录
listbox1.items.add(reg.readstring('Startup'));//开始菜单启动项目录
listbox1.items.add(reg.readstring('Favorites')) ;//收藏夹目录
listbox1.items.add(reg.readstring('History'));//网页历史目录
listbox1.items.add(reg.readstring('Cookies'));//cookies目录
listbox1.items.add(reg.readstring('Cache')) ;//缓存目录
listbox1.items.add(reg.readstring('AppData'));//应用程序数据目录
listbox1.items.add(reg.readstring('PrintHood')) ;//打印目录
reg.CloseKey ;
reg.free;
end; 方法二:使用API函数SHGetSpecialFolderLocation和SHGetPathFromIDList
uses shlobj;
procedure TForm1.Button1Click(Sender: TObject);
var pidl: PItemIDList;
FavPath: array[0..MAX_PATH] of char;
temp:array [1..17] of integer; i:byte;
begin temp[1]:=CSIDL_DESKTOP; //桌面
temp[2]:=CSIDL_DESKTOPDIRECTORY ; //桌面目录
temp[3]:=CSIDL_FONTS ; //字体目录
temp[4]:=CSIDL_NETHOOD ; //网络邻居
temp[5]:=CSIDL_PERSONAL ; //我的文档目录
temp[6]:=CSIDL_PROGRAMS ; //开始菜单程序目录
temp[7]:=CSIDL_RECENT ; //存放用户最近访问文件快捷方式的目录
temp[8]:=CSIDL_SENDTO ; //"发送到"目录
temp[9]:=CSIDL_STARTMENU ; //开始菜单目录
temp[10]:=CSIDL_STARTUP ; //开始菜单启动项目录
temp[11]:=CSIDL_FAVORITES ; //收藏夹目录
for i:=1 to 17 do
begin
SHGetSpecialFolderLocation(Handle, temp[i], pidl);
SHGetPathFromIDList(pidl, favpath);
listbox1.Items.Add(StrPas(FavPath));
end;
end; ------------------------------------------------------------------------------------------------------------------- uses shlobj; procedure Tgongzhi1.dsbkSpeedButton1Click(Sender: TObject);
var vPath, vName,s: string;
pitem:PITEMIDLIST;
begin
if DBGrid1.Enabled=False then
MessageBox(handle,'请先查询再进行导出操作!','友情提醒:',mb_ok+MB_ICONASTERISK)
else
begin if Application.MessageBox('确定要导出EXCEL表? ','友情提醒:',MB_YESNO+MB_ICONQUESTION) = IDYES then
begin
shGetSpecialFolderLocation(handle,CSIDL_DESKTOP,pitem);
setlength(s,100);
shGetPathFromIDList(pitem,pchar(s));
vPath:= copy(s,1, Length(s)-pos('桌面',s)-15)+'\';
//vPath := 'C:\Documents and Settings\Administrator\桌面\';
vName :='工资汇总'+formatdatetime('yyyy-mm-dd',DateTimePicker1.date)+'~'+formatdatetime('yyyy-mm-dd',DateTimePicker2.date);
if DBGrid1.Enabled=False then
MessageBox(handle,'请先查询再进行删除操作!','友情提醒:',mb_ok+MB_ICONASTERISK)
else
savexls(ADOQuery1, VName, vPath);
MessageBox(handle,PChar('文件: '+vName+'; 路径:'+vPath+'; 导出成功!'),'友情提醒:',mb_ok+MB_ICONASTERISK)
end;
end;
end;
delphi 获得系统目录的更多相关文章
- 【转】Delphi利用系统环境变量获取常用系统目录
Delphi code //譬如 %WINDIR% 是表示系统目录的系统变量, 可以这样获取: var s: string; begin s := GetEnvironmentVariable('WI ...
- 转:Delphi 6 实用函数
来自: daocaoren0824, 时间: -- ::, ID: 再给你一份 程序员实用函数 {▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎▎} {▎ ▎} {▎ 大 ...
- delphi cmd
今天看到有人在问用代码执行CMD命令的问题,就总结一下用法,也算做个备忘. Delphi中,执行命令或者运行一个程序有2个函数,一个是winexec,一个是shellexecute.这两个大家应该都见 ...
- delphi中midas是什么
Delphi中MIDAS到底是什么呢?和他相关组件是什么呢? MIDAS(Multitiered Distributed Application Services)多层分布式应用服务. Del ...
- Delphi 的知识体系
第一部分 快速开发的基础 第1章 Delphi 5下的Windows编程 1 1.1 Delphi产品家族 1 1.2 Delphi是什么 3 1.2.1 可视化开 ...
- Delphi 使用CHM文件制作系统帮助文档(上下文感知帮助的制作)
一.基础知识简介 使用帮助提示窗口或状态栏只能提供简单.单一的帮助,无法对某一模块或应用程序整体提供系统的 帮助,因此运行Windows应用程序,需要帮助时一般都可以通过执行帮助菜单获 ...
- Delphi制作DLL
一.开使你的第一个DLL专案 1.File->Close all->File->New﹝DLL﹞ 代码: //自动产生Code如下 library Project2; //这有段废话 ...
- Delphi 7连接MySql 5.5.15
原文:http://blog.csdn.net/akof1314/article/details/6822902/ 网上有很多关于Delphi连接MySql数据库的文章,在这里,我只记录下自己测试过的 ...
- DELPHI下API简述(1800个API)
DELPHI下API简述 http://zero.cnbct.org/show.asp?id=144 auxGetDevCaps API 获取附属设备容量 auxGetNumDevs API 返回附属 ...
随机推荐
- jedate(日期插件)
首先要引入JQuery,然后引入jedate.css和jedate.js(注:需要把下载好的jedate文件夹整个的放在项目中,不然图标无法显示) 没有把整个文件夹放进去的效果 ...
- 线程池——Executors
一 Executor框架 为了更好地控制多线程,JDK提供了一套线程框架Executor,帮助开发人员有效的进行线程控制.它们都在java.util.concurrent包中,是JDK并发包的核心.其 ...
- CSS文本垂直居中显示
<style> .sty1 { width: 300px; height: 200px; background-color: black; text-align: center; colo ...
- js过滤字符串中的html标签
var str = 'add<a>daad</a><p>fsdada</p>' str.replace(/<[^<>]+>/g, ...
- go声明和初始化
go声明和初始化 当我们第一次看见变量和声明时,我们仅仅看见一些内置的类型,比如整型和字符串.现在我们将学习结构体,并且我们会深入学习包括指针的内容. 通过一种最简单的方式去创建一个结构体值类型: g ...
- 【NIO】MappedByteBuffer-内存映射文件 I/O
操作系统会在负责执行映射,用于操作大文件 java io操作中通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理大文件:java nio中引入了一种基于M ...
- 骚操作:c++如何用goto便捷地写人工栈?
在如今所有NOI系列赛事已经开全栈的时势下,人工栈已经离我们很远很远. 所以这博客就是我弄着玩的. 首先我们要清楚的是c++的goto写法: loop:; - goto loop; 在运行到goto时 ...
- php-异步上传插件
http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html
- 数学二分——cf700A
二分答案 #include<bits/stdc++.h> using namespace std; #define ll long long int n,l,v1,v2,k; double ...
- Openstack组件实现原理 — Glance架构(V1/V2)
目录 目录 Glance 安装列表 Glance Image service Image service 的组件 Glance-Api Glance-Registry Glance-db Image ...