浅谈windowsapi编程

浅谈windowsapi编程

ID:33212617

大小:91.00 KB

页数:17页

时间:2019-02-22

浅谈windowsapi编程_第1页
浅谈windowsapi编程_第2页
浅谈windowsapi编程_第3页
浅谈windowsapi编程_第4页
浅谈windowsapi编程_第5页
资源描述:

《浅谈windowsapi编程》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、浅谈WindowsAPI编程2007年10月20日星期六20:29WinSDK是编程中的传统难点,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制……WinSDK是编程中的传统难点,曾经听有一个技术不是很好的朋友乱说什么给你API谁都会用,其实并非那么简单,个人写的WinAPI程序也不少了,其实之所以难就难在每个调用的API都包含着Windows这个操作系统的潜规则或者是windows内部的运行机制。首先来谈谈句柄,初学习WinSDK的朋友刚看到这个词头大了吧?其实我也是了,我们来看看pr

2、ogrammingwindows里面是怎么说的,一个句柄仅仅是用来识别某些事情的数字。它唯一的标识这当前的一个实例。这样说确实不容易懂。那么我们这么看,比如你打开windows自带的计算器。你多打开几次是不是桌面上出现了很多个计算器呢?你使用其中一个计算器的时候当你按下等于按钮的时候运算结果是否会出现在其他的计算机结果栏里?不会,那windows怎么知道让结果出现在哪里呢?这就是句柄的作用了,句柄唯一的标识着一个程序,你打开的每一个窗口(计算器)都有一个不同的句柄你你每一步操作都是指定了在某个句柄下的,所以,他不会出错。而且你打开的每一个计算机都共享着同样的代码和内存。通过句柄系统会

3、把所需的资源充分的调用到当前的某个程序自己的数据区。不仅是窗口,各种菜单,GDI对象都有自己的句柄,获取句柄的手段也是多重多样,不过当然是通过调用API函数实现了,如:MFC中的hHandle=GetSafeHandle();API编程中的hBrush=GetStorkObject(BLACK_BRUSH);很多操作都需要将句柄添加到参数列表中,当你没有直接定义句柄变量的时候可能要记忆很多API的返回类型来间接获取。如:     hPen=SelectObject(hdc,GetStockObject(&logicpen));//SelectObject()这个函数在设置本设备描述表

4、下的GDI对象时会返回设置前的GDI对象句柄MoveToEx(hdc,pt1.x,pt1.y,&apt);LineTo(hdc,pt2.x,pt2.y);SelectObject(hdc,hPen);完成选择自定义的GDI对象的操作。句柄的种类很多,掌握一种的使用方法所有的不学自通,WinAPI编程永远伴随的元素中句柄是其中之一。非常重要。由于是浅谈,所以就说到这里了.接下来是windows下的消息映射机制了,呵呵,窗口过程,刚学的朋友难理解吧?WinSDK编程基于C,但是和C的理念有着完全的不同,这中间的不同,在我看来最多的也就是来自于这个消息映射,后面什么吹的很炫的Hook技术,

5、木马技术,键盘截获,都是来自于特殊消息的捕捉,映射自定义的特殊消息来实现的(当然和我接下来谈的稍微有点不同)。首先我们应该先明白消息和事件的区别,Windows是消息驱动的操作系统,这里的消息的产生来自于某个实例化的对象上用户的操作,来自控件,菜单,或者是系统本身产生的,而事件是靠消息触发的,但这也不是绝对的。可以用一个简单的例子去解释,我这里越写越觉得自己难表达清楚,就比如这么一个例子:“某男杀人这条消息导致被枪毙这个事件”不过最重要的区别是在消息产生后并不会被直接处理,而是先插入windows系统的消息队列,然后系统判断此消息产生于哪个程序,送入此程序的消息循环,由LRSULTC

6、ALLBACKwinprc(hwnd,uint,wParam,lParam)处理。而事件是操作系统处理消息的过程中反馈的结果。用户操作->产生消息->发送系统->系统判断来源->发给相应的窗口过程或者其他Callback函数->消息处理->等待下一条消息的产生以上为消息循环整个过程。     LRSULTCALLBACKwinprc(hwnd,uint,wParam,lParam);intWINAPIWinMain(…){MSGmsg;RegisterClass(…);//注册窗口类CreateWindow(…);//创建窗口ShowWindow(…);//显示窗口UpdateWin

7、dow(…);While(GetMessage(&msg,…)){//消息循环TranslateMessage(…);DispatchMessage(…);}LRSULTCALLBACKwinprc(hwnd,uint,wParam,lParam);//窗口过程函数,用于映射switch语句中各个需要被处理的消息{While((UINT)message){Switch(message)Case…Case…………Default……….}}以上是最基本的Win

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。