文号
t80067
阅读
15753
回复
16
收藏
1
【常用WinAPI】常用WinAPI汇总
2016/06/02
IP:四川
选用标准:能够同时用于98/Me和2000的。

【常用WinAPI】文件管理篇

一、文件读写(需要句柄)
打开文件:CreateFile(OpenFile)
文件大小:GetFileSize
文件类型:GetFileType
读取文件:ReadFile/ReadFileEx
写入文件:WriteFile/WriteFileEx
文件寻址:SetFilePointer
截断文件:SetEndOfFile
锁定内容:LockFile
解锁内容:UnlockFile
获取信息:GetFileInformationByHandle
同步缓冲:FlushFileBuffers
取消I/O:CancelIo

二、文件映射(需要句柄)
从文件名打开映射:OpenFileMapping
从句柄打开映射:CreateFileMapping
建立映射:MapViewOfFile/MapViewOfFileEx
同步映射:FlushViewOfFile
取消映射:UnmapViewOfFile

三、文件管理
移动文件:MoveFile
复制文件:CopyFile
删除文件:DeleteFile
设置属性:SetFileAttributes
获取属性:GetFileAttributes/GetFileAttributesEx

四、查找文件
查找第一个:FindFirstFile
查找下一个:FindNextFile
结束查找:FindClose

五、路径管理
设置编码:SetFileApisToANSI/SetFileApisToOEM
获取编码:AreFileApisANSI
获取8.3短路径:GetShortPathName
获取Win95长路径:GetLongPathName
获取绝对路径:GetFullPathName

六、临时文件
获取临时文件路径:GetTempPath
生成临时文件名:GetTempFileName

七、文件压缩
获取解压后的文件名:GetExpandedName
打开文件:LZOpenFile
分配资源:LZInit
读取文件:LZRead
文件寻址:LZSeek
直接解压:LZCopy
关闭文件:LZClose

八、目录管理
获取当前目录:GetCurrentDirectory
设置当前目录:SetCurrentDirectory
创建目录:CreateDirectory/CreateDirectoryEx
删除目录:RemoveDirectory

九、目录监控(配合WaitForSingleObject等函数使用)
获取第一个更改通知事件:FindFirstChangeNotification
获取下一个更改通知事件:FindNextChangeNotification
关闭更改通知事件:FindCloseChangeNotification

十、驱动器管理
获取可用驱动器:GetLogicalDrives/GetLogicalDriveStrings
获取信息:GetVolumeInformation
获取映射:QueryDosDevice
设置卷标:SetVolumeLabel

十一、磁盘管理
获取可用空间:GetDiskFreeSpace/GetDiskFreeSpaceEx

来源:MSDN Library for Visual Studio 2005
[ 修改于10年6个月前 - 2016/06/02 17:21:44 ]
acmilan作者
10年6个月前修改于 10年6个月前IP:四川
820524
2楼
【常用WinAPI】杂项篇一

一、句柄管理
关闭句柄:CloseHandle
复制句柄:DuplicateHandle

二、管道
创建管道:CreatePipe

三、设备请求
发送设备请求:DeviceIoControl

四、结束系统会话
注销当前用户:ExitWindows
注销或关机:ExitWindowsEx

五、消息槽
创建消息槽:CreateMailslot
获取消息槽参数:SetMailslotInfo
设置消息槽参数:GetMailslotInfo

六、命名管道(只有NT才能创建命名管道,9x只能CreateFile打开远程管道)
查看未读取:PeekNamedPipe
执行管道:TransactNamedPipe(写完马上读)
调用管道:CallNamedPipe(打开、写完马上读、关闭)
等管道待:WaitNamedPipe
获取参数:GetNamedPipeInfo
获取句柄状态:GetNamedPipeHandleState
设置句柄状态:SetNamedPipeHandleState
引用
评论
acmilan作者
10年6个月前IP:四川
820528
3楼
【常用WinAPI】注册表类

一、老式WIN.INI支持(被重定向到注册表)
批量获取节内的值:GetProfileSection
批量写入节内的值:WriteProfileSection
获取字符串值:GetProfileString
写入字符串值:WriteProfileString
获取整数值:GetPrivateProfileInt

