Windows API 的功能分类
Windows API 所能实现的功能包括很多方面:
文件、 进程、 内存、 权限、 系统信息等系统的基本服务和系统管理类的 API
图形用户界面、 控件等函数和对象
需要在界面上绘制图像处理多媒体信息等
进行网络通信开发等
2.2.1系统基本服务
基本服务 | 概要 |
---|---|
文件系统 | 对文件的基本操作包括文件输创建、 打开、 读写、 关闭、 删除, 文件属性的设置与获取, 目录操作, 以及磁盘分卷的操作, 还包括镜像文件、 加密文件系统等。 |
内存管理 | 主要是内在的分配、 共享、 释放等内容, 包括虚拟内存管理、 分页机制、 堆管理等。 |
进程、 线程和模块 | 包括进程主程序 (exe)、模块、 动态链接库(dll) 的编写; 线程的基本概念, 线程创建、 遍历、同步等操作; 进程与权限; 线程与纤程等内。 |
设备 I/O、驱动程序控制 | 包括设备对象等基本概念, 加载与卸载驱动程序, 控制驱动程序, 与驱动程序通信等。 |
调试与错误处理 | 包括如何开发调试器, 程序运行错误的处理, 日志的记录、 Windows 可执行文件的结构等。 |
Windows 系统信息 | 包括注册表的操作, 如打开注册表,读取、 写入键值, 创建、 删除键; 还包括系统基本信息的获取和设置, 如系统目录、 系统版本、 计算机名等。 |
进程间通信 | 包括使用共享文件进行进程间通信的方法, 使用消息进行进程间通信的方法, 使用邮榷、 管道等进行进程间通信的方法, 使用网络共享进行进程间通信的方法。 |
定时器与消息机制 | 消息机制是 Windows 系统中很重要的一种机制。 几乎所有的 Windows 应用程序都在与消息打交道, 而 Windows 的消息机制又是依赖于定时器的, 所以了解 Windows 消息机制是学习 Windows应用程序开发的重要内容。 |
其他 | Windows 的系统基本服务还包括性能监视、 电源管理、 索引与数据存储等, 也将在本书中有所涉及。 |
在书本中,为了让我们对API有个初步的了解,给与了一段将系统目录写入txt文档中的案例
这里我稍微修改了下vs2022报错问题:
#include <Windows.h>
#include <stdio.h>
int WINAPI WinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPSTR iCmdLine,
_In_ int nCmdShow)
{
//文件句柄
HANDLE hFile = 0;
DWORD dwWritten = 0;
//字符数据,用于存储系统目录
TCHAR szSystemDir[MAX_PATH] = { 0 };
//获取系统目录
GetSystemDirectory(szSystemDir, MAX_PATH);
//创建文件 systemroot.txt
hFile = CreateFile(TEXT("systemroot.txt"),
GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL, NULL);
//判断文件是否创建成功
if (hFile != INVALID_HANDLE_VALUE)
{
if (!WriteFile(hFile, szSystemDir, lstrlen(szSystemDir), &dwWritten, NULL))
{
return GetLastError();//如果没写入成功获取错误信息
}
}
//关闭文件,并返回
CloseHandle(hFile);
return 0;
}
运行后将会在源码所在目录下生成一个systemroot.txt的文档,内容为系统目录。
源码中用到的API在目前章节只时让我们有个了解,有兴趣的可以自行搜索了解。
2.2.2 系统管理
Windows 系统提供了以下方面的 API 供应用程序开发人员使用:
管理控制台接口
程序安装
系统恢复
任务调度
Windows 运程管理
2.2.3 用户界面
主要包括两个部分:
Windows Shell 和 Windows 图形用户界面。
窗口化 | 包括一些基本数据概念和对象: 窗口类、 消息对列、 窗口过程( 消息处理函数)、 窗口属性等。主要包括的 API 有窗口类注册的函数、 窗口建立与关闭函数、 窗口属性修改函数等 |
资源 | 资源是 Windows 应用程序中很重要的一项内容, 在可执行文件中, 专门有用于存储资源的节。这里所说的资源是界面资源, 包括图标、 菜单、 字符串、 版本信息、 对话框、 动态光标、 插入号(Carets)等。资源的处理涉及众多API函数。 |
用户输入处理 | 包括对话框、 键盘加速器(快捷键)、 键盘输入、 鼠标输入、 原始数据输入等。 这些概念是程序通过用户界面与用户进行交互的基本概念。 |
数据交换 | 包括 Atom 表( 包括了若干字符串和标识符)、 粘贴扳、 数据复制、 动态数据交接等基本概念,是用户和应用程序通过用户界面进行数据交换的主要载体。 |
Windows 图形界面通用控件 | Windows 系统提供了不少于 30种的控件供应用程序使用, 其屮最常用的几种包括 Edit 控件(文本框)、 Button 控件( 按钮)、 ListView 控件( 列表)、 ToolTip 控件(提示框)、 ComboBox 控件(下拉选择框)、 Tree-View 控件( 树:U Rich-Edit 控件( 多功能文本框 )、 Tab 控件( 分页)、 Process 控件( 进度条) 等。 |
Windows Shell | Windows 桌面浏览器 (explorer.exe) 的功能强大, Windows Shell 应用程序可以利用 Windows Shell 的程序接口达到管理系统、 定制图标和默认程序、 扩展桌面功能等目的。 |
书中提供了窗口创建以及消息处理的一段源码
#include<Windows.h>
//全局变量
HINSTANCE hinst;
//函数顺序声明
int WINAPI WinMain(_In_ HINSTANCE,_In_opt_ HINSTANCE,_In_ LPSTR,_In_ int);
LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);
//显示一个窗口的过程:
int WINAPI WinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPSTR iCmdLine,
_In_ int nCmdShow)
{
WNDCLASSEX wcx = { 0 }; //窗口类
HWND hWnd; //窗口句柄
MSG msg; //消息
bool fGotMessage; //是否成功获取消息
hinst = hInstance; //应用程序实例句柄,保存为全局变量
//填充窗口数据结构
wcx.cbSize = sizeof(wcx); //结构体大小
wcx.style = CS_HREDRAW | CS_VREDRAW; //样式:大小改变重绘
wcx.lpfnWndProc = MainWndProc; //窗口消息函数处理
wcx.cbClsExtra = 0; //不使用类内存
wcx.cbWndExtra = 0; //不使用窗口内存
wcx.hInstance = hInstance; //所属的应用程序实例句柄
wcx.hIcon = LoadIcon(NULL, IDC_ARROW); //默认图标
wcx.hCursor = LoadCursor(NULL, IDC_ARROW); //默认鼠标
wcx.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);//白色背景
wcx.lpszMenuName = NULL; //不使用菜单
wcx.lpszClassName= TEXT("MainWclass"); //窗口类名
wcx.hIconSm = (HICON)LoadImage(hInstance, //小图标
MAKEINTRESOURCE(5),
IMAGE_ICON,
GetSystemMetrics(SM_CXSMICON),
GetSystemMetrics(SM_CYSMICON),
LR_DEFAULTCOLOR);
//注册窗口类
if (!RegisterClassEx(&wcx))
{
return 1;
}
//创建窗口
hWnd = CreateWindow(
TEXT("MainWclass"), //窗口名
TEXT("First wClass"), //窗口标题
WS_OVERLAPPEDWINDOW, //窗口样式
CW_USEDEFAULT, //默认水平位置
CW_USEDEFAULT, //默认垂直位置
CW_USEDEFAULT, //默认宽度
CW_USEDEFAULT, //默认高度
NULL, //无父窗口
NULL, //使用窗口类的菜单
hInstance, //应用程序当前实例句柄
NULL); //无窗口创建时数据
if (!hWnd)
{
return 1;
}
//显示窗口:
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
//消息循环:
while (GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
//消息处理函数,对所有的消息使用默认处理函数
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
ExitThread(0);
return 0;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
}
这段代码目的在于对API有个初步的认值,实现一个图形界面:
创建一个窗口类->注册窗口类->创建窗口->显示窗口->处理消息
大部分的消息是系统默认处理(DefWindowProc)。
2.2.4 图像和多媒体
图像引擎和多媒体编程有多种接口:
最基本的 GDI、 GD1+,
更高级的OpenGL、 DirectX 等图像引擎编程接口
DirectX 和 OpenGL 在游戏开发、 动画制作等方面应用比较广泛。
GDI 的基本功能是对显示设备进行控制、 获取和修改相关配置, 在计算机屏幕上显示用户所需要显示的内容,而且涉及众多的结构和API,基本概念包括:
图像 (Image)、位图( Bitmaps)、 笔( Pen)、 画刷(Brush)、
文本和字体(Text and Fonts)、 线(Line)、 区域(Regions)、 形状(Shapes) 等。
2.2.5 网络
网络协议:
TCP\UDP Socket、
HTTP、DHCP、
RPC、QOS、 蓝牙,
传真、 点对点文件传输、
即插即用设备管理等
网络管理:
网络的基本信息
使用 IP helper 库获取网络配置和网络信息
进行网络监视等
网络安全编程:
防火墙 Windows、防火墙 API
以及一些 Windows 自带的网络应用程序的接口, 包括 IE、 Outlook 等。
2.2.6 系统安全
系统安全:
授权与认证、 登录、 权限管理、 加密、 安全管理策略等内容。
目前我学习的这本书中主要介绍:
用户管理( 包括用户增加、 修改设置、 删除等)
Windows 安全对象( 任何具有访问控制机制的对象,如文件、 进程)
安全操作主体(线程) 之间的安全认证机制及权限设置对程序行为的影响。
2.2.7 其他功能
Windows API 功能众多,应用开发范围广,需要由浅至深的学习,对于现在过多解释反而容易混乱。
以下罗列一些,仅供了解
数据存储和访问、 数据库 | 包括微软的“动态数据存取组件” 技术( MDAC, 包含了 ADO, ODBC)、 OLE 数据库、 XML标准、 微软 XML、 可扩展存在引擎等多方面内容。 主要是 Windows 系统内的数据库文件、 Windows系统对数据库的访问接P等技术。 |
消息与协作 | 消息与协作大多是 Windows 系统自带的一些应用程序所提供的开发接口.其中最主要的内容是‘“协作数据对象(CDO)。 CDO 包括了若干种 Windows 数据传输典型应用, 包括 Mssager(MSN)、 邮件 SMTP (Outlook) 应用接口等。 |
Web 开发 | IIS(intemet Information Server, 互联网信息服务) 等应用程序提供的开发接口, 使用户可以直接在 Windows 平台上进行 Web 开发, 开发的程序运行于 IIS 框架下。 |
“ 数据存在与访问”、“消息与协作” 、 '“Web 开发”等都可以归为COM开发的范围内。 COM是Windows 应用程序接口的一种, 具有固定的接口模式,大多是Windows系统中自带的应用程序所提供的开发接口集合。