Shlwapi 简介

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

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


不管怎么说,Shlwapi.dll提供了大量处理Windows字符串的方法,这些方法,可以让你工作更加简便,通常,我们需要获取一个文件名的后缀名,使用MFC的CString查找字符串可以获取,但是麻烦,每个人的实现都不一样,用Shlwapi中提供的函数PathFindExtension直接就返回一个后缀名的指针。

Shlwapi主要分为三类函数,第一类是字符串处理函数,通常以Str开头,第二类是路径或者文件夹处理函数,通常以Path开头,第三类是注册表处理函数,通常以SH开头。每一类函数,都要区分A和W。

常见的字符串处理函数有:

StrChr ,StrChrI,StrCmpN,StrCmpNI,StrCSpn,StrCSpnI,StrDup,StrFormatByteSize(字节大小格式化),StrFromTimeInterval,StrIsIntlEqual,StrNCat,StrPBrk,StrRChr, StrRChrI,StrRStrI,StrSpn,StrStr,StrStrI,StrToInt,StrToIntEx(可以讲16进制字符串转换为10进制值),StrTrim(删除收尾空字符串),StrCat,StrCmp,StrCpy,ChrCmpI,

常见的Path处理函数有:

PathAddBackslash,PathAddExtension,PathAppend,PathBuildRoot, PathCanonicalize,PathCombine,PathCompactPath,PathCompactPathEx,PathCommonPrefix,PathFileExists,PathFindExtension,PathFindFileName(类似与basename中后面部分,获取得到整个文件名), PathFindNextComponent(获取得到除盘符外的所有文件名),PathFindOnPath,PathGetArgs,PathGetCharType,PathGetDriveNumber,PathIsDirectory,PathIsFileSpec(仅有文件名部分,不能够包括:和\符号),PathIsPrefix,PathIsRelative,PathIsRoot,PathIsSameRoot,PathIsUNC,PathIsUNCServer,PathIsUNCServerShare,PathIsContentType,PathIsURL,
PathMakePretty,PathMatchSpec,PathParseIconLocation,PathQuoteSpaces,PathRelativePathTo,PathRemoveArgs,PathRemoveBackslash,PathRemoveBlanks,
PathRemoveExtension,PathRemoveFileSpec,PathRenameExtension,PathSearchAndQualify,PathSetDlgItemPath,PathSkipRoot,PathStripPath,
PathStripToRoot,PathUnquoteSpaces,PathMakeSystemFolder,PathUnmakeSystemFolder,PathIsSystemFolder

常见的注册表处理函数有:

SHDeleteEmptyKey,SHDeleteKey, SHDeleteValue,SHGetValue,SHSetValue,SHQueryValueEx, SHEnumKeyEx,SHEnumValue,SHQueryInfoKey,
SHRegCreateUSKey,SHRegOpenUSKey,SHRegQueryUSValue,SHRegWriteUSValue,SHRegDeleteUSValue,SHRegDeleteEmptyUSKey,SHRegEnumUSKey,
SHRegEnumUSValue,SHRegQueryInfoUSKey,SHRegGetUSValue,SHRegSetUSValue,SHRegGetBoolUSValue,SHOpenRegStream,


其他函数

创建GDI帮助函数

SHCreateShellPalette

DLLGETVERSIONPROC指针,用来获取dll的版本号

和DllInstall原型定义

STDAPI DllInstall(BOOL bInstall, LPCWSTR pszCmdLine); 



