微软软件开发技术二十年回顾-API篇(转)
随着Windows操作系统开始占据主导地位,开发Windows平台下的应用程序成为人们的需要。当然,这也为传统的DOS程序员提供了一种新的编程方法—一种不受设备限制并由事件驱动的编程方法。另一方面,Windows GUI的开发迫使传统的DOS程序员的编程方法发生了变化。当时,大多数DOS软件以过程方式编写,即一个函数调用另一个函数,主程序始终处于控制之下,而事件驱动的编程模式使得程序放弃它们的全部控制权,等待外部事件发生并对外部事件作出响应,以便将它们的函数全部提供给最终用户。结果是,今天的Win32(当然包括早期的Win16)GUI程序的结构仍然与1987年时的结构相同。图1展示了Windows GUI应用程序的基本结构。

1.Windows GUI应用程序的基本结构。
其中,每一个程序都包含一个进入点、主窗口创建、一个消息循环和主窗口撤消。此外,都有一个函数与主窗口过程相关联,称为窗口过程,它包含用于处理系统事件和应用事件(如键盘输入、鼠标移动和点击、定时器报警、菜单选择和按钮点击)的代码。
在Windows程序设计初期,Windows程序员所能使用的编程工具唯有API(应用程序编程接口)函数,这些函数是Windows提供给应用程序与操作系统的接口,它们犹如“积木块”一样,可以搭建出各种界面丰富功能灵活的应用程序。所以,可以认为API函数是构筑整个Windows框架的基石,在它的下面是Windows的操作系统核心,而它的上面则是各种功能的Windows应用程序。当时,因为缺乏良好的Windows编程平台,程序员想编写具有Windows风格的软件,必须借助API,API也因此而被赋予至高无上的地位。相应地,程序员还必须熟记一大堆常用的API函数,而且还得对Windows操作系统有深入的了解。
随着软件技术的不断发展,在Windows平台上很快出现了很多优秀的可视化编程环境(诸如VB、VC ++、DELPHI等),程序员可以采用“即见即所得”的编程方式来开发具有精美用户界面和功能强大的应用程序。但实际上,要真正开发出更灵活、更实用、更具效率的应用程序,必然要涉及到直接的API函数调用;对于比较复杂和特殊的功能来说,使用类库和控件往往难以实现,这时就需要采用API函数来实现。
【提示】关于钩子技术
Windows操作系统是建立在事件驱动机制之上的,系统各部分之间的沟通也都是通过消息的相互传递而实现的。但在通常情况下,应用程序只能处理来自进程内部的消息或是从其他进程发过来的消息,如果需要对在进程外传递的消息进行拦截处理就必须采取一种被称为HOOK(钩子)的技术。钩子是Windows操作系统中非常重要的一种系统接口,用它可以轻松截获并处理在其他应用程序之间传递的消息,并由此可以完成一些普通应用程序难以实现的特殊功能。钩子的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入到系统。值得注意的是,钩子技术成为许多种Windows软件的核心技术,例如屏幕抓词、垃圾邮件过滤、软件界面高级定制等。
微软软件开发技术二十年回顾-API篇(转)的更多相关文章
- 微软软件开发技术二十年回顾-MFC篇
三. MFC篇 Windows API是面向过程的接口,因此对于当时的编程技术来说,它是完美无缺的.但是,随着人们逐渐使用C++进行Windows程序的开发,迫切需要建立与Windows API的面向 ...
- 微软软件开发技术二十年回顾-COM、OLE、ActiveX及COM+篇
本文摘自:http://www.job168.com/info/read_100394.html 微软的许多技术,如OLE.ActiveX.以及DirectX等都是基于COM技术而建立起来的.微软本身 ...
- 微软软件开发技术二十年回顾-Windows DNA篇
五. Windows DNA篇 微软的Windows分布式因特网应用体系(简称Windows DNA)是微软创建新一代高适应性商业解 决方案的框架,它使公司能够充分地挖掘数字神经系统的优点.Windo ...
- 微软软件开发技术二十年回顾-.NET框架篇
六. .NET框架篇 .NET是微软自从发布Windows 3.0以来最为激动人心的新技术,是微软战略上为下一个十年对服务器和桌面软件工程的第一步,是微软的一场世纪大豪赌.对于.NET,微软的定义是, ...
- fir.im Weekly - 2016 移动开发技术大回顾
2016 年是移动技术发展迅速的一年,认认真真回顾这一年必不可少.@移动开发前线 的 这篇 2016移动开发技术巡礼 ,精心盘点了 2016 年 移动开发技术大事件,分为 iOS/Android平台篇 ...
- 粮草先行——Android折叠屏开发技术点番外篇之运行时变更处理原则
上一篇文章中,我们有提到Activity在屏幕尺寸发生变更时的处理方式,总共有两种: 重启APP以适应屏幕改变: 手动处理数据,避免APP重启. 同样,这两种方式也同时适用于改变屏幕方向.更改系统语言 ...
- javac选项以递归方式编译给定目录下的所有Java文件 - IT屋-程序员软件开发技术分享社区
http://www.it1352.com/539276.html #Linux $ find -name“* .java”> sources.txt $ javac @ sources.txt ...
- 快速全面了解QT软件界面开发技术
快速全面了解QT软件界面开发技术 目录 前言 一. 学习QT可能的目的是什么? 只想体验一下QT? 当前的项目选择了用QT. 为将来做QT技术储备. 二. QT的核心技术优势是什么? QT在软 ...
- nw.js桌面软件开发系列 第0.1节 HTML5和桌面软件开发的碰撞
第0.1节 HTML5和桌面软件开发的碰撞 当我们谈论桌面软件开发技术的时候,你会想到什么?如果不对技术本身进行更为深入的探讨,在我的世界里,有这么多技术概念可以被罗列出来(请原谅我本质上是一个Win ...
随机推荐
- 阿里云应用高可用 AHAS 正式商用,可一键提升云上应用可用性
在分布式架构环境下,服务间的依赖日益复杂,可能没有人能说清单个故障对整个系统的影响,构建一个高可用的分布式系统面临着很大挑战. 7月17日,阿里云应用高可用服务AHAS 正式商用,包含架构感知.流控降 ...
- 网络流24题 最小路径覆盖(DCOJ8002)
题目描述 给定有向图 G=(V,E) G = (V, E)G=(V,E).设 P PP 是 G GG 的一个简单路(顶点不相交)的集合.如果 V VV 中每个顶点恰好在 P PP 的一条路上,则称 P ...
- 使用R拟合分布
使用R拟合分布 几个常用的概率函数介绍 这里,参考R语言实战,以及[Fitting Distribution with R]的附录. 一.认识各种分布的形态 1.1 连续型随机变量的分布 首先,我们来 ...
- MUI - 引导页制作
引导页制作 本文的引导页和[官方的引导页示例](https://github.com/dcloudio/mui/blob/master/examples/hello-mui/examples/guid ...
- LeetCode109 Convert Sorted List to Binary Search Tree
Given a singly linked list where elements are sorted in ascending order, convert it to a height bala ...
- @NOIP2018 - D1T2@ 货币系统
目录 @题目描述@ @题解@ @代码@ @题目描述@ 在网友的国度中共有 n 种不同面额的货币,第 i 种货币的面额为 a[i],你可以假设每一种货币都有无穷多张.为了方便,我们把货币种数为 n.面额 ...
- mysql的root密码忘记解决方
mysql的root密码忘记解决方 没关注第一步,直接从第二步开始,(可以参看上一篇,先停止mysql服务).然后从第二步开始. 我启动mysql用的命令是/etc/init.d/mysql sta ...
- @bzoj - 3749@ [POI2015] Łasuchy
目录 @description@ @solution@ @version - 1@ @version - 2@ @accepted code@ @version - 1@ @version - 2@ ...
- HZOJ 砍树
考试时打了个暴力T40,正解是整除分块???完全没听过……而且这题居然还有人A了…… 整除分块 暴力就不说了,直接上正解: 将d除过去,右边向下取整(显然不能向上取整啊,会超k的)这个不用处理,整除就 ...
- 13 Free GIS Software Options: Map the World in Open Source
13 Free GIS Software Options: Map the World in Open Source A LIST OF FREE OPEN SOURCE MAPPING SOFT ...