利用ShlWapi.dll得到超长路径名的缩写格式

Delphi7获取Windows文件图标实战项目 在 Delphi 中,PChar是指向字符数组的指针类型,常用于与 Windows API 交互。 阅读详情

    我们编程时也许遇到过这样的问题:在一个Label或是Panel上显示路径,当路径过长显示不下的时候,希望像某些安装程序拷贝文件的时候那样把路径缩短,其中部分用省略号代替,比如:

  C:/Program Files/Borland/Delphi5/Source/Rtl/Win-->C:/Program Files/Borland/.../Win

  自己编程实现并不难,不过不知什么原因,我一直没有动手做,忽然有一天,我看到了一篇文章,于是,一切问题迎刃而解,随之而来的,竟是意想不到的收获
  那是一段Visual Basic的程序,不过,我第一眼就看到了一个函数的声明:PathCompactPath:

Private Declare Function PathCompactPath _
Lib "shlwapi" Alias "PathCompactPathA" ( ByVal hDC As Long, _
                        ByVal lpszPath As String, _
                        ByVal dx As Long) As Long
 

它需要三个引数,说明如下:

hDC:device context handle。
lpszPath:the address of the pathname。
dx:the width in pixels of the spot in which you want the pathname to fit。

  经过几番修改,在Delphi中试验通过了,果然能够做到压缩路径的效果,但我更感兴趣的是,ShlWapi.dll中是不是还有不少可以用的好东东呢?打开MSDN,敲入“ShlWapi”一搜索,果然出现一堆(注意,是 “一堆”)以“Path”开头的函数,欣喜之情,不在话下。于是我便一个个查看其功能,发现我们需要的关于路径的几乎所有功能都有相应的的函数可以调用,比如:

  PathAddBackslash、PathRemoveBackslash:在路径后面添加或去除“/”;
  PathIsDirectory、PathIsHTMLFile、PathIsPrefix、PathIsRoot、PathIsURL……

  等等,随便试了几个,可以用,接着我又琢磨如何找出其中全部的函数声明,我知道很多动态链接库在MSDN上都有相应的头文件,这次也许不会例外。果然又被我猜中!ShlWapi.H确实存在。接下来的工作就比较烦了,花了些时间,以“查找、替换”大法为辅助,我把其中关于路径操作的函数声明做成了ShlWapi.pas(ShlWapi.H中包括几部分的函数声明:字符串、路径、注册表、注册表流、调色板,还有一个很有用的函数DllGetVirsion,完整的声明可以在这里下载)。

  再来说说PathComact(或者叫PathEllipsis), PathCompactPath函数需要设备的HDC做参数,使用起来可能会麻烦一点,所以还有另外一个函数PathCompactPathEx,参数与设备无关,不过关于字符和显示宽度的换算也有些地方需要推敲,我做了一个简单的EllipsisPanel控件,可以作为例子。

  同样的功能,也可以用DrawText函数来完成,参数说明在MSDN 或者Delphi的Windows SDK Help中找能找到,功能比PathCompactPath要强,调用的时候可以选择是在路径中间省略还是在路径尾部省略(类似于资源管理器的标题栏不能显示完整路径名的时候做的处理)DFS的dfsEllipsisPanel就是用它做的。

   來看看实际的例子吧!请在表单中加入一个 CommandButton 及一个 Label,不用更改任何属性,將以下的程序代码复制到表单中:
 
Private Sub Command1_Click()
  Dim lhDC As Long, lCtlWidth As Long
  Dim FileSpec
As String
  lhDC = Me.hDC
  FileSpec = "C:/MyFolder/VisualBasic/MyReallyWayTooLongFolderName/"
  FileSpec = FileSpec & "ButWhoCares/IhaveTheAPI.doc"
  Me.ScaleMode = vbPixels
  lCtlWidth = Label1.Width - Me.DrawWidth 
  PathCompactPath lhDC, FileSpec, lCtlWidth
  Label1.Caption = FileSpec
End Sub

记住 Label1 的宽度不要太大,如果 Label1 的宽度本來就放得下全路径文件名,那就沒有必要压缩全路径文件名了!

shlwapi32位.h和.lib Shlwapi.dll提供了大量处理Windows字符串的方法,这些方法,可以让你工作更加简便 立即下载

相关推荐

shlwapi.h数值进行格式化的头文件

shlwapi.h定义了大量用来对数值进行格式化的操作,在国内网上没用找到相应的源码资源,经历了一番功夫后找到了,分享给有需要的朋友

使用ShLwApi中的PathCompactPathEx进行路径压缩显示

比如将C:/My Installations/Delphi7Compent/Media/CDROM/Disk Images/Disk1/data2.cab显示为C:/My Installati.../data2.cabAPI函数为ShlWApi.dll中的PathCompactPathEx,同样的,在此DLL内还有更多关于Path路径的函数。delphi没有把这个DLL进行封装,但有人已经

