SDK (Software Development Kit) 软件开发工具包

Windows应用接口程序接口(API)(应用程序<--------->操作系统<--------->输出输入设备)

A:API(Application Programming Interface,应用编程接口)
B:内核对象(用户模式和内核模式权限级别)
  • 内核:M0到M3
  • 用户:M0和M3(最低权限与最高权限)
  • 操作系统内部的受保护只能通过指定API来访问的对象
C:句柄(操作系统的内核对象的ID )
D:消息机制(查阅相关文档补全笔记)
  • Windows是消息驱动的操作系统
  • 系统将各种输入封装成一个消息结构体(包含输入的种类和输入的相关信息),通过回调的方式,调用应用程序实现的输入处理函数
Windows程序与console程序
进程间的内存隔离(每个进程分配4G内存,高2G系统内存指向同一块区域,低2G用户内存都是独立的)
  • 虚拟内存

    • 系统空间(高地址):0X80000000-0XFFFFFFFF
    • 用户空间(低地址):0X00000000-0X7FFFFFFF
  • 物理内存:
  • 线程:一个进程可以有多个线程
任务
  • Windows:多任务
  • console(DOS):单任务
入口函数
  • windows:WinMain
  • console:main
链接选项
  • Windows:/SUBSYSTEM:WINDOWS
  • console:/SUBSYSTEM:CONSOLE
WinMain解析

来源:Windows Platform SDK

系统调用WinMain函数作为基于windows的应用程序的初始入口点。
头文件:Windows.h
int WINAPI WinMain(HINSTANCE hInstance,      // handle to current instance,实例句柄,代表应用层本身,实际上是可执行文件在内存中的首地址HINSTANCE hPrevInstance,  // handle to previous instanceLPSTR lpCmdLine,          // command lineint nCmdShow              // show state
);
  • Parameters

    • hInstance 当前实例的句柄
    • hPrevInstance 前一个实例的句柄。这个参数总是NULL。如果需要检测另一个实例是否已经存在,请使用CreateMutex函数创建一个惟一命名的互斥对象。即使互斥对象已经存在,CreateMutex也会成功,但是GetLastError函数将返回ERROR_ALREADY_EXISTS。这表示应用程序的另一个实例存在,因为它首先创建了互斥锁。
    • lpCmdLine 指向一个以null结尾的字符串的指针,该字符串指定应用程序的命令行,但不包括程序名。要检索整个命令行,请使用GetCommandLine函数。
    • nCmdShow 显示窗口
      • SW_HIDE 隐藏窗口并激活另一个窗口。
      • SW_MAXIMIZE 最大化指定的窗口。
      • SW_MINIMIZE 最小化指定的窗口并按Z顺序激活下一个顶级窗口。
      • SW_RESTORE 激活并显示窗口。如果窗口被最小化或最大化,系统会将其恢复到原来的大小和位置。应用程序应该在恢复最小化窗口时指定此标志。
      • SW_SHOW 激活窗口并显示其当前大小和位置。
      • SW_SHOWMAXIMIZED 激活窗口并将其显示为最大化窗口。
      • SW_SHOWMINIMIZED 激活窗口并将其显示为最小化窗口。
      • SW_SHOWMINNOACTIVE 不激活窗口,将窗口显示为最小化窗口。类似于sw_show。
      • SW_SHOWNA 不激活窗口,显示窗口的当前大小和位置。类似于SW_SHOW,。
      • SW_SHOWNOACTIVATE 不激活窗口,显示窗口的最新大小和位置。类似于SW_SHOWNORMAL,。
      • SW_SHOWNORMAL 激活并显示窗口。如果窗口被最小化或最大化,系统会将其恢复到原来的大小和位置。应用程序应该在第一次显示窗口时指定此标志。
  • Return Values
    • 如果函数成功,当它接收到WM_QUIT消息时终止,它应该返回该消息的wParam参数中包含的退出值。如果函数在进入消息循环之前终止,它应该返回零。
  • Remarks
    • 您的WinMain应该初始化应用程序,显示其主窗口,并输入一个消息检索和分派循环,该循环是应用程序其余执行的顶级控制结构。当接收到WM_QUIT消息时终止消息循环。此时,WinMain应该退出应用程序,返回在WM_QUIT消息的wParam参数中传递的值。如果WM_QUIT是由于调用PostQuitMessage而接收到的,那么wParam的值就是PostQuitMessage函数的nExitCode参数的值。有关更多信息,请参见创建消息Lo
    • ANSI应用程序可以使用WinMain函数的lpCmdLine参数访问命令行字符串,但不包括程序名。WinMain不能返回Unicode字符串的原因是lpCmdLine使用LPSTR数据类型,而不是LPTSTR数据类型。GetCommandLine函数可以用于访问命令行中的Unicode字符串,因为它使用LPTSTR数据类型。
MessageBox解析

来源:Windows Platform SDK

