API学习笔记:2.2Windows 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 ShellWindows 桌面浏览器 (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系统中自带的应用程序所提供的开发接口集合。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_NxPro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值