bell的专栏 1587

生物信息学新手必备:5分钟搞定GEO补充数据下载(含西柚云代理配置)

本文为生物信息学新手提供了快速下载GEO数据库补充数据的完整方案。核心在于解析GEO文件存储逻辑,构造正确的FTP下载链接,并利用云端代理服务(如西柚云)解决国内访问NCBI速度慢、易中断的问题。通过分步教程,用户无需命令行即可在5分钟内稳定获取大型测序文件,极大提升数据获取效率。

weixin_28314575的博客 636

路径相关的函数

需要头文件:shlwapi.h其中有一些函数功能存在重复,我在认为比较常用的的函数上加红。BOOL PathFileExists(LPCTSTR lpszPath)功能:检查文件/路径是否存在LPTSTR PathFindFileName(LPCTSTR pPath)功能:获得路径中的文件名例如: PathFileFileName( “c:\\Program Files\\File.txt” ) ...

weixin_34082854的博客 306

Basilisk库教程

要在仿真中执行模块,其调度由Basilisk的[Process]和[Task]容器控制。BSK[Task]包含一系列模块,这些模块都以相同的更新频率执行。一个[Process]本质上是一个任务组,可以包含多个相关的任务。例如,在多星仿真中,你可以为每颗卫星创建一个[Process],以便将相关任务和嵌入式模块有序地组织起来。下图展示了一个示例布局,其中bskSat卫星的动力学被添加到与飞行软件(FSW)算法分开的进程中,这些算法在该卫星上执行。在每个进程中,设置了若干任务,这些任务以指定的频率进行评估。

weixin_57997461的博客 1135

FOC-滑膜控制器SMC/滑膜观测器SMO

三相PMSM是一个非线性、强耦合的多变量控制系统,对于外界的扰动或者电机自身的参数发生变化时,传统的PI控制并不能满足实际的要求。因此可以引入滑模控制SMC,它对扰动和参数不敏感,响应速度也够快。简单来说就是,滑膜观测器就是通过采样与坐标变换得到的Ualpha,Ubeta,Ialpha,Ibeta四个参数值,获取。SMO叫滑膜观测器(Sliding Mode Observer),用于获取转子位置信息与转速信息。2、作为滑膜观测器SMO,获取电机角度与转速信息。之间的误差来设计滑膜观测器,并通过该误差。

小胡同学的工程师学习之路 1万+

shlwapi.h所包含的函数

1. 加入#include . 2. 在project(工程)->setting(设置)->link(连接)下objiect/library modules(对象/库模块)中加入shlwapi.lib.PathAddBackslash        //路径后添加反斜杆 CString.GetBuffer(_MAX_PATH)PathAddExtension        //添加扩展

Darcy Liu 1万+

STM32L452与FPGA通信翻车?手把手教你关闭I2C时钟延展避坑(附OVR错误解决方案)

本文深入解析STM32L452与FPGA在I2C通信中因时钟延展功能导致的常见问题,提供关闭I2C时钟延展的详细配置方法(NOSTRETCH模式),并针对可能出现的OVR错误给出Combined模式解决方案。通过实战案例和波形分析,帮助工程师快速排查和解决嵌入式系统中的I2C兼容性问题。

e3f4g5的博客 214

Shlwapi.h头文件的使用

// TestShlwAPI.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <Shlwapi.h>#pragma comment(lib,"shlwapi.lib")#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[...

acass424022的博客 968

泛微E9开发 明细表字段赋值到主表字段,将各类型合计赋值到主表类型合计中

①绑定明细表类型、预计金额字段的值改变事件,每当有值发生改变,就需要重新计算供应商1、供应商2、供应商3的合计,如果不绑定这两个字段的话,会出现计算不及时或计算错误的问题。②当有明细行被删除时,也需要重新计算供应商1、供应商2、供应商3的合计,比如删除了供应商1的明细行,如果不重新计算,那么供应商1的值还是被删之前的值,合计错误。将各类型合计赋值到主表类型合计中。

a_waste_only的博客 3835

2026年江苏省职业院校技能大赛高职组“软件测试”赛项智能体辅助测试参考答案

2026年江苏省职业院校技能大赛高职组“软件测试”赛项智能体辅助测试参考答案

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 1321

Shlwapi.h的所有函数列表

下面是Shlwapi.h中的所有函数列表,注意:在使用之前一定要查询最新的MSDN,以确定哪些函数有安全隐患,因而是不被推荐使用的。 String Function ===================================== CharLowerWrapW CharUpperBuffWrapW ChrCmpI CompareStringWrapW GetAcceptLa

autumn20080101的专栏 1801