二、老式自定义INI支持(默认被重定向到注册表)
获取所有节:GetPrivateProfileSectionNames
批量获取节内的值:GetPrivateProfileSection
批量写入节内的值:WritePrivateProfileSection
获取字符串值:GetPrivateProfileString
写入字符串值:WritePrivateProfileString
获取整数值:GetPrivateProfileInt
获取结构体值:GetPrivateProfileStruct
写入结构体值:WritePrivateProfileStruct

三、打开函数(返回HKEY句柄的函数)
创建键:RegCreateKey/RegCreateKeyEx
打开键:RegOpenKey/RegOpenKeyEx
连接远程注册表:RegConnectRegistry

四、父键管理函数
关闭键:RegCloseKey
立即写入键:RegFlushKey
获取键信息:RegQueryInfoKey

五、子键管理函数
删除子键:RegDeleteKey

六、文件函数
加载文件子键:RegLoadKey
卸载文件子键:RegUnloadKey
替换文件子键:RegReplaceKey
将父键保存到文件:RegSaveKey

七、值管理函数
删除值:RegDeleteValue
获取值:RegQueryValueEx
设置值:RegSetValueEx
批量获取值:RegQueryMultipleValues
获取子键包含的值:RegGetValue/RegQueryValue
设置子键包含的值:RegSetValue

八、枚举函数
枚举键:RegEnumKey/RegEnumKeyEx
枚举值:RegEnumValue

九、监视函数
监视更改:RegNotifyChangeKeyValue
引用
评论
acmilan作者
10年6个月前IP:四川
820530
4楼
【常用WinAPI】系统信息类

一、系统路径
展开环境变量:ExpandEnvironmentStrings
获取System/System32路径:GetSystemDirectory
获取Windows路径:GetWindowsDirectory(多用户环境要使用GetSystemWindowsDirectory)

二、系统名称
获取计算机名:GetComputerName
设置计算机名:SetComputerName
获取用户名:GetUserName

三、系统参数
返回或设置系统参数:SystemParametersInfo

四、系统个性化信息
获取系统颜色:GetSysColor
设置系统颜色:SetSysColor
获取系统尺寸:GetSystemMetrics
获取键盘类型:GetKeyboardType

五、系统版本信息
获取简单系统版本:GetVersion(Win8.1+失效,需使用VerifyVersionInfo/RtlGetVersion)
获取详细系统版本:GetVersionEx(Win8.1+失效,需使用VerifyVersionInfo/RtlGetVersion)
获取系统信息:GetSystemInfo(64位系统要使用GetNativeSystemInfo)
引用
评论
acmilan作者
10年6个月前IP:四川
820534
5楼
【常用WinAPI】日期时间类

一、时间格式转换
DOS时间->FILETIME:DosDateTimeToFileTime
FILETIME->DOS时间:FileTimeToDosDateTime
FILETIME->SYSTEMTIME:FileTimeToSystemTime
SYSTEMTIME->FILETIME:SystemTimeToFileTime

二、时间操作(FILETIME格式)
获取文件UTC时间:GetFileTime
设置文件UTC时间:SetFileTime
获取当前UTC时间:GetSystemTimeAsFileName

三、时间计算(FILETIME格式)
比较文件时间:CompareFileTime
UTC时间->本地时间:FileTimeToLocalFileTime
本地时间->UTC时间:LocalFileTimeToFileTime

四、时间操作(SYSTEMTIME格式)
获取当前本地时间:GetLocalTime
设置当前本地时间:SetLocalTime
获取当前UTC时间:GetSystemTime
设置当前UTC时间:SetSystemTime

五、时区操作
获取时区信息:GetTimeZoneInformation
设置时区信息:SetTimeZoneInformation

六、开机时间
获取开机时间:GetTickCount
引用
评论
acmilan作者
10年6个月前IP:四川
820536
6楼
【常见WinAPI】DLL类

一、加载和卸载
加载DLL:LoadLibrary/LoadLibraryEx(LoadModule)
卸载DLL:FreeLibrary
卸载DLL并结束线程:FreeLibraryAndExitThread