/*
     Copyright (C) =USTC= Fu Li
 
     Author   :  Fu Li
     Create   :  2008-6-27
     Home     :  http://www.phoxo.com
     Mail     :  crazybitwps@hotmail.com
 
     This file is part of UIStone
 
     The code distributed in the hope that it will be useful,
     but WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
     Redistribution and use the source code, with or without modification,
     must retain the above copyright.
 */
 #pragma once
 #include <shlwapi.h>
 #pragma comment (lib, "shlwapi.lib")
 
 //-------------------------------------------------------------------------------------
 /**
     File helper.
 */
 class FCFileEx
 {
 public:
     /**
         Get folder that module locate, with backslash('\') append \n
         hModule - NULL to get current process folder.
     */
     static CString GetModuleFolder (HMODULE hModule=NULL)
     {
         TCHAR   s[MAX_PATH] = {0} ;
         GetModuleFileName (hModule, s, MAX_PATH) ;
         PathRemoveFileSpec (s) ;
         PathAddBackslash (s) ;
         return s ;
     }
 
     /// Get folder that file locate, with backslash('\') append.
     static CString GetFileFolder (LPCTSTR strFilename)
     {
         TCHAR   s[MAX_PATH] = {0} ;
         lstrcpyn (s, strFilename, MAX_PATH) ;
         PathRemoveFileSpec (s) ;
         PathAddBackslash (s) ;
         return s ;
     }
 
     /// Get file's size.
     static INT64 GetSize (LPCTSTR strFilename)
     {
         WIN32_FILE_ATTRIBUTE_DATA   fd ;
         if (GetFileAttributesEx (strFilename, GetFileExInfoStandard, &fd))
         {
             LARGE_INTEGER   n ;
             n.LowPart = fd.nFileSizeLow ;
             n.HighPart = (LONG)fd.nFileSizeHigh ;
             return n.QuadPart ;
         }
         return 0 ;
     }
 
     /// Get file's extension name, not including leading period.
     static CString GetExtName (LPCTSTR strFilename)
     {
         CString   s(strFilename) ;
         int   n = s.ReverseFind('.') ;
         if (n != -1)
         {
             return s.Mid(n+1) ;
         }
         return _T("") ;
     }
 
     /// Read file to memory.
     static BOOL Read (LPCTSTR strFilename, std::vector<BYTE>& file_data)
     {
         file_data.clear() ;
 
         BOOL     b = FALSE ;
         HANDLE   f = CreateFile (strFilename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL) ;
         if (f != INVALID_HANDLE_VALUE)
         {
             DWORD   nLength = ::GetFileSize(f, NULL) ;
             if (nLength)
             {
                 file_data.resize (nLength) ;
 
                 DWORD   dwRead ;
                 ::ReadFile (f, &file_data[0], nLength, &dwRead, NULL) ;
                 b = (dwRead == nLength) ;
             }
             CloseHandle (f) ;
         }
         assert(b && file_data.size()) ;
         return b ;
     }
 
     /// Write buffer to file, if file already exist, it will be delete before write.
     static BOOL Write (LPCTSTR strFilename, const void* p, int nLength)
     {
         SetFileAttributes (strFilename, FILE_ATTRIBUTE_NORMAL) ;
 
         BOOL     b = FALSE ;
         HANDLE   f = CreateFile (strFilename, GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL) ;
         if (f != INVALID_HANDLE_VALUE)
         {
             DWORD   nWrite ;
             ::WriteFile (f, p, nLength, &nWrite, NULL) ;
             b = ((int)nWrite == nLength) ;
             CloseHandle (f) ;
         }
         assert(b) ;
         return b ;
     }
 
     /// Get a temp file path.
     static CString QueryTempFilePath()
     {
         TCHAR   szTmpPath[MAX_PATH],
                 szFilename[MAX_PATH] ;
         ::GetTempPath (MAX_PATH, szTmpPath) ;
         ::GetTempFileName (szTmpPath, _T("t"), 0, szFilename) ;
         return szFilename ;
     }
 
     /// @name Read/Write INI file.
     //@{
     /// Read string key from ini file, return FALSE if key doesn't exist.
     static BOOL INIRead (LPCTSTR strFilename, LPCTSTR strKey, CString& s, LPCTSTR strSection=_T("app"))
     {
         TCHAR   b[512] ;
         DWORD   dwWrite = GetPrivateProfileString (strSection, strKey, _T("\n"), b, 512, strFilename) ;
         if ((b[0] == '\n') && (b[1] == 0))
             return FALSE ;
 
         if (dwWrite > (512 - 8))
         {
             std::vector<TCHAR>   buf (4096) ;
             GetPrivateProfileString (strSection, strKey, _T("\n"), &buf[0], (DWORD)buf.size(), strFilename) ;
             s = &buf[0] ;
         }
         else
         {
             s = b ;
         }
         return TRUE ;
     }
 
     /// Read int key from ini file, return FALSE if key doesn't exist.
     static BOOL INIRead (LPCTSTR strFilename, LPCTSTR strKey, INT64& n, LPCTSTR strSection=_T("app"))
     {
         TCHAR   b[32] ;
         GetPrivateProfileString (strSection, strKey, _T("\n"), b, 32, strFilename) ;
         if ((b[0] == '\n') && (b[1] == 0))
             return FALSE ;
 
         n = _ttoi64(b) ;
         return TRUE ;
     }
 
     /// Write a int key to ini file.
     static BOOL INIWrite (LPCTSTR strFilename, LPCTSTR strKey, INT64 n, LPCTSTR strSection=_T("app"))
     {
         CString   s ;
         s.Format(_T("%I64d"), n) ;
         return INIWrite (strFilename, strKey, s, strSection) ;
     }
 
     /// Write a string key to ini file.
     static BOOL INIWrite (LPCTSTR strFilename, LPCTSTR strKey, LPCTSTR strValue, LPCTSTR strSection=_T("app"))
     {
         return WritePrivateProfileString (strSection, strKey, strValue, strFilename) ;
     }
     //@}
 };
 