PDN分析实战:电源完整性设计与Altium PDN Analyzer全流程指南

电源完整性(PI)是嵌入式硬件系统稳定运行的基础能力,其核心在于控制电流密度与电压降两大物理量。基于欧姆定律与热-电耦合原理,PDN分析将抽象的电源噪声问题转化为可量化、可定位的几何与电气参数优化过程。该技术显著提升系统抗干扰能力、降低复位与ADC漂移等隐性故障率,并直接支撑EMC合规性设计。典型应用场景包括电机驱动板、Wi-Fi模块、STM32/ESP32等资源受限型MCU供电网络验证。本文以Altium Designer为工具平台,结合IPC-2152标准与真实工程案例,详解从功率预算、模型构建到瓶颈定

weixin_28949937的博客 228

shlwapi.h包含的操作系统路径相关的函数

shlwapi.h包含的操作系统路径相关的函数: 如果要使用以下函数不要忘了包含头文件哦! 另外还需要在project(工程)->setting(设置)->link(连接)下objiect/library modules(对象/库模块)中加入shlwapi.lib库文件,否则连接会出错。 #pragma comment(lib,"shlwapi.lib") PathAddBacksla

惟愿莲心不染尘 2480

使用CiteSpace软件对知网文献进行关键词共现/聚类/突现分析

一、基本概念CiteSpace(引文空间)是一款专注于分析科学分析中蕴含的潜在知识的软件。它是在科学计量学、数据可视化背景下逐渐发展起来的引文可视化分析软件。通过可视化的手段,CiteSpace能够呈现科学知识的结构、规律和分布情况,并因此将这种分析得到的可视化图形称为“科学知识图谱”。二、主要功能和用途知识图谱构建:根据科学文献的引用关系,CiteSpace可以生成知识图谱,帮助研究人员更好地理解学术领域中不同文献之间的联系和演化过程。主题聚类分析。

m0_64336780的博客 1万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

shlwapi.dll中的实用API函数

shlwapi.dll位于windows的system目录下 调用方式: #include <shlwapi.h> #pragma comment(lib, "shlwapi.lib") BOOL PathFileExists(LPCTSTR lpszPath) 功能:检查文件/路径是否存在 LPTSTR PathFindFileName(LPCTSTR pPath) ...

Fzuim的博客 924

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Shlwapi.dll 应用系列

#include #include #include "Shlwapi.h"using namespace std;int main(){   // Path_1 destination buffer.   char buffer_1[MAX_PATH] = "JustABufferToHoldTheCanonicalizedPathForAnExample";   char *lpStr1;  

why 513

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Delphi 相对路径和绝对路径的转换

(* 相对路径和绝对路径的转换 *) unit xPath; interface uses ShlwApi, Windows, SysUtils; /// /// 取绝对路径的函数。需要引用 ShlwApi.pas /// /// 参考路径 /// 相对路径 /// /// S := GetAbsolutePath('C:\Windows\System32', '..\DEM

warrially的专栏 7325

DELPHI得到文件路径的方法

<br />DELPHI得到文件路径的方法 <br />方法一:只能到文件夹<br />uses FileCtrl;{记得要先引用这个}<br />var<br />  Dir: string;<br />begin<br />  SelectDirectory('选择你要 XXOO 的目录', '', Dir);<br />  ShowMessage('你选择了这个目录来 XXOO '+ Dir);<br />end;<br /><br />方法二:<br />用opendialog,和savedialo

sumstars的专栏 2691

Shlwapi 简介

Windows中有一个Shlwapi.dll文件,包含了大量的Windows字符串处理方法,这些方法,在通常的程序应用中,经常会用到,有一部分处理方法,在CRuntime中也存在,但不方便使用。有一部分函数,也有相关的Windows API函数,如StrCpy对应的lstrcpy之类的字符串处理函数。从Shlwapi名称看,这个应该是Windows的Shell API函数。 不管怎么

appcup的专栏 1000

Secrets in ShlWapi.Dll

  我们编程时也许遇到过这样的问题:在一个Label或是Panel上显示路径,当路径过长显示不下的时候,希望像某些安装程序拷贝文件的时候那样把路径缩短,其中部分用省略号代替,比如:  C:/Program Files/Borland/Delphi5/Source/Rtl/Win-->C:/Program Files/Borland/.../Win   自己编程实现并不难,不过不知什么原因,

eagleboost's blog 4621

delphi7如何设置代码自动提示

选择工具栏上的cnpack,然后IDE扩展设置,然后选择代码输入助手,选中代码提示,就OK了

云中雁012345之成长 7106
上一篇: 使用多线程使软件界面具有较好的响应性
下一篇: 使用虚列表和自画实现文件夹的缩略图显示
xmlscript
博客等级 码龄25年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值