文档章节

通过 SHGetSpecialFolderLocation、SHGetPathFromIDList 函数获取常用路径

涂孟超
 涂孟超
发布于 2014/09/26 15:31
字数 346
阅读 7
收藏 0
本例效果图:



代码文件:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses ShlObj; {SHGetSpecialFolderLocation、SHGetPathFromIDList 函数来自这个单元}

{获取常用路径的函数}
function GetPath(FID: Integer): string;
var
  pidl: PItemIDList;
  path: array[0..MAX_PATH] of Char;
begin
  SHGetSpecialFolderLocation(0, FID, pidl);
  SHGetPathFromIDList(pidl, path);
  Result := path;
end;

{测试时, 我把 SHGetSpecialFolderLocation 函数需要的参数定义成了一个常数数组}
const
  arr: array[0..57] of Integer = (
    CSIDL_DESKTOP                 , { = $0000 }
    CSIDL_INTERNET                , { = $0001 }
    CSIDL_PROGRAMS                , { = $0002 }
    CSIDL_CONTROLS                , { = $0003 }
    CSIDL_PRINTERS                , { = $0004 }
    CSIDL_PERSONAL                , { = $0005 }
    CSIDL_FAVORITES               , { = $0006 }
    CSIDL_STARTUP                 , { = $0007 }
    CSIDL_RECENT                  , { = $0008 }
    CSIDL_SENDTO                  , { = $0009 }
    CSIDL_BITBUCKET               , { = $000a }
    CSIDL_STARTMENU               , { = $000b }
    CSIDL_MYDOCUMENTS             , { = $000c }
    CSIDL_MYMUSIC                 , { = $000d }
    CSIDL_MYVIDEO                 , { = $000e }
    CSIDL_DESKTOPDIRECTORY        , { = $0010 }
    CSIDL_DRIVES                  , { = $0011 }
    CSIDL_NETWORK                 , { = $0012 }
    CSIDL_NETHOOD                 , { = $0013 }
    CSIDL_FONTS                   , { = $0014 }
    CSIDL_TEMPLATES               , { = $0015 }
    CSIDL_COMMON_STARTMENU        , { = $0016 }
    CSIDL_COMMON_PROGRAMS         , { = $0017 }
    CSIDL_COMMON_STARTUP          , { = $0018 }
    CSIDL_COMMON_DESKTOPDIRECTORY , { = $0019 }
    CSIDL_APPDATA                 , { = $001a }
    CSIDL_PRINTHOOD               , { = $001b }
    CSIDL_LOCAL_APPDATA           , { = $001c }
    CSIDL_ALTSTARTUP              , { = $001d }
    CSIDL_COMMON_ALTSTARTUP       , { = $001e }
    CSIDL_COMMON_FAVORITES        , { = $001f }
    CSIDL_INTERNET_CACHE          , { = $0020 }
    CSIDL_COOKIES                 , { = $0021 }
    CSIDL_HISTORY                 , { = $0022 }
    CSIDL_COMMON_APPDATA          , { = $0023 }
    CSIDL_WINDOWS                 , { = $0024 }
    CSIDL_SYSTEM                  , { = $0025 }
    CSIDL_PROGRAM_FILES           , { = $0026 }
    CSIDL_MYPICTURES              , { = $0027 }
    CSIDL_PROFILE                 , { = $0028 }
    CSIDL_SYSTEMX86               , { = $0029 }
    CSIDL_PROGRAM_FILESX86        , { = $002a }
    CSIDL_PROGRAM_FILES_COMMON    , { = $002b }
    CSIDL_PROGRAM_FILES_COMMONX86 , { = $002c }
    CSIDL_COMMON_TEMPLATES        , { = $002d }
    CSIDL_COMMON_DOCUMENTS        , { = $002e }
    CSIDL_COMMON_ADMINTOOLS       , { = $002f }
    CSIDL_ADMINTOOLS              , { = $0030 }
    CSIDL_CONNECTIONS             , { = $0031 }
    CSIDL_COMMON_MUSIC            , { = $0035 }
    CSIDL_COMMON_PICTURES         , { = $0036 }
    CSIDL_COMMON_VIDEO            , { = $0037 }
    CSIDL_RESOURCES               , { = $0038 }
    CSIDL_RESOURCES_LOCALIZED     , { = $0039 }
    CSIDL_COMMON_OEM_LINKS        , { = $003a }
    CSIDL_CDBURN_AREA             , { = $003b }
    CSIDL_COMPUTERSNEARME         , { = $003d }
    CSIDL_PROFILES                  { = $003e }
  );

