windows操作系统基础知识 API+DLL

版权声明:本文为博主原创文章,转载记得附上原链接哟~已更新博客地址showmeshell.top https://blog.csdn.net/Everywhere_wwx/article/details/78680312

windows操作系统

1.Win API简介

API:Application Programming Interface(应用程序接口)
API函数构筑了整个windows框架的基石,下面是操作系统的操作系统的核心,而它上面则是windows应用程序。

用于16位版本windows的API——>win16
用于32位版本windows的API——>win32(windows 9x/NT/2000/XP/2003


windows9x是16+32位混合体,windowsNT/2000/XP纯32位
API函数调用从win16到win32的转变中保持兼容,并在功能和数量上不断增强。

**windows 9x/NT/2000/XP/2003的工作方式
windows NT/2000/xp win16函数调用通过一个转换层被转化为win32函数调用,然后被操作系统处理。
windows 9x 相反,win32函数调用转换层转换为win16位函数调用,再由操作系统处理。

2.操作系统运转核心:动态链接

windows提供了应用程序可利用的丰富的函数调用,这些函数采用动态链接库(DLL)

早期的windows的主要部分只需要在三个动态链接库中实现,代表了windows三个主要子系统:Kernel,User,GDI

Kernel(16位KRNL386.EXE+32位KERNEL32.DLL实现):操作系统核心功能服务,包括进程与线程控制,内存管理,文件访问;

User(16位USER.EXE+32位USER32.DLL实现):负责处理用户接口,包括键盘和鼠标输入,窗口和菜单管理;

GDI(16位GDI.EXE+32位GDI32.DLL实现):图形设备接口,允许程序在屏幕和打印机上显示文本和图形;
还有其他很多 比如:

ADVAPI32.DLL:对象安全性,注册表操作
COMCTL32.DLL:通用控件
COMDLG32.DLL:公共对话框
SHELL32.DLL:用户界面外壳
DIBENG.DLL:图形引擎
NETAPI32.DLL:网络

3.常用win32API函数:

API函数区分字符集:A表示ANSI,W表示widechars即(unicode)
1.hmemcpy函数

void hmemcpy(
    void _huge* hpvDest, // 目的数据地址
    void _huge* hpvSource,// 源数据地址
    long cbCopy//// 数据大小 (字节)
); 

这个函数位于KERNEL32.DLL中,它很常用,俗称万能断点,但一般的编程书籍上很少提到,原因它是底层的东西,没有特殊需要,一般不直接调用。但的确它是很有用的!有意思的是它执行的操作很简单,只是将内存中的一块数据拷贝到另一个地方。
注意:此函数只在Windows 9x系统上有效,在Win NT/2000系统上相关的函数是memcpy,但在Win NT/2K上不同于Windows 9x上,很少再调用memcpy来处理数据了,用此函数设断基本上什么也拦不住。

2.GetWindowText函数
此函数在USER32.DLL用户模块中,它的作用是取得一个窗体的标题文字,或者一个文本控件的内容
函数原型:

int GetWindowText(
    HWND hWnd,          //窗口或文本控件句柄
    LPTSTR lpString,    //缓冲区地址
    int nMaxCount       //复制的最大字符数
);

16位:GetWindowText
32位:GetWindowTextA,GetWindowTextW

3.GetDlgItem函数:
此函数在USER32.DLL用户模块中,它的作用是获取指定对话框的句柄。
函数原型:

HWND GetDlgItem(
    HWND hDlg,          //对话框句柄
    int nIDDlgItem      //控件标识
);

4.GetDlgItemText函数:
此函数在USER32.DLL用户模块中,它的作用是获取对话框文本。
函数原型:

UINT GetDlgItemText(
    HWND hDlg,          // 对话框句柄
    int nIDDlgItem,     //控制标识(ID)
    LPTSTR lpString,    //文本缓冲区指针
    int nMaxCount       // 字符缓冲区的长度
);

16位:GetDlgItemText
32位:GetDlgItemTextA,GetDlgItemTextW

5.GetDlgItemInt函数:
此函数在USER32.DLL用户模块中,它的作用是获取对话框整数值。函数原型:

UNIT GetDlgItemInt(
    HWND hDlg,          //对话框句柄
    int nIDDlgItem,     //控件标识
    BOOL *IpTranslated, //接受成功/失败指示的指针
    BOOL bSigned        //指定是有符号数还是无符号数
);

成功,IpTranslated ->true 返回文本对应的整数值;失败 false 返回值0

6.MessageBox函数
此函数是在USER32.DLL用户模块中,它的作用创建、显示信息框。
函数原型:

int MessageBox(
    HWND hWnd,           //父窗口句柄
    LPCTSTR lpText,      //消息框文本地址
    LPCTSTR lpCaption,   //消息框标题地址
    UINT uType           //信息框样式
);

16位:MessageBox
32位:MessageBoxA,MessageBoxW

4.句柄(Handle)
handle在windows中使用非常频繁,是windows标识,由应用程序建立或使用的对象所使用的一个唯一的整数值(通常32位)

5.windows 9x与unicode
windows 9x 系统上其他成百上千的函数只提供了接受unicode参数的进入点,但是这些函数并不将unicode字符串转化成ANSI字符串,只返回运行失败的消息。这些函数只有ANSi版本才能正常运行,所以,如果要为window9x系统开发软件,只能用ANSI版函数开发应用程序,unicode版本的程序在windows 9x下无法正常运行。

6.windows NT/2000/XP 与unicode
在NT架构下,win32API能接受unicode和ASCII两种字符,而其内核则使用unicode。
windows 2000/xp既支持unicode,也支持ANSI,所有新增和未过时的函数在windows 2000/xp中都同时拥有ANSI和unicode版本

7.windows消息机制
windows是一个消息(Message)驱动式系统,windows消息提供应用程序与应用程序之间,应用程序与windows系统之间进行通信的手段。
应用程序想要实现的功能由消息来触发,并且靠对消息的响应和处理来完成。
message——>系统消息队列——>拷贝——>应用程序队列——>检索发生——>窗口函数

windows常用的消息函数:
1.SendMessge函数
调用一个窗口的窗口函数,将一条消息发给那个窗口,除非消息处理完毕,否则该函数不会返回

LRESULT SendMessge(
    HWND hwnd,              //目的窗口的句柄
    UINT Msg,               //消息标志符
    WPARAM wParam,          //消息的WPARAM域
    LPARAM lParam           //消息的LPARAM域
);

2.WM_COMMAND消息
当用户从菜单或按钮中选择一条命令或者一个控件时发送给它的父窗口,或者当一个快捷键被释放时发送,(0111h)

WM_COMMAND
    wNotifyCode=HIWORD(wParam);//通告代码
    wID=LOWORD(wParam);        //菜单条目,控制或快捷键的标识符
    hwndCtl=(HWND) lParam;     //控件句柄

3.WM_DESTROY消息
当一个窗口被破坏时发送,WM_DESTROY消息的十六进制是02h
无参数

4.WM_GETTEXT消息
应用程序发送一天WM_GETTEXT消息,将一个对应窗口的文本拷贝到一个呼叫程序提供的缓冲区中,(0Dh)

WM_GETTEXT
    wParam=(WPARAM) cchTextMax; //需要拷贝的字符数
    lParam=(LPARAM) lpszText;   //接受文本的缓冲区地址

返回值:被拷贝的字符数

5.WM_QUIT消息
当应用程序调用PostQuitMessage函数时,生成消息WM_QUIT。(012h)

WM_QUIT
    nExitCode=(int) wParam;     //退出代码

6.WM_LBUTTONDOWN消息
当光标在一个窗口的客户区并且用户按下鼠标左键时,WM_LBUTTONDOWN消息被发送。如果鼠标动作未被捕获,这条消息被发送给光标下的窗口;否则,被发送给已经捕获鼠标动作的窗口。(0201h)

WM_LBUTTONDOWN
    fwKeys=wParam;              //key旗标
    xPos=LOWORD(lParam);        //光标的水平位置
    yPos=HIWORD(lParam);        //光标的垂直位置

8.保护模式简介:
在保护模式下,所有的应用程序都有权限级别(PL) 0~3
0特权级别最高。3最低
Ring0:操作系统核心层
Ring3:用户态,用户应用程序。

如想控制系统,就必须获得Ring0,比如调试工具SoftICE就是工作在0之上的。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页