二、句柄操作
获取模块句柄:GetModuleHandle
获取模块名称:GetModuleFileName

三、导出符号操作
获取导出符号:GetProcAddress

四、DLL线程
关闭线程通知:DisableThreadLibraryCalls
引用
评论
acmilan作者
10年6个月前IP:四川
820547
7楼
【常用WinAPI】区域和语言、字符串

一、字符编码
获取HDC文字编码:GetTextCharset
获取HDC文字编码详细信息:GetTextCharsetInfo
确认是否为默认双字节编码首字节:IsDBCSLeadByte
确认是否为指定双字节编码首字节:IsDBCSLeadByteEx
多字节字符串->宽字符串:MultiByteToWideChar(这两个函数可实现编码转换)
宽字符串->多字节字符串:WideCharToMultiByte

二、区域字符串转换
按要求转换字符串形态:LCMapString(可实现简繁转换)
获取格式化的日期:GetDateFormat
获取格式化的时间:GetTimeFormat
获取格式化的数字:GetNumberFormat
获取格式化的货币:GetCurrencyFormat

三、区域信息
获取用户默认区域ID:GetUserDefaultLCID
获取用户默认语言ID:GetUserDefaultLangID
获取系统默认区域ID:GetSystemDefaultLCID
获取系统默认语言ID:GetSystemDefaultLangID
获取线程区域:GetThreadLocale
通过中性区域获取默认区域:ConvertDefaultLocale
获取区域信息:GetLocaleInfo
设置区域信息:SetLocaleInfo
获取日历信息:GetCalendarInfo
设置日历信息:SetCalendarInfo
验证区域是否合法:IsValidLocale
验证语言组是否合法:IsValidLanguageGroup

四、代码页
获取当前ANSI代码页
获取当前OEM代码页:GetOEMCP
获取代码页信息:GetCPInfo/GetCPInfoEx
验证代码页是否合法:IsValidCodePage

五、枚举函数
枚举日历信息:EnumCalendarInfo/EnumCalendarInfoEx
枚举日期格式:EnumDateFormats/EnumDateFormatsEx
枚举时间格式:EnumTimeFormats
枚举代码页:EnumSystemCodePages
枚举系统区域:EnumSystemLocales

六、字符集相关
下一个字符:CharNext(对UTF-16按UCS-2处理)
上一个字符:CharPrev
下一个字符(不同代码页):CharNextExA(没有W版本)
上一个字符(不同代码页):CharPrevExA(没有W版本)
字符串->OEM:CharToOem
字符数组->OEM:CharToOemBuff
OEM->字符串:OemToChar
OEM->字符数组:OemToCharBuff

七、区域相关的比较
区域相关比较:CompareString

八、字符类型
获取字符类型:GetStringTypeA/GetStringTypeEx(第一个函数有W版本,但参数不同)
是否字母:IsCharAlpha
是否字母或数字:IsCharAlphaNumeric
是否小写:IsCharLower
是否大写:IsCharUpper
字符串变小写:CharLower
字符串变大写:CharUpper
字符数组变小写:CharLowerBuff
字符数组变大写:CharUpperBuff

九、字符串函数
获取长度:lstrlen
复制:lstrcpy
复制一部分:lstrcpyn
拼接:lstrcat
比较:lstrcmp
不考虑大小写比较:lstrcmpi
格式化:wsprintf/wvsprintf(注意:不支持浮点数,限制1024个字符)

十、资源
从资源加载字符串:LoadString
引用
评论
acmilan作者
10年6个月前IP:四川
820555
8楼
【常用WinAPI】错误处理类

一、错误处理
获取上一个错误码:GetLastError
设置上一个错误码:SetLastError/SetLastErrorEx(完全相同)
格式化错误消息:FormatMessage
设置严重错误处理模式:SetErrorMode

二、用户反馈
PC喇叭发声:Beep(Vista以后改为声卡发声)
系统提示声:MessageBeep
闪烁窗口:FlashWindow/FlashWindowEx
显示错误框并退出:FatalAppExit

三、结构化异常处理函数(不常用,仅作参考)
AbnormalTermination
GetExceptionCode
GetExceptionInformation
RaiseException
SetUnhandledExceptionFilter

