什么是WinAPI

视窗操作系统应用程序接口(Windows API),有非正式的简称法为WinAPI,是微软对于Windows操作系统中可用的内核应用程序编程接口的称法。它设计为由C/C++程序调用,而且它也是应用软件与Windows系统最直接的交互方式。而大多数驱动程序所需要的对Windows系统的更底层次访问接口,由所用版本的Windows的Native API来提供接口。

Windows有一个软件开发包(SDK, software development kit)提供相应的文档和工具,以使程序员开发使用Windows API的软件和利用Windows技术。

历史

Windows API总会为程序员提供大量的构建不同Windows的底层结构,这有助于为Windows程序员开发应用程序提供大量的灵活性和功能。但是,它同样使Windows applications要负责处理大量底层且有时是繁琐的与图形用户界面(GUI)相关的操作。

Charles Petzold, 许多有关Windows API的畅销书的作者曾经说过:[1]

The original hello-world program in the Windows 1.0 SDK was a bit of a scandal. HELLO.C was about 150 lines long, and the HELLO.RC resource script had another 20 or so more lines. (...) Veteran C programmers often curled up in horror or laughter when encountering the Windows hello-world program.
—Charles Petzold, Programming Microsoft Windows with C#

常用的例子程序Hello world程序,通常是用来演示一个系统上最简单的程序(即打印一行"Hello World")。

这些年来,Windows操作系统已经今非昔比,而Windows API也随之改变和成长并反映出这种变化。Windows API的 Windows 1.0 版本只提供不到450个函数调用(Subroutine),而现在的版本提供了上千个。然而,整体而言,Windows接口保持了相当好的一致性,古老的Windows 1.0程序对习惯于现在版本Windows API的程序员也并不陌生。[2]

Microsoft特别强调维持软件的向后兼容性。为了实现此一目标,有时微软甚至不惜支持使用了非官方乃至(编程上)非法的API的软件。Raymond Chen,一位致力于Windows API的Windows开发者,曾提及他:[3]

could probably write for months solely about bad things apps do and what we had to do to get them to work again (often in spite of themselves). Which is why I get particularly furious when people accuse Microsoft of maliciously breaking applications during OS upgrades. If any application failed to run on Windows 95, I took it as a personal failure.
—Raymond Chen, What about BOZOSLIVEHERE and TABTHETEXTOUTFORWIMPS?

Windows API分类

Windows API所提供的功能可以归为七类:[4]

基础服务(Base Services)[5],提供对Windows系统可用的基础资源的访问接口。比如象:文件系统(file system)、外部设备(device)、, 进程(process)、线程(thread)以及访问注册表(Windows registry)和错误处理机制(error handling)。这些功能接口位于,16位Windows下的kernel.exe、krnl286.exe或krnl386.exe系统文件中;以及32位Windows下的 kernel32.dll和advapi32.dll中。

图形设备接口(GDI)[6],提供功能为:输出图形内容到显示器、打印机以及其他外部输出设备。它位于16位Windows下的gdi.exe;以及32位Windows下的gdi32.dll。

图形化用户界面(GUI)[7],提供的功能有创建和管理屏幕和大多数基本控件(control),比如按钮和滚动条。接收鼠标和键盘输入,以及其他与GUI有关的功能。这些调用接口位于:16位Windows下的user.exe, 以及32位Windows下的user32.dll。从Windows XP版本之后, 基本控件和通用对话框控件(Common Control Library)的调用接口放在comctl32.dll中。

通用对话框链接库(Common Dialog Box Library)[8],为应用程序提供标准对话框,比如打开/保存文件对话框、颜色对画框和字体对话框等等。这个链接库位于:16位Windows下的commdlg.dll中,以及32位Windows下comdlg32.dll中。它被归类为User Interface API之下。

通用控件链接库(Common Control Library)[9],为应用程序提供接口来访问操作系统提供的一些高级控件。比如像:状态栏(status bar)、进度条(progress bars)、工具栏(toolbar)和标签(tab)。这个链接库位于:16位Windows下的commctrl.dll中,以及32位Windows下comctl32.dll中。. 它被归类为User Interface API之下。

Windows外壳(Windows Shell)[10][11],作为Windows API的组成部分,不仅允许应用程序访问操作系统shell提供的功能,还对之有所改进和增强。它位于16位Windows下的shell.dll中,以及32位Windows下的shell32.dll中(Windows 95则在 shlwapi.dll中)。 它被归类为User Interface API之下。

网络服务(Network Services)[12],为访问操作系统提供的多种网络 功能提供接口。它包括NetBIOS、Winsock、NetDDE及RPC等。

时间: 2024-09-08 11:38:53

什么是WinAPI的相关文章

