操作系统的作用之一就是屏蔽一些复杂的直接对硬件操作,并提供给用户一个简单明确的应用接口,类外对于一些基本的或常用的操作也以API的形式提供给用户,比如内存管理、文件管理等。

消息传递机制

消息循环是一个进程(线程)活动的源动力。一个进程(线程)再启动并初始化以后便进入了消息循环,它不断处理传递给它的信息,从而不断推动进程(线程)向前运行。

Win32应用程序框架中的消息循环部分:

1 while(GetMessage(&msg, NULL, 0, 0))
2 {
3 if(!TranslateAccelerator(msg, hwnd, hAccelTable, &msg))
4 {
5 TranslateMessage(&msg);
6 DispatchMessage(&msg);
7 }
8 }

首先,GetMessage()从进程(其实是进程的主线程)的消息队列中获取一个信息,如果队列中没有消息,则GetMessage()函数将等待一个消息的到来以后才返回。

然后函数TranslateAccelerator()判断该消息是不是一个按键消息并且是一个加速键消息,如果是,则该函数将把几个按键消息转换为一个加速键消息传递给窗口的回调函数。处理了加速键以后,函数TranslateMessage()将把两个按键消息WM_KEYDOWN和WM_KEYUP转换成一个WM_CHAR,注意:消息WM_KEYDOWM和WM_KEYUP仍将传递给窗口的回调函数。

在这些处理以后,DispatchMessage()函数将把此消息发送给该消息指定的串口中已设定的回调函数。如果消息为WM_QUIT则GetMessage()函数将返回0,从而退出while循环而结束进程。

WinMain()函数的前两个参数hInstance和hPrevInstance

1 // WinMain()函数原型
2 int WINAPI WinMain(
3 HINSTANCE hInstance,
4 HINSTANCE hPrevInstance,
5 LPSTR lpCmdLine,
6 int nCmdShow);

WinMain()函数的hInstance是系统为其分配的进程实例句柄,hPrevInstance是该程序在同一地址空间上已装载的实例句柄,由于在Windows 95以及以后的Windows版本都是独立的进程空间,因此它的值总是NULL。

如何在程序中调用API函数

在程序中调用一个API函数,需要注意以下几点:

1) 该API函数是否在用户的系统平台上可用。

2) 是否声明了(#include)含有该API函数定义的头文件。

3) 是否告诉链接程序(Link.EXE)链接含有该API实现的库文件。

另外还要注意该函数特定的一些注意事项,例如一些参数在使用前必须初始化等。

 <参考文献>Windows API程序设计参考大全/求是科技/ISBN 7-115-14167-3

Windows API 简介的更多相关文章

  1. Windows API 调用示例

    Ø  简介 本文主要记录 Windows API 的调用示例,因为这项技术并不常用,属于 C# 中比较孤僻或接触底层的技术,并不常用.但是有时候也可以借助他完成一些 C# 本身不能完成的功能,例如:通 ...

  2. Windows API教程文件系统

    本篇文章主要介绍了"Windows API教程文件系统",主要涉及到Windows API教程文件系统方面的内容,对于Windows API教程文件系统感兴趣的同学可以参考一下. ...

  3. 火币网API文档——REST 行情、交易API简介

    REST API 简介 火币为用户提供了一套全新的API,可以帮用户快速接入火币PRO站及HADAX站的交易系统,实现程序化交易. 访问地址 适用站点 适用功能 适用交易对 https://api.h ...

  4. C#调用Windows API(示例:显示任务管理器里的程序名称)

    作为初学者来说,在C#中使用API确是一件令人头疼的问题. 在使用API之前你必须知道如何在C#中使用结构.类型转换.安全/不安全代码,可控/不可控代码等许多知识. 在.Net Framework S ...

  5. API简介(二)

    API简介(二) API简介(一)一文中,介绍了使用API的目的.设计.发行政策以及公共API的含义,本篇主要介绍API的用法,从库和框架.操作系统.远程API.Web API四个方面展开. 库和框架 ...

  6. C# Windows API

    API:应用程序接口(API:Application Program Interface)应用程序接口(API:application programming interface)是一组定义.程序及协 ...

  7. Windows API 函数列表 附帮助手册

    所有Windows API函数列表,为了方便查询,也为了大家查找,所以整理一下贡献出来了. 帮助手册:700多个Windows API的函数手册 免费下载 API之网络函数 API之消息函数 API之 ...

  8. Windows API Hooking in Python

    catalogue . 相关基础知识 . Deviare API Hook Overview . 使用ctypes调用Windows API . pydbg . winappdbg . dll inj ...

  9. 初识【Windows API】--文本去重

    最近学习操作系统中,老师布置了一个作业,运用系统调用函数删除文件夹下两个重复文本类文件,Linux玩不动,于是就只能在Windows下进行了. 看了一下介绍Windows API的博客: 点击打开 基 ...

随机推荐

  1. python学习笔记02-简单游戏

    一拖又过去快一个月了,哭聊.. 惰性千万不要有.. 今天简单接触一下条件语句 一个简单的文字游戏 1 print('----第一个文字游戏----') 2 temp = input('猜一下现在心里想 ...

  2. SpringCloud 面试题 (持续更新、吐血推荐)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  3. 「模拟8.18」字符串(卡特兰数)·乌鸦喝水(树状数组,二分)·所驼门王的宝藏(tarjan,拓扑)

    最近好颓啊,所以啥都做不出来 简单说一下这次考试,分机房了,还分不同考卷,果然我还是留在二机房的蒟蒻, 大概也只有这样的简单题,才能勉强水个rank 3吧........ 其实不必管在哪个机房,努力便 ...

  4. NOIP模拟测试21「折纸&#183;不等式」

    折纸 题解 考试时无限接近正解,然而最终也只是接近而已了 考虑模拟会爆炸,拿手折纸条试一试,很简单 考你动手能力 代码 #include<bits/stdc++.h> using name ...

  5. 再试Hibernate框架

    几个月前因为学习需要第一次接触了Hibernate(之前一直在用MyBatis),后来觉得有点难,也急着找工作,所以就没继续学下去了.但是找工作的时候发现Hibernate的需求更高,使用率更高,所以 ...

  6. ASW 工作流最佳实践(二):使用 ASW 并发调用函数

    在音视频转码.ETL 作业处理.基因数据处理等诸多场景中,我们都可以通过工作流并行调用云函数,将任务进行并行处理,大大提高任务处理的吞吐量,满足应用场景的高实时性.高并发能力. 在<使用 ASW ...

  7. C语言:C99 中的37个关键字

    一.数据类型关键字(12个): 1.char [tʃɑ:]:声明字符型变量或函数 2.double [ˈdʌbəl] :声明双精度变量或函数 3.enum :声明枚举类型 4.float [fləut ...

  8. 2、centos6和centos7的区别

    services使用了systemd来代替sysvinit管理. systemd是Linux下的一种init软件,由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证 ...

  9. vue v-if条件判断

    <view class='circle-G' v-if="item.status === 'G'"></view> <view class='circ ...

  10. linux 中获取进程和kill进程的几种方法

    ps: ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进程正在运行和运行的状态.进程是否结束.进程有没有僵尸.哪些进程占用了过多的资源等等. 注意:ps是显示瞬间进程的状态, ...