头文件:Windows.h
使用:User32.lib
在所有平台上实现为Unicode和ANSI版本。Microsoft Layer也支持Unicode。
ASCII:MessageBoxA
Unicode:MessageBoxWC兼容宏    _T    _UNICODE  #include <tchar.h>
SDK兼容宏  TEXT  UNICODE   #include <windows.h>int MessageBox(HWND hWnd,          // handle to owner window  LPCTSTR lpText,     // text in message box  LPCTSTR lpCaption,  // message box title  UINT uType          // message box style
);
  • MessageBox函数创建、显示和操作一个消息框。消息框包含应用程序定义的消息和标题,以及预定义图标和按钮的任何组合。
  • Parameters
    • hWnd 要创建的消息框的所有者窗口的句柄。参数为NULL,消息框没有父窗口。
    • lpText 指向以null结尾的字符串的指针,该字符串包含要显示的消息。
    • lpCaption 指向以null结尾的字符串的指针,该字符串包含对话框标题。参数为NULL,使用默认的标题.
    • uType 指定对话框的内容和行为。指示消息框中显示的按钮
  • Return Values(如果函数失败,返回值为零。要获取扩展的错误信息,请调用GetLastError,如果函数成功,返回值是以下菜单项值之一。)
    • IDABORT 终止
    • IDCANCEL 取消
    • IDCONTINUE 继续
    • IDIGNORE 忽略
    • IDNO 否
    • IDOK 确定
    • IDRETRY 重试
    • IDTRYAGAIN 再试一次
    • IDYES 是
  • Icon
    • MB_ICONEXCLAMATION, MB_ICONWARNING 感叹号
    • MB_ICONINFORMATION, MB_ICONASTERISK 由小写字母i组成的图标。
    • MB_ICONQUESTION 问号
    • MB_ICONSTOP, MB_ICONERROR, MB_ICONHAND 停止标志
  • Buttons
    • MB_ABORTRETRYIGNORE 中止、重试、忽略
    • MB_CANCELTRYCONTINUE 取消、重试、继续
    • MB_HELP 当用户单击Help按钮或按F1时,系统向所有者发送WM_HELP消息。
    • MB_OK 默认值,ok
    • MB_OKCANCEL ok、取消
    • MB_RETRYCANCEL 重试、取消
    • MB_YESNO 是、否
    • MB_YESNOCANCEL 是、否、取消
  • Modality(重点有关线程,后期补充查阅资料文档)
    • MB_APPLMODAL
    • MB_SYSTEMMODAL
    • MB_TASKMODAL
  • Default Button
    • MB_DEFBUTTON1,MB_DEFBUTTON2,MB_DEFBUTTON3,MB_DEFBUTTON4 第N个按钮是默认按钮
  • 其他
    • MB_DEFAULT_DESKTOP_ONLY
    • MB_RIGHT
    • MB_RTLREADING
    • MB_SETFOREGROUND
    • MB_TOPMOST
    • MB_SERVICE_NOTIFICATION
    • MB_SERVICE_NOTIFICATION_NT3X
typedef 说明宏解析 例:
HWND H WND H-handle WND-window  句柄 窗口对象
HPROCESS H-handle PROCESS-Process 句柄 进程对象
HINSTANCE H-handle INSTANCE-instance 句柄 应用程序实例
HICON H-handle ICON-icon  句柄 图标
LPCWSTR LP C W STR LP-long point指针 C-const W-wchar_t STR-说明性,字符串
展开例子:
DECLARE_HANDLE(HINSTANCE);
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
struct HINSTANCE__
{int unused;
};typedef struct HINSTANCE__ *HINSTANCEtypedef void* HINSTANCE

####### 创建一个窗口的六要素

  • 设计注册窗口类
  • 创建窗口实例
  • 显示窗口
  • 更新窗口
  • 实现消息循环
  • 实现窗口回调

Windows API 调用??????

事件驱动,消息响应???????

####书籍学习资料推荐

  • SDK(windows程序设计第5版)
  • MFC+QT(深入浅出MFC,QTCreator快速入门,QT4Gui编程)
  • Windows编程(动态库,静态库,多线程,进程间操作)(Windows核心编程)
  • 网络编程(upd,tcp,icmp,http,异步模型–select,iocp)(linux 网络编程)
  • 数据库(SQL语句)
  • COM

作业:
手工书写一个Windows版本的SDK程序
将Demo中的WinMain函数改为C语言的main,并在链接的时候用/subsystem:console参数会有什么不同
不包含Windows.h,弹框 “Hello, world!”

NPSTRN   : NULLP   : pointSTR : 说明性,字符串LPSTRL   : longP   : pointSTR : 说明性,字符串PSTRP   : pointSTR : 说明性,字符串LPCSTRL   : long P   : pointC   : constSTR : 说明性字符串PCSTRP   : pointC   : constSTR : 说明性字符串