调用WinApi实现邮槽通信C/S实例

Just a test.高手无视. 服务端: //Code by Pnig0s1992 //Date:2012,3,19 #include <stdio.h> #include <Windows.h> VOID UseMailSlot(LPTSTR lpMailSlotName); int main(int argc,char **argv) { LPTSTR lpSlotName = TEXT("\\\\.\\mailslot\\first_slot"); U

c#使用WINAPI进行读取写入配置文件

我们c#读写配置文件通常用IO对文件进行读写.我觉得使用winapi的Kernel32.dll 对ini文件读取更好更方便一些 对ini文件读写 我们可以使用Kernel32.dll 中的WritePrivateProfileString(写入),GetPrivateProfileString(读入字符串) ,GetPrivateProfileInt(读入整型值)三个方法.下面我介绍着三个方法 一.将信息写入.INI文件中. 1.所用的WINAPI函数为: WritePrivateProfile

如何使用C#操作WinAPI

Windows API是对Windows操作系统的API函数,在C#中调用Windows API的实质是托管代码对非托管代码的调用. 主要使用的格式就是:   using System.Runtime.InteropServices; namespace TestWinAPI1 {class Program {static void Main(string[] args) { Beep(100, 100); } [DllImport("kernel32", CharSet = Char

c语言-关于winAPI下拉列表问题

问题描述 关于winAPI下拉列表问题 我想在窗口里面创建一个下拉列表框,就是类似设置波特率那种,我是用纯C写的,请问有相关的控件吗,参数是什么?没有的话需要怎么设计呢?求老司机带路,谢谢

WINAPI玩赏

希望多领域同时跟进,可以互相增益彼此的了解. PYTHON看过了,抽空熟悉一下WINDOWS的API. PDF是早就下载好的<精通WINDOWS API--函数,接口,编程实例>. 第一次用VS2010,清除一个WARN: 1>start.cpp(11): warning C4007: 'WinMain' : must be '__stdcall' 网上说是加WINAPI关键字. http://blog.5h77.com/archives/680 书上代码如下: 1 #include &

网络编程-DWORD WINAPI 函数名。这是什么意思啊。怎么用

问题描述 DWORD WINAPI 函数名.这是什么意思啊.怎么用 在用C语言编写网络时经常会有这些看不懂的,结构,函数.这应该看什么书补充这方面的知识呢? 解决方案 这个事Windows编程中要了解的,首先DWORD是数据类型,在这里是返回值,WINAPI是函数调用形式,最终就是_stdcall形式,即由被调用函数来清理栈中的参数,这种方式是不能实现可变参数的. 解决方案二: 使用windows系统函数 windows api = windows application programming

c++-急求 C++ 网吧开机登陆验证的代码或调WinAPI的思路,谢谢各位大神!!!

问题描述 急求 C++ 网吧开机登陆验证的代码或调WinAPI的思路,谢谢各位大神!!! 要求电脑开机或待机时,屏幕显示用户输入账号和密码验证的界面(注:类似网吧管理系统,谢谢各位大神帮忙) 解决方案 http://blog.csdn.net/zhihu008/article/details/8488000 解决方案二: http://download.csdn.net/detail/beau_lily/9410436 这个是我上传的资源 不知道能不能满足你的需求 C#写的你想要显示账号和密码验

winapi-C# winfrom项目,怎么样实现通过WINAPI 关闭对象的句柄窗口后,还能再次获取该句柄窗口

问题描述 C# winfrom项目,怎么样实现通过WINAPI 关闭对象的句柄窗口后,还能再次获取该句柄窗口 在C# Winfrom项目中,from窗体中,有一个Panel控件. 目前已经实现将对象的窗口通过winAPI获取到句柄窗口放到了Panel控件中. 请问怎么样实现关闭from窗体后,下次再进入from窗体后,还通过winAPI获取到句柄窗口放到了Panel控件中. 关闭from窗体的事情需要怎么样写,才能实现通过winAPI获取到句柄窗口放到了Panel控件中. 附上代码(通过winA

C#使用WinAPI 修改电源设置,临时禁止笔记本合上盖子时睡眠

原文 http://www.cnblogs.com/h46incon/archive/2013/09/03/3299138.html 在 阻止系统自动睡眠的小软件,附C#制作过程 ,弄了一个防止系统睡眠的工具.然后马上发现,新的需求来了:为了保护环境(省钱),在系统设置中,合上盖子时会自动睡眠.那因下载之类的原因,需要临时禁止睡眠的话,又懒得去改设置,而且下次还得改回来.所以没事也是折腾,就研究了怎么用软件实现了.   最开始的思路就是进行Hook,以截断睡眠消息.但是木有找到方法. 然后发现当