Windows应用程序编程接口------Windows API
2012-03-06 10:50
253 查看
在上例中,我们接触了许多以前没见过的函数,如MessageBox, TextOut,CreateWindow, PostQuitMessage等等,这些就是所谓的Windows API函数。
Windows操作系统通过两种接口对外提供服务:普通用户操作接口服务和程序员接口服务。其中用户操作接口服务是通过最终用户的操作来完成的,而程序员接口服务是提供一系列底层的实现操作系统最基本的函数(接口)供程序员调用来完成相关功能的。比如一个文件的拷贝,普通用户可以通过鼠标菜单选择操作或者命令来完成,程序员可以通过程序代码调用文件操作的相关函数(API)来完成相同的功能。
所有这些系统底层、实现最基本功能、供程序员调用的函数集中起来形成一个集合,这就是API(Application Programming Interface)。Windows API编程是开发Windows应用程序最古老、最原始、同时又是检验一个程序员对windows操作系统及相关数据结构掌握程度的最好方法。
应该知道:所有其它类库以及后面要讲到的MFC,都是对这些最基本功能的函数进行封装来实现的。任何使用MFC能实现的功能,使用API同样能够实现,而且能够更加灵活。了解并学习API编程,可以看到使用MFC编程所看不到的东西,更深入了解Windows系统运行机制,同时帮助我们学习MFC编程。
API函数集是由操作系统或开发环境提供的,以DLL的形式出现。其中有三个最主要的动态连接库:Windows内核库(Kernel32.dll)、Windows用户界面管理库(User32.dll)、Windows图形设备界面库(Gdi32.dll),这些动态连接库共同构成了Win32 API函数。
Windows内核库(Kernel32.dll):所有底层的核心功能如任务管理、内存管理,进程线程文件管理等的函数都在这个动态连接库中;
Windows用户界面管理库(User32.dll):窗口管理,菜单管理以及通信等相关函数都在该动态连接库中;
Windows图形设备界面库(Gdi32.dll):集合了关于图形设备的所有函数。
所有这三个动态连接库中的函数原型说明都在头文件windows.h中声明,所以在使用API进行编程序的时候别忘了包括该头文件。当然了,这只是主要的三个动态连接库,其他比较常用的还有网络服务(Winsock32.dll)、多媒体服务(Winmm.dll)等等。
例2、使用Windows API实现一些简单的系统功能
建立一个控制台空工程,加入文件API.cpp,文件内容如下:
编译执行,结果会显示当前的系统时间和相关的系统信息。
由于API接口太多,这里就不一一举例说明了。我们就把它们理解为系统已经提供的这么一些函数,使用的时候在程序中调用就可以。如果参数及函数功能不了解的话,可以查阅MSDN相关资料即可。
作业:
1、使用VC创建典型的“Hello World!”工程,编译并对程序进行单步跟踪,进一步理解Win32程序框架,熟悉相关函数。
2、创建一个Win32应用程序,其中包含一个主窗口和一个子窗口,要求子窗口可以关闭,子窗口关闭后在主窗口中点击鼠标右键重新打开子窗口。
更多C++视频教程
www.rjpx.net
Windows操作系统通过两种接口对外提供服务:普通用户操作接口服务和程序员接口服务。其中用户操作接口服务是通过最终用户的操作来完成的,而程序员接口服务是提供一系列底层的实现操作系统最基本的函数(接口)供程序员调用来完成相关功能的。比如一个文件的拷贝,普通用户可以通过鼠标菜单选择操作或者命令来完成,程序员可以通过程序代码调用文件操作的相关函数(API)来完成相同的功能。
所有这些系统底层、实现最基本功能、供程序员调用的函数集中起来形成一个集合,这就是API(Application Programming Interface)。Windows API编程是开发Windows应用程序最古老、最原始、同时又是检验一个程序员对windows操作系统及相关数据结构掌握程度的最好方法。
应该知道:所有其它类库以及后面要讲到的MFC,都是对这些最基本功能的函数进行封装来实现的。任何使用MFC能实现的功能,使用API同样能够实现,而且能够更加灵活。了解并学习API编程,可以看到使用MFC编程所看不到的东西,更深入了解Windows系统运行机制,同时帮助我们学习MFC编程。
API函数集是由操作系统或开发环境提供的,以DLL的形式出现。其中有三个最主要的动态连接库:Windows内核库(Kernel32.dll)、Windows用户界面管理库(User32.dll)、Windows图形设备界面库(Gdi32.dll),这些动态连接库共同构成了Win32 API函数。
Windows内核库(Kernel32.dll):所有底层的核心功能如任务管理、内存管理,进程线程文件管理等的函数都在这个动态连接库中;
Windows用户界面管理库(User32.dll):窗口管理,菜单管理以及通信等相关函数都在该动态连接库中;
Windows图形设备界面库(Gdi32.dll):集合了关于图形设备的所有函数。
所有这三个动态连接库中的函数原型说明都在头文件windows.h中声明,所以在使用API进行编程序的时候别忘了包括该头文件。当然了,这只是主要的三个动态连接库,其他比较常用的还有网络服务(Winsock32.dll)、多媒体服务(Winmm.dll)等等。
例2、使用Windows API实现一些简单的系统功能
建立一个控制台空工程,加入文件API.cpp,文件内容如下:
// API.cpp : 定义控制台应用程序的入口点。 #include <iostream> #include <Windows.h> #include <stdio.h> #include <stdlib.h> using namespace std; //获取计算机名称,CPU数量,CPU类型,已用内存百分比,物理内存总数,空闲物理内存 void GetSysInfo() { //1. 定义数据结构存放计算机名称信息 DWORD MaxComputerlenth = MAX_COMPUTERNAME_LENGTH; CHAR ComputerName[MAX_COMPUTERNAME_LENGTH]; // 调用API函数GetComputerName获取计算机名称存放到ComputerName中。 GetComputerName(ComputerName, &MaxComputerlenth); cout << "本台计算机的名称为:" << ComputerName << endl; //2. 定义数据结构存放计算机系统信息 SYSTEM_INFO siSysInfo; TCHAR tchBuffer[100]; // 调用API函数GetSystemInfo获取计算机名称存放到siSysInfo中 GetSystemInfo(&siSysInfo); // 输出相关系统信息 sprintf(tchBuffer,"CPU的数量: %u\tCPU类型: %u", siSysInfo.dwNumberOfProcessors, siSysInfo.dwProcessorType); cout << tchBuffer << endl; //3. 定义数据结构存放内存状态信息 MEMORYSTATUS stat; GlobalMemoryStatus(&stat); // 进行输出 printf("%d%% 的内存在使用\n", stat.dwMemoryLoad); printf("总共有%8ldk的物理内存空间. \n", stat.dwTotalPhys/1024); printf("总共有%8ldk空闲的物理内存空间. \n", stat.dwAvailPhys/1024); } void CopyCppFile() { WIN32_FIND_DATA FileData; HANDLE hSearch; DWORD dwAttrs; TCHAR szDirPath[] = TEXT("c:\\CppFiles\\"); TCHAR szNewPath[MAX_PATH]; BOOL fFinished = FALSE; // Create a new directory. if (!CreateDirectory(szDirPath, NULL)) { printf("Could not create new directory.\n"); //return; } // Start searching for text files in the current directory. hSearch = FindFirstFile(TEXT("*.cpp"), &FileData); if (hSearch == INVALID_HANDLE_VALUE) { printf("No *.cpp files found.\n"); return; } // Copy each .TXT file to the new directory // and change it to read only, if not already. while (!fFinished) { if (CopyFile(FileData.cFileName, szNewPath, FALSE)) { dwAttrs = GetFileAttributes(FileData.cFileName); //if (dwAttrs==INVALID_FILE_ATTRIBUTES) return; if (!(dwAttrs & FILE_ATTRIBUTE_READONLY)) { SetFileAttributes(szNewPath, dwAttrs | FILE_ATTRIBUTE_READONLY); } } else { printf("Could not copy file.\n"); //return; } if (!FindNextFile(hSearch, &FileData)) { if (GetLastError() == ERROR_NO_MORE_FILES) { printf("Copied all cpp files.\n"); fFinished = TRUE; } else { printf("Could not find next file.\n"); return; } } } // Close the search handle. FindClose(hSearch); } void main() { SYSTEMTIME tm; ::GetLocalTime(&tm); char szBuf[] = "当前时间是:2010年12月31日 23:59:59"; sprintf(szBuf, "当前时间是:%4d年%.2d月%.2d日 %.2d:%.2d:%.2d", tm.wYear, tm.wMonth, tm.wDay, tm.wHour, tm.wMinute, tm.wSecond); cout << szBuf <<endl; tm.wYear--; BOOL bDone = SetLocalTime(&tm); tm.wYear++; bDone = SetLocalTime(&tm); cout << endl; CopyCppFile(); cout << endl; GetSysInfo(); cout << endl; }
编译执行,结果会显示当前的系统时间和相关的系统信息。
由于API接口太多,这里就不一一举例说明了。我们就把它们理解为系统已经提供的这么一些函数,使用的时候在程序中调用就可以。如果参数及函数功能不了解的话,可以查阅MSDN相关资料即可。
作业:
1、使用VC创建典型的“Hello World!”工程,编译并对程序进行单步跟踪,进一步理解Win32程序框架,熟悉相关函数。
2、创建一个Win32应用程序,其中包含一个主窗口和一个子窗口,要求子窗口可以关闭,子窗口关闭后在主窗口中点击鼠标右键重新打开子窗口。
更多C++视频教程
www.rjpx.net
相关文章推荐
- SOCKETS规范及应用-WINDOWS网络编程接口
- windows基础应用程序编程(四):菜单
- 九、C#编程实战演习ABC 2、用Visual C# 创建Windows应用程序
- Windows 7 新特性 Shell Library 编程接口介绍
- 《C#高级编程(第8版)》之用C# 2012和.NET 4.5编写Windows 8样式应用程序技巧
- Windows核心编程 进程--编写第一个windows应用程序
- Windows窗体编程基础学习:使用 NotifyIcon 组件向任务栏添加应用程序图标
- Windows API 编程之创建一个windows窗口
- Windows应用程序组成及编程步骤
- windows基础应用程序编程(十三)定时器
- 【Windows编程】【网络编程】【基于网络端口通信的客户端应用程序】解决方案【示意程序】
- 低层次的渲染应用程序编程接口--Metal
- windows基础应用程序编程(六)键盘消息
- C++ WINDOWS API 第1章 Windows 应用程序开发入门
- 1-4-1 Windows应用程序组成及编程步骤
- 十年一遇的奇葩故障--Windows网络编程接口故障:telnet显示无法加载或初始化请求的服务提供程序
- 【Windows编程】【网络编程】【基于网络端口通信的客户端应用程序】解决方案【示意程序】
- 文件倒序示例应用程序关键代码(使用内存映射文件)——摘自Windows 核心编程
- windows基础应用程序编程(五):图标和加速键
- Microsoft 用于构建面向服务的应用程序的统一编程模型--Indigo简介 - WCF(WindowsCommunicationFoundation)构建面向服务的分布式应用