基于Simulink的智能车辆电子稳定控制(ESC)仿真 本文完成了基于 Simulink 的智能车辆电子稳定控制(ESC),实现了:✅ 构建含轮胎非线性的车辆动力学模型✅ 设计滑模横摆稳定性控制器✅ 实现四轮制动力分配逻辑✅ 验证在双移线低附着场景下的卓越稳定性✅ 为主动安全控制系统开发提供完整范式。 阅读详情

相关推荐

Windows下快速搭建MSYS2开发环境(含GCC与MinGW配置)

本文详细介绍了在Windows系统下快速搭建MSYS2开发环境的完整流程。通过使用pacman包管理器,可以便捷地安装GCC编译器与MinGW-w64工具链,并配置系统环境变量。文章还涵盖了从基础安装、系统更新到编译开源项目的实战指南,帮助开发者高效构建原生Windows程序,显著提升C/C++开发效率。

weixin_29213827的博客 539

shlwapi.dll中的实用API函数

在windows   system目录下有这个动态链接库  BOOL PathFileExists(LPCTSTR lpszPath) 功能:检查文件/路径是否存在    LPTSTR PathFindFileName(LPCTSTR pPath) 功能:获得路径中的文件名 例如: PathFindFileName( “c:\\Program Files\\File.txt”

pjl1119的专栏 5212

光耦合MOSFET(Optocoupled MOSFET,简称OCMOS)

光耦合MOSFET(Optocoupled MOSFET,简称OCMOS)是一种将光电耦合器和MOSFET结合在一起的器件,用于实现电气隔离和信号传输。选择合适的光耦合MOSFET时,还需要考虑具体应用的需求和环境条件,以确保最佳性能和可靠性。- 最大输出电流和电压:确保所选型号能够满足电路的最大电流和电压需求。- 最大输出电流和电压:确保所选型号能够满足电路的最大电流和电压需求。- 隔离电压:根据应用环境的电气隔离要求选择合适的隔离电压。- 隔离电压:根据应用环境的电气隔离要求选择合适的隔离电压。

eydj2008的专栏 1725

Shlwapi介绍

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

weixin_30521161的博客 357

快手极速版抓包实战:安卓/iOS双端获取client_salt全流程解析(避坑指南)

本文详细解析了在安卓和iOS平台上获取快手极速版关键参数`client_salt`的全流程,包括环境配置、抓包工具使用、参数识别与转换等实战技巧。特别针对双端差异和反抓包机制提供了避坑指南,帮助开发者高效安全地完成数据获取任务。

weixin_29021195的博客 714

linux和mac安装+配置circos(

一定要下载完这两个包,GD才会work,要不然会报错,且-modules显示也是fail。官网的教程说的很明白,但是很多包都已经过时了需要在网上找。一般来讲,所有包的安装都不会太困难,除了GD。1.是因为官网给的链接下出来的tgz无法解压。2.我的电脑安装后GD照样是fail的。,进入这个地址下一个.tgz。第二点的原因在于,官网的情况。,进入这个地址,按部就班。GD安装困难有以下几点。搞了一天终于配置成功。

xiufan1的博客 551

手动导入lib文件

手动导入lib文件 例: 导入 Shlwapi.lib : #include <Shlwapi.h> #pragma comment(lib,“Shlwapi.lib”)

qq_35173384的博客 1592

SAP PP工艺路线Routing保姆级配置指南:从CA01创建到替代/并行顺序实战

本文详细解析SAP PP模块中工艺路线(Routing)的配置与应用,从基础创建(CA01)到高级功能如替代顺序和并行顺序的实战操作。通过真实案例演示,帮助用户掌握SAP PP工艺路线的精细化管理,提升生产流程效率。

weixin_30898555的博客 388

Windows系统丢失shlwapi.dll文件导致系统出现错误

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个shlwapi.dll文件(挑选合适的版本文件)把它放入到程序或系统目录中,当我们执行某一个.exe程序时,相应的DLL文件就会被调用,因此将缺失的文件放回到原目录之后就能打开你的软件或游戏了.那么出现shlwapi.dll丢失要怎么解决?

file 1275

LVGL 实战:虚拟列表与对象复用机制在嵌入式GUI中的性能优化

本文深入探讨LVGL虚拟列表与对象复用机制在嵌入式GUI中的性能优化实践。通过复用机制动态管理UI对象,大幅降低内存占用,实现无限滚动列表的流畅体验。文章详细解析核心算法、内存优化策略及跨平台适配技巧,帮助开发者在资源受限设备上高效处理大量数据展示。

rice5的博客 1106

Dify 第 3 篇 Dify 入门示例 - 聊天助手

本文介绍了如何使用Dify平台快速搭建一个聊天助手。首先通过创建空白应用并选择"聊天助手"模板完成基础设置,然后安装配置通义千问等大语言模型(LLM)并设置API密钥。进阶部分演示了如何创建支持编程语言选择的代码解释器,包括添加提示词约束、插入变量、设置开场白等功能。最后展示了运行效果:用户可选择编程语言后输入代码,系统会给出相应解释。文章还提到应用支持发布共享,并附有Dify官方文档参考链接。

甘蓝的专栏 863

Shlwapi

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

chinabinlang的专栏 2304

【基于Arduino 的CNC笔式绘图仪】

该机器的结构基于我之前视频中的DIY CNC激光雕刻机,目标是以尽可能少的零件制造最简单的CNC机器。它使用 3 个 NEMA 17 步进电机进行 X、Y 和 Z 轴运动,并使用一个小伺服器进行夹持器。这款数控笔式绘图仪的大脑是一块Arduino UNO板,结合了一个数控屏蔽和三个A4988步进驱动器。在我看来,相当大的工作区域,360x280mm,以及这款笔式绘图仪可以输出的细节水平也令人印象深刻。我真的很惊讶这些图纸的好坏和精确程度,尤其是我使用0.6毫米中性笔的图纸。

vor234的博客 1498

找不到shlwapi.dll文件或shlwapi.dll文件丢失该怎么办?

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个shlwapi.dll文件(挑选合适的版本文件)把它放入到程序或系统目录中,当我们执行某一个.exe程序时,相应的DLL文件就会被调用,因此将缺失的文件放回到原目录之后就能打开你的软件或游戏了.那么出现shlwapi.dll丢失要怎么解决?

2401_89675785的博客 1306

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SHLWAPI 和 CRT (C Runtime) 字符串处理函数的区别

CRT (C Runtime) 的字符串函数就是我们常见的 strcmp, strchr, strstr 等等Windows 系统DLL shlwapi.dll  也提供了类似的字符串处理函数,只是大小写有所不同: StrCmp, StrChr, StrStr 等。 两者的区别在于:1) CRT  的字符串函数不支持 Unicode 字符串 (wchar_t)2) CRT 