{测试}
procedure TForm1.FormCreate(Sender: TObject);
var
  i: Integer;
  s: string;
begin
  Memo1.Clear;
  for i := 0 to Length(Arr) - 1 do
  begin
    s := GetPath(Arr[i]);
    if s<>'' then Memo1.Lines.Add(Format('%d:'#9'%s', [Arr[i], s]));
  end;
end;

end.

 
 
 
 
 

 

 

  
窗体文件:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 318
  ClientWidth = 465
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object Memo1: TMemo
    Left = 0
    Top = 0
    Width = 465
    Height = 318
    Align = alClient
    Lines.Strings = (
      'Memo1')
    ScrollBars = ssBoth
    TabOrder = 0
    ExplicitWidth = 409
  end
end

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/09/23/1297323.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
VC 为程序创建快捷方式的详细讲解

有时候,为了方便用户使用我们编写的程序,需要在桌面,快速启动或程序组中创建程序的快捷方式。下面就介绍在VC下如何为程序创建快捷方式。 一.得到桌面,快速启动或程序组的路径 这里介绍二...

长平狐
2012/12/10
86
0
VC 为程序创建快捷方式的详细讲解

有时候,为了方便用户使用我们编写的程序,需要在桌面,快速启动或程序组中创建程序的快捷方式。下面就介绍在VC下如何为程序创建快捷方式。 一.得到桌面,快速启动或程序组的路径 这里介绍二...

彭博
2012/04/12
349
0
获取Windows系统特殊性目录路径

获取Windows系统特殊性目录路径 uses ShlObj 获取方法: function GetPath(FID: Integer): string; var pidl: PItemIDList; path: array[0..MAX_PATH] of Char; begin SHGetSpecialFolderLoc......

vga
2014/11/14
0
0
vc打开文件夹浏览框显示指定位置

.h下面 private: static int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData); .cpp下面 回调函数 int CALLBACK CSystemSetDlg::BrowseCallbackProc(HWND hw......

barsoom
2012/11/26
0
0
VC++ 打开文件夹,保存文件等对话框的调用

VC++ 打开文件夹,保存文件等对话框的调用 一。打开文件夹: 1。CFileDialog实现 CFileDialog hFileDlg(true,NULL , NULL, OFNFILEMUSTEXIST | OFNREADONLY | OFNPATHMUSTEXIST, TEXT("驱动文......

barsoom
2012/11/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Hibernate SQLite方言

以下代码有参考过github上国外某位大佬的,在发文的最新稳定版Hibernate上是可用的,有时间再仔细分析一下 import org.hibernate.dialect.Dialect;import org.hibernate.dialect.function.S...

CHONGCHEN
今天
3
0
CentOS 7 MariaDB搭建主从服务器

本文编写环境为CentOS7。确保关闭SELinux,关闭防火墙或者防打开指定端口。具体信息如下 #master[root@promote ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [r...

白豆腐徐长卿
今天
10
0
介绍python中运算符优先级

下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合)。这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部...

问题终结者
今天
3
0
Spring Boot 2.x基础教程:快速入门

简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot来让...

程序猿DD
昨天
10
0
SpringSecurity认证流程源码级详解

SpringSecurity认证流程源码级详解 认证流程说明 认证结果如何在多个请求之间共享 获取认证用户信息

chendom
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部