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) ;
     }
     //@}
 };
 


ABAP内表数据导出Excel:OLE、ALV与GUI_DOWNLOAD方案全解析 在企业级应用开发中,数据导出是连接后台系统与前端业务分析的关键桥梁。其核心原理是将结构化数据转换为通用文件格式,以实现跨平台的数据交换与可视化。从技术价值看,一个健壮的导出功能能显著提升数据处理效率,减少人工干预,是衡量系统实用性的重要指标。常见的应用场景包括报表生成、数据交接和临时数据提取。本文聚焦于SAP ABAP开发领域,深入探讨如何将内表数据高效、稳定地导出至Excel,涵盖了OLE自动化、ALV标准导出以及基于CL_GUI_FRONTEND_SERVICES与GUI_DOWNLOAD的通用方案,并 阅读详情

相关推荐

Zynq AXI DMA实战:5分钟搞懂S_AXIS_S2MM和M_AXIS_MM2S数据流(附Vivado配置截图)

本文通过Vivado实战配置,清晰解析了Zynq平台AXI DMA IP核中S_AXIS_S2MM和M_AXIS_MM2S数据流的核心概念与连接方法。文章重点阐述了数据流向、主从关系及接口命名规则,并提供了从ADC数据采集到DDR存储,再从DDR读取数据发送至DAC的完整双向数据流搭建指南,帮助工程师快速避坑。

weixin_29200741的博客 450

shlwapi.dll中的实用API函数

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

pjl1119的专栏 5212

深度强化学习:Actor-Critic、A2C、A3C

Actor-Critic算法是强化学习中常用的一种方法,policy-based,通过演员和评论员或者是策略网络和价值网络的结合进行学习

weixin_51995147的博客 1427

Shlwapi介绍

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

weixin_30521161的博客 357

从零配置华为S5720交换机VLAN:Web界面与命令行双模式详解(附拓扑图)

本文详细解析华为S5720交换机VLAN配置的全过程,涵盖Web界面与命令行(CLI)双模式操作指南。从基础环境准备到多交换机环境配置同步,特别针对S5720-52X系列交换机的VLANif接口、端口分配策略及交换机堆叠技术进行深入讲解,并附实用拓扑图与配置示例,助力企业网络管理员高效完成VLAN部署。

happy2的博客 1370

vscode远程连接deepin出错:过程试图写入的管道不存在的解决方法

背景:昨天我用vscode使用ssh远程开发还处于正常状态,今天刚打开电脑,并启动deepin,再次使用vscode重新连接就出现异常。意思就是22号默认端口连接被拒绝,所以要先确定ssh是否连接。3.重新进入vscode里面,重新连接,如图成功连接。,查看port后面的端口号是不是22号。1.检查sshd是否启动。

qq_43573047的博客 2946

手动导入lib文件

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

qq_35173384的博客 1592

阿里云百炼平台创建智能体-上传文档

阿里云百炼智能体-上传文档文件

weixin_43930851的博客 1356

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

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

file 1275

LabVIEW面向对象编程:操作者框架入门实战

本文是LabVIEW面向对象编程中操作者框架的入门实战指南。针对传统“面条式代码”在复杂项目中的维护难题,文章通过创建操作者、定义消息与处理函数、在主VI中调用等步骤,详细演示了如何利用操作者框架构建模块化、易扩展的应用程序架构,有效管理并行任务。

f0g1h2的博客 589

1.47寸ST7789V3彩屏硬件设计与驱动调试指南

TFT LCD是一种基于薄膜晶体管阵列控制像素明暗的主动式显示技术,其核心依赖于专用驱动IC(如ST7789V3)完成时序生成、GRAM管理与伽马校正。该类小尺寸彩色显示屏广泛应用于嵌入式HMI、IoT终端与可穿戴设备,具备高PPI、低功耗和SPI接口易集成等工程优势。理解RGB565数据格式、SPI Mode 0通信时序及关键寄存器(如0x36方向控制、0x3A像素格式、0x2A/0x2B地址窗口)是实现稳定显示的基础;而正确处理电源设计(严禁5V直供)、复位时序与背光PWM调光,则直接决定系统可靠性与能

weixin_30995917的博客 165

Shlwapi

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

chinabinlang的专栏 2304

YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS

本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。

know_F0727的博客 190

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

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

2401_89675785的博客 1306

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

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

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

VGS® 研发笔记 1445

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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、付费专栏及课程。

余额充值