phphot 1924

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

VGS® 研发笔记 1445

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Shlwapi字符串路径注册表处理函数

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

I am a coder 2227

Secrets in ShlWapi.Dll

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

eagleboost's blog 4621

VC++下Shlwapi系列API操作注册表

上一篇博客介绍了WinReg系列API操作注册表,这类API操作注册表比较麻烦,写起来代码交多,而使用SH***系列API就会简化很多。Shlwapi系列API操作注册表,该类API适合低版本的windows操作系统,这一系列函数使用极其方便。使用它们操作注册表,一行代码解决HKEY系列函数几十行代码才能解决的问题。针对操作频次比较低的注册表,使用这类API,这类API使用简单,但是次都会执行打开、关闭操作,相对于WinReg类型API,效率比较低 SH***主要API如下: SHSetValu...

hsy12342611的专栏 645

Windows中Shlwapi介绍

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

D.D.U的博客 4681

Shlwapi.dll 应用系列

#include #include #include "Shlwapi.h"void main( void ){ // String for root name char buffer_1[4]; char *lpStr1; lpStr1 = buffer_1; // Generate a root path based on the drive number (0/25) // "Exampl

why 462

利用IE自带的Shlwapi.dll实现文本框的自动完成

实现文本框的自动完成功能有很多方法,这里介绍的是用IE自带的Shlwapi.dll实现的方法。一、介绍Shlwapi.dllShlwapi.dll和Comctl32.dll,Shell32.dll一样是随着IE而分发的,所以如果你想得到最新的版本必须下载最新版的IE。其中,Shell32.dll和Comctl32.dll的最初版本是4.0版,她是随着Windows95和Windows NT分发的;

1227

shlwapi.h所包含的函数

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

Darcy Liu 1万+

Shlwapi.h的所有函数列表

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

autumn20080101的专栏 1801

[Windows编程] SHLWAPI 和 CRT (C Runtime) 字符串处理函数的区别

CRT(C Runtime) 的字符串函数就是我们常见的 strcmp, strchr, strstr 等等 Windows 系统DLL shlwapi.dll 也提供了类似的字符串处理函数,只是大小写有所不同: StrCmp, StrChr, StrStr等。 两者的区别在于: 1)CRT 的字符串函数不支持 Unicode 字符串 (wchar_t) 2) C...

anjichan4261的博客 149
上一篇: 补码、原码、反码
下一篇: VC++常用字符串转换函数
appcup
博客等级 码龄14年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值