关于windows api我的一点点愚见

之前我一直对windows api命名和用法感到很困惑,但是经过一些实践后再看回《windows程序设计》,对windows api有了自己的一些看法

1.首先windows是闭源的,所以可能由于安全性,或者人为设计漏洞等可能原因,而导致windows有些api调用看起来方式很怪异。

例如windows会用句柄来表示资源,很多时候会存在获取句柄,然后传句柄给api,然后再释放句柄,个人感觉这个方法有点麻烦。。。

好吧,其实c函数的fopen这类的操作也是要自己调用fclose,这是无可避免的吗?

还有就是很多windows回调函数,入口函数,api函数等会带WINAPI 和 CALLBACK等关键字,这些函数主要都是用来和Windows内核通讯用的,他们都被定义为stdcall,这是一种函数调用约定,参考这里,

我觉得就是为了与windows进行通讯所以规定使用的一套函数调用的规则,可以这样认为凡是会与windows进行交互的函数都会加WINAPI之类的修饰关键字?

2.windows存在兼容性,所以可能在api在更新过程中有些东西的设计思路可能会改变了,

或者一些新的api设计理念会与之前的不同(这个可能我要进一步了解才能有例子,我只是认为不可能一味兼容,应该是会有进步的)。

然而虽然有些东西在进步了,但是为了兼容旧版本的程序可能会有一些历史遗漏的误导点。

例如消息处理中的wParam和lParam,引用一段《windows程序设计》的解释:

WndProc 的第三和第四个参数分别被定义为WPARAM 和LPARAM,

这些名字的来源有点历史背景:当Windows 还是16位元系统时,WndProc 的第三个参数被定义为一个WORD,

这是一个16 位元的 无正负号短 (unsigned short)整数,而第四个参数被定义为一个LONG,

这是一个32 位元有正负号长整数,从而导致了文字「PARAM」前面加上了前置字首「W」和「L」。

当然,在32 位元的Windows 中,WPARAM 被定义为一个UINT,而LPARAM被定义为一个LONG(这就是C 中的long 整数型态),

因此视窗讯息处理程式的这两个参数都是32位元的值。这也许有点奇怪,

因为WORD资料型态在Windows98中仍然被定义为一种16 位元的 无正负号 整数,因此「PARAM」前的「W」就有点误用了。

还有就是带p,lp等的参数,再引用一段解释:

在这里提示一下资料型态和匈牙利表示法:其中的lpfn 字首代表「指向函数的长指针」。

(在Win32 API 中,长指标和短指标(或者近程指标)没有区别。这只是16 位元Windows 的遗物。)

3.为了简单而用别名缩写,为了明确而进行别名重定义,

例如它会用UINT表示unsigned int,我觉得这可能是和以前没有自动补全功能有关,程序员宁愿少打几行字所以定义了一些缩写。

4.关于匈牙利命名法,Windows api参数名字用到了匈牙利命名法。同时有些api函数名称,也可能会带参数类型。

例如SetWindowLong和SetWindowLongPtr,因为我觉得函数名带参数类型实在有点不习惯,初接触时还不知道加个Long表示的是什么,所以觉得这些名字很别扭。

暂时个人接触到的一些觉得有点神奇的点主要是上面这些,如果还有进一步的体会,可能会继续写下去。

windows总觉得奇奇怪怪。。。。同时这只是我一些愚见,以后可能还会修正,不能作为参考依据,所以要更深入更准确的解释,请找巨巨去吧。。。。

时间: 2024-08-14 02:11:01

关于windows api我的一点点愚见的相关文章

Windows API 编程学习记录<二>

