微软软件开发技术二十年回顾-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 ...
随机推荐
- Tumblr,instapaper分享
<div id="bshare-custom"> <a title="分享到Tumblr" id="bshare-tumblr&qu ...
- 网络流24题 最小路径覆盖(DCOJ8002)
题目描述 给定有向图 G=(V,E) G = (V, E)G=(V,E).设 P PP 是 G GG 的一个简单路(顶点不相交)的集合.如果 V VV 中每个顶点恰好在 P PP 的一条路上,则称 P ...
- hdu3549 最大流
#include<stdio.h> #include<string.h> #include<queue> #define MAXN 1010 using names ...
- int 和bigint差别有多大?
https://bbs.csdn.net/wap/topics/230059600 请问在mysql中int和bigint差别有多大?在什么情况下需要用到bigint? bigint 带符号的范围是- ...
- 17.使用android_studio开发libgdx
以前用eclipse开发libgdx,由于每次开机都会自检一遍安卓环境,觉得慢,就把安卓项目包给关掉了,结果再打开资源目录发生了变化,导致安卓打包不了,所以决定尝试使用as开发 首先安装as,导入gd ...
- HTTP请求模型
HTTP请求模型 HTTP请求模型 一.连接至Web服务器一个客户端应用(如Web浏览器)打开到Web服务器的HTTP端口的一个套接字(缺省为80). 例如:http://www.myweb.com: ...
- F4NNIU 的 Docker 学习资料整理
F4NNIU 的 Docker 学习资料整理 Docker 介绍 以下来自 Wikipedia Docker是一个开放源代码软件项目,让应用程序部署在软件货柜下的工作可以自动化进行,借此在Linux操 ...
- python 浮点型(float)
- 洛谷P2820 局域网
#include<bits/stdc++.h> using namespace std; ; ; int n,k,sum,tot; struct node{ int cnt,fa; }f[ ...
- hdu 5744 Keep On Movin (2016多校第二场)
Keep On Movin Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...