四、调试器函数(不常用,仅作参考)
ContinueDebugEvent
DebugActiveProcess
DebugBreak
FatalExit
FlushInstructionCache
GetThreadContext
GetThreadSelectorEntry
IsDebuggerPresent
OutputDebugString
ReadProcessMemory
SetThreadContext
WaitForDebugEvent
WriteProcessMemory
引用
评论
acmilan作者
10年6个月前修改于 10年6个月前IP:四川
820557
9楼
【常用WinAPI】进程线程类

一、进程类
创建进程:CreateProcess(WinExec)
退出进程:ExitProcess
获取进程启动信息:GetStartupInfo
获取当前进程句柄:GetCurrentProcess
获取当前进程ID:GetCurrentProcessId
获取进程的退出码:GetExitCodeProcess
终止进程:TerminateProcess
打开进程:OpenProcess
获取进程优先级:GetPriorityClass
设置进程优先级:SetPriorityClass
获取进程版本:GetProcessVersion
获取进程关联CPU掩码:GetProcessAffinityMask
等待进程到下一次消息循环:WaitForInputIdle

二、命令参数和环境变量
获取命令参数:GetCommandLine
获取环境变量块:GetEnvironmentStrings
释放环境变量块:FreeEnvironmentStrings
获取环境变量值:GetEnvironmentVariable
设置环境变量值:SetEnvironmentVariable

二、线程类
创建线程:CreateThread(最好用_beginthread)
退出线程:ExitThread(最好用_endthread)
获取线程的退出码:GetExitCodeThread
获取当前线程句柄:GetCurrentThread
获取当前线程ID:GetCurrentThreadId
获取线程优先级:GetThreadPriority
设置线程优先级:SetThreadPriority
休眠线程:SuspendThread
恢复线程:ResumeThread
终止线程:TerminateThread
切换到其它线程:SwitchToThread
等待一段时间:Sleep
等待一段时间并可被异步事件中断:SleepEx
连接线程输入:AttachThreadInput
设置线程关联CPU掩码:SetThreadAffinityMask

三、线程本地存储
分配存储:TlsAlloc
释放存储:TlsFree
获取值:TlsGetValue
设置值:TlsSetValue

三、纤程类
线程转化为纤程:ConvertThreadToFiber
创建纤程:CreateFiber
删除纤程:DeleteFiber
切换到纤程:SwitchToFiber
引用
评论
acmilan作者
10年6个月前IP:四川
820561
10楼
【常用WinAPI】线程同步类

一、原子操作
InterlockedCompareExchange
InterlockedCompareExchangePointer
InterlockedDecrement
InterlockedExchange
InterlockedExchangeAdd
InterlockedExchangePointer
InterlockedIncrement

二、可等待的计时器
创建:CreateWaitableTimer
打开:OpenWaitableTimer
设置:SetWaitableTimer
取消:CancelWaitableTimer

三、事件
创建:CreateEvent
打开:OpenEvent
触发:PulseEvent
置位:SetEvent
复位:ResetEvent

四、互斥体
创建:CreateMutex
打开:OpenMutex
释放:ReleaseMutex

五、信号量
创建:CreateSemaphore
打开:OpenSemaphore
释放:ReleaseSemaphore

六、临界区
初始化:InitializeCriticalSection
初始化并设置自旋次数:InitializeCriticalSectionAndSpinCount
设置自旋次数:SetCriticalSectionSpinCount
进入:EnterCriticalSection
离开:LeaveCriticalSection
删除:DeleteCriticalSection

七、等待函数
等待单个:WaitForSingleObjects/WaitForSingleObjectsEx(第二个支持异步)
等待多个:WaitForMultipleObjects/WaitForMultipleObjectsEx(第二个支持异步)
在消息循环中等待多个:MsgWaitForMultipleObjects/MsgWaitForMultipleObjectsEx(第二个支持异步)
注册在线程池运行的等待函数:RegisterWaitForSingleObject
注销等待函数:UnregisterWait/UnregisterWaitEx(第二个会触发一个事件)