SDK第一课(Windows SDK编程入门)相关推荐

  1. 【梅哥的Ring0湿润插入教程】第一课Windows内核/驱动编程概述及应用、商业驱动保护软件原理分析...

    [梅哥的Ring0湿润插入教程] Email:mlkui@163.com 转载请注明出处,谢绝喷子记者等,如引起各类不适请自觉滚J8蛋! 第一课Windows内核/驱动编程概述及应用. 商业驱动保护软 ...

  2. C语言探索之旅 | 第二部分第一课:模块化编程

    C语言之父 Dennis Ritchie -- 简书作者 谢恩铭 转载请注明出处 第二部分第一课:模块化编程 上一课是C语言探索之旅 | 第一部分第十课:练习题+习作,至此,我们[C语言探索之旅]的第 ...

  3. C# Windows 窗体编程入门详解

    C# Windows 窗体编程入门详解 基于Web的B/S架构应用程序近年来确实非常流行,B/S易于部署.易于维护的特点使Web应用程序开发得到了前所未有的发展.但是,Web应用程序的缺点是,它们有时 ...

  4. c语言程序第一章编程,c语言程序的设计第一章 C语言编程入门.ppt

    c语言程序的设计第一章 C语言编程入门 第1章 C语言编程入门 本章是本书的入门篇,专为初学者熟悉编程过程.掌握程序结构而准备的. 本章学习目标 ? 1)? 能够通过模仿与改变来构造带有测试函数的C语 ...

  5. Windows网络编程入门:简单的客户端和服务器通信程序调试

    昨日入手Windows网络编程经络这本书,第一章给了Echo客户端和服务器的简单通信实例程序.从小白到入门目测都是比较苦逼,居然想不到怎么来测试结果.什么同时运行啊.分别编译运行啊乱七八糟的想法就开始 ...

  6. Windows MFC编程入门——应用程序框架

    一.SDK应用程序与MFC应用程序运行过程对比 程序运行都要有入口函数,在C/C++程序中都是main函数,而windows应用程序的入口函数是WinMain或wWinMain.MFC程序也是从这个入 ...

  7. python编程入门第一课教案_python编程从入门到实践 第一课:输入输出

    #print()函数使用 messger="hello python world!" print(messger) hello python world! 1.使用"#& ...

  8. c语言windows驱动编程入门,Windows驱动开发技术详解 PDF扫描版[175MB]

    Windows驱动开发技术详解由浅入深.循序渐进地介绍了windows驱动程序的开发方法与调试技巧.本书共分23章,内容涵盖了windows操作系统的基本原理.nt驱动程序与wdm驱动程序的构造.驱动 ...

  9. 字节青训营第一课之go语言入门的笔记和总结

    有幸参加了字节跳动举办的青训营活动,主要是go语言的编程实践,我将会整理课程的笔记和总结,欢迎关注! 1Go语言简介 由于Go语言有语法简单.高性能等特点,因此国内外各大公司如谷歌.腾讯.字节等都在使 ...

最新文章

  1. Hive MetaStore 在快手遇到的挑战与优化
  2. 中兴智能视觉大数据报:要注意,人工智能将衍生更多工作机会
  3. 【转】QString 与中文问题
  4. utxo模型_什么是UTXO?简析账户/余额模型和UTXO模型
  5. Swin Transformer升级版来了!30亿参数,刷榜多项视觉任务
  6. Bootstrap手机网站开发案例
  7. java 内存泄漏 工具_Java剖析工具JProfiler入门使用教程:查找内存泄漏的方法
  8. 在Java中处理异常
  9. 导出oracle数据c#代码,C# 程序导入导出oracle数据库
  10. dev项目属性按钮是灰色_如何当按钮处于各种交互状态时具有不同样式的按钮?...
  11. Type safety: The method add(Object) belongs to the raw type List. References to generic type List<E>
  12. 测试先知和启发式方法
  13. [luoguP3332] [ZJOI2013]K大数查询(树套树)
  14. 【 CPLEX安装】
  15. Windows 微软雅黑(Microsoft YaHei)+ Monaco 字体整合方案
  16. 能学习计算机考证的手机软件有那些?推荐
  17. 二进制与十进制的转换
  18. LINGO进行灵敏度分析为何总提醒92/237错误
  19. OpenJ_Bailian - 2692 假币问题
  20. pdf文件如何删除其中一页内容

热门文章

  1. 华为手机居然还能这样提高续航?简单设置一下,一天一充很轻松
  2. 惠州市城市职业学院计算机考点,2020广东乡镇惠州考区笔试考点地理位置及考场安排表...
  3. 基于ssm+jsp的大学生体能训练营管理系统毕业设计源码211633
  4. 系统架构设计师论文历年考题(2015-2017)考前冲刺来一波真题
  5. 前端 传表格多条数据 给后台接收 (HTML前端表格多条数据JSON封装后;异步提交到后台处理)
  6. 当计算机没有网时,怎么连接网络?
  7. Vue和layUI的区别何在?
  8. HEVC帧内预测参考相邻帧代码解析
  9. 魔方还原神器,有了它,没有还原不了的魔方(15)
  10. 用JavaScript写的一个摇号程序(随机数)