恩,开始写Windows API编程第二节吧. 上次介绍了几个关于Windows API编程最基本的概念,但是如果只是看这些概念,估计还是对Windows API不是很了解.这节我们就使用Windows API 让大家来了解下Windows API的用法. 第一个介绍的Windows API 当然是最经典的MessageBox,这个API 的作用就是在电脑上显示一个对话框,我们先来看看这个API的定义吧: int WINAPI MessageBox(HWND hWnd, LPCTSTR lpTe

Windows API 编程学习记录<三>

恩,开始写API编程的第三节,其实马上要考试了,但是不把这节写完,心里总感觉不舒服啊.写完赶紧去复习啊       在前两节中,我们介绍了Windows API 编程的一些基本概念和一个最基本API函数 MessageBox的使用,在这节中,我们就来正式编写一个Windows的窗口程序. 在具体编写代码之前,我们必须先要了解一下API 编写窗口程序具体的三个基本步骤:             1. 注册窗口类:             2.创建窗口:             3.显示窗口: 恩,

WinSpy涉及的windows api

WinSpy涉及的windows api WinSpy是仿造微软Spy++的开源项目,但只涉及Spy++的窗口句柄.窗口的属性.styles.类名子窗口.进程线程信息等查找功能.功能虽然不算强大,但涉及到很多windows api,是了解windows api的一个有用工具.WinSpy界面截图如下: 1:拖拽瞄准镜图标获取窗口的HWND 核心api:ClientToScreen.WindowFromPoint.EnumChildWindows.GetParent.GetWindowLong.S

Delphi Windows API判断文件共享锁定状态

一.概述 锁是操作系统为实现数据共享而提供的一种安全机制,它使得不同的应用程序,不同的计算机之间可以安全有效地共享和交换数据.要保证安全有效地操作共享数据,必须在相应的操作前判断锁的类型,然后才能确定数据是否可读或可写,从而为开发出健壮的程序提供切实依据.   同样,在Windows中,文件可以共享模式打开,它也涉及到锁的操作问题.根据Windows中文件共享时加锁范围的大小,锁可分为全局锁和局部锁:全局锁以锁定文件全部内容为特征,而局部锁以锁定文件的局部内容为特征,且文件的锁定区域不可重复.根

Windows API所提供的功能可以归为七类

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

Windows API的消息处理机制

上个学期找实习失利,让我觉得自己基础打得不够牢固,所以在华为实习的这三个月里,每天下班都在复习理论课的知识,顺便刷了一个月的 LeetCode.本来以为找工作是势在必得了,结果这个学期秋季校招的坑爹经历导致现在还没有拿到一家公司的 offer.华为实习一结束,回学校的第二天就去参加了 360 在广州的笔试,进了面试以后却又喜闻乐见地一面就被干掉了.再加上之前 milo yip 大大对我提的建议,思来想去,感觉还是自己的简历不够拿得出手.现在开始都没剩下几家想进的公司了,为了不失业只能提早为明年的

Windows API 教程(七) hook 钩子监听

Windows API 教程(七) hook 钩子监听 Posted on 2013-08-15 茵蒂克丝 如何创建一个窗口 手动创建窗口的流程 实际代码 安装钩子 (Install hook) 钩子简介 SetWindowsHookEx 函数 设置监听[键盘]消息 设置监听[鼠标]消息 如何创建一个窗口 另外一个再录的 Windows SDK教程 里面有讲到快捷创建窗口的方式,不过这样的话要分好几个文件,感觉有点混所以这里就用原始的方式创建一个窗口. 那么,为什么讲到 hook(钩子)的时候要

VC Windows API获得桌面所有窗口句柄的方法

VC Windows API应用之GetDesktopWindow ——获得桌面所有窗口句柄的方法 Windows API Windows 这个多作业系统除了协调应用程序的执行.分配内存.管理资源…之外, 它同时也是一个很大的服务中心,调用这个服务中心的各种服务(每一种服务就是一个函数),可以帮应用程式达到开启视窗.描绘图形.使用周边设备等目的,由于这些函数服务的对象是应用程序(Application), 所以便称之为 Application Programming Interface,简称 A

Windows API 大全

常用Windows API1. API之网络函数WNetAddConnection 创建同一个网络资源的永久性连接WNetAddConnection2 创建同一个网络资源的连接WNetAddConnection3 创建同一个网络资源的连接WNetCancelConnection 结束一个网络连接WNetCancelConnection2 结束一个网络连接WNetCloseEnum 结束一次枚举操作WNetConnectionDialog 启动一个标准对话框,以便建立同网络资源的连接WNetDis