八、杂项
获取异步返回值:GetOverlappedResult
排队用户级异步操作:QueueUserAPC
引用
评论
acmilan作者
10年6个月前IP:四川
820578
11楼
【常用WinAPI】剪贴板类

一、剪贴板数据
打开剪贴板:OpenClipboard
关闭剪贴板:CloseClipboard
设置数据:SetClipboardData
获取数据:GetClipboardData
清空剪贴板:EmptyClipboard

二、格式数据
返回数量:CountClipboardFormats
枚举全部:EnumClipboardFormats
检查可用:IsClipboardFormatAvailable
按列表返回:GetPriorityClipboardFormat

三、剪贴板格式
注册格式:RegisterClipboardFormat
获取格式名称:GetClipboardFormatName

四、剪贴板查看器
注册顶层查看器:SetClipboardViewer
获取顶层查看器:GetClipboardViewer
删除指定查看器:ChangeClipboardChain

五、窗口
获取打开剪贴板的窗口:GetOpenClipboardWindow
获取剪贴板的当前所属窗口:GetClipboardOwner

六、其它
返回当前剪贴板序列号:GetClipboardSequentialNumber
引用
评论
acmilan作者
10年6个月前IP:四川
820579
12楼
WinAPI太多了收不完,这里只收录部分WinAPI。
主要是收录系统服务类WinAPI,基本没有收录界面类/图形类/多媒体类。
引用
评论
acmilan作者
10年6个月前修改于 10年6个月前IP:四川
820592
13楼
想收集支持Win98的WinAPI,但是还是太多了,到现在已经快累死了。。。

下面列一下我现在还比较感兴趣的WinAPI类别,但是暂时不打算收了:
Windows Sockets
Windows Internet
Microsoft ODBC
Component Object Model
引用
评论
acmilan作者
10年6个月前修改于 10年4个月前IP:四川
820608
14楼

WinAPI的汇总暂时先到这里了,这些是最常用的一些。

WinAPI的分类没有.NET Framework合理,学习比较困难,如果只是为了实现Windows编程,建议学习.NET Framework而不是WinAPI。

引用
评论
acmilan作者
10年4个月前修改于 10年4个月前IP:四川
823622
15楼

小知识:如何判断Win95/98/Me

使用VC++2008以上版本或.NET4.0以上版本不需要判断Win95/98/Me,因为映像格式已经升级。

判断的意义主要是Win95/98/Me中,Unicode版本WinAPI有入口点,但是不起作用。

第一种方法是使用VC++2008以上版本,或使用高版本.NET,第二种方法是判断特殊的标志位。如果GetVersion()返回值最高位为1,Environment.OSVersion.Platform返回值小于2,则为Win95/98/Me。

C/C++代码(需要包含windows.h):

if ((int)GetVersion() < 0) return 1; // no win9x

C#代码:

if (Environment.OSVersion.Platform < PlatformID.Win32NT) return; // no win9x
引用
评论
acmilan作者
10年4个月前修改于 10年4个月前IP:四川
823626
16楼
【常用WinAPI】Windows Internet

第一部分:数据转换
InternetCreateUrl:创建URL
InternetCrackUrl:分析URL
InternetCombineUrl:将相对URL合并到绝对URL
InternetCanonicalizeUrl:处理URL中的不允许字符
InternetTimeFromSystemTime:转换系统时间到Internet时间
InternetTimeToSystemTime:转换Internet时间到系统时间

第二部分:通用Internet访问
InternetOpen:打开初级Internet句柄
InternetConnect:建立连接
InternetOpenUrl:打开URL
InternetCloseHandle:关闭句柄
InternetQueryDataAvailable:确认数据大小
InternetReadFile:读取文件
InternetWriteFile:写入文件
InternetReadFileEx:读取文件(可异步)
InternetSetFilePointer:设置文件指针
InternetLockRequestFile:锁住请求的文件
InternetUnlockRequestFile:解锁请求的文件
InternetGetCookie:获取Cookie
InternetSetCookie:设置Cookie
InternetGetCookieEx:获取第三方或特殊的Cookie
InternetSetCookieEx:设置第三方或特殊的Cookie
InternetQueryOption:返回句柄的选项
InternetSetOption:设置句柄的选项
InternetSetStatusCallback:设置状态回调
InternetFindNextFile:查找下一个文件
InternetGetLastResponseInfo:返回最近的响应信息

第三部分:网络连接类
InternetCheckConnection:检查网络连接
InternetInitializeAutoProxyDll:初始化自动代理DLL
InternetDeInitializeAutoProxyDll:反初始化自动代理DLL
InternetGetConnectedState:获取网络连接状态
InternetGetConnectedStateEx:获取指定网络连接状态
InternetGetProxyInfo:获取访问指定URL的代理信息
DetectAutoProxyUrl:探测自动代理URL

第四部分:网络连接UI
InternetDial:进行拨号
InternetHangUp:挂断拨号
InternetAutodial:进行自动拨号
InternetAutodialHangup:断开自动拨号
InternetAttemptConnect:尝试网络连接

第五部分:通用其它UI
InternetGoOnline:通知用户确认连接指定URL
InternetConfirmZoneCrossing:通知用户确认HTTP/HTTPS跨越
InternetErrorDlg:显示错误对话框

第六部分:HTTP特定API
HttpOpenRequest:打开请求
HttpAddRequestHeaders:添加请求头部
HttpQueryInfo:获取信息
HttpSendRequest:发送请求
HttpSendRequestEx:扩展的发送请求
HttpEndRequest:结束迭代式请求

第七部分:FTP特定API
FtpCommand:发送命令
FtpCreateDirectory:创建目录
FtpRemoveDirectory:移除目录
FtpGetCurrentDirectory:返回当前目录
FtpSetCurrentDirectory:设置当前目录
FtpFindFirstFile:查找第一个文件
FtpGetFile:下载文件
FtpPutFile:上传文件
FtpGetFileSize:获取文件大小
FtpOpenFile:打开文件
FtpRenameFile:重名名文件
FtpDeleteFile:删除文件

第八部分:Gopher特定API
GopherAttributeEnumerator
GopherCreateLocator
GopherFindFirstFile
GopherGetAttribute
GopherGetLocatorType
GopherOpenFile

第九部分:缓存API
CommitUrlCacheEntry:设置指定URL的缓存文件
CreateUrlCacheEntry:创建指定URL的缓存文件
DeleteUrlCacheEntry:删除指定URL的缓存文件
FindFirstUrlCacheEntry:查找第一个缓存文件
FindNextUrlCacheEntry:查找下一个缓存文件
FindFirstUrlCacheEntryEx:选择性查找第一个缓存文件
FindNextUrlCacheEntryEx:选择性查找下一个缓存文件
FindCloseUrlCache:关闭查找句柄
GetUrlCacheEntryInfo:返回缓存文件信息
SetUrlCacheEntryInfo:设置缓存文件信息
GetUrlCacheEntryInfoEx:考虑脱机模式下的重定向并返回缓存文件的信息
RetrieveUrlCacheEntryFile:锁住缓存文件
RetrieveUrlCacheEntryStream:打开缓存文件
ReadUrlCacheEntryStream:读取缓存文件
CreateUrlCacheGroup:创建缓存组
DeleteUrlCacheGroup:删除缓存组
SetUrlCacheEntryGroup:向缓存组添加或删除缓存文件
FindFirstUrlCacheGroup:查找第一个缓存组
FindNextUrlCacheGroup:查找下一个缓存组
GetUrlCacheGroupAttribute:返回缓存组的信息
SetUrlCacheGroupAttribute:设置缓存组信息

第十部分:其它
CreateMD5SSOHash:创建Microsoft Passport密码MD5摘要
引用
评论
笔记
{{note.content}}
{{n.user.username}}
{{fromNow(n.toc)}} {{n.status === noteStatus.disabled ? "已屏蔽" : ""}} {{n.status === noteStatus.unknown ? "正在审核" : ""}} {{n.status === noteStatus.deleted ? '已删除' : ''}}
  • 编辑
  • 删除
  • {{n.status === 'disabled' ? "解除屏蔽" : "屏蔽" }}
我也是有底线的