前言:
奔三的时候开始学win32编程.为了生活,嘎嘎。。。。
废话少说,我的学习安排是:win32程序设计(老外经典的那个)->罗云彬的win32汇编->然后工具使用->具体写外挂.
俺有Linux C的一些开发经验,王爽汇编已经看过了.
补充:下面有朋友问我是那两本书(Charles Petzold著的《Windows程序设计》(以VC来讲解)。另一本是罗云彬著的《Windows环境下32位汇编语言程序设计》)
下面留下我学习的脚印.
4-5:
________________________________________________________________
工具不能少,安装VC6,不过那个创天的VC6建议大家别安装,老是编译的时候死机,无奈换了个。
MSDN不能少啊,要不怎么叫学windows编程呢.这些东西通过迅雷都能找到.咱中国人就是多,好多人乐于奉献,什么精简版本都有,哈哈.
Windows运作机制的核心是一个称作「动态链接」的概念。Windows提供了应用程序丰富的可呼叫函数,大多数用于实作其使用者接口和在视讯显示器上显示文字和图形。这些函数采用动态链接库(Dynamic Linking Library,DLL)的方式撰写。这些动态链接库是些具有.DLL或者有时是.EXE扩展名的文件,在Windows 98中通常位于\WINDOWS\SYSTEM子目录中,在Windows NT中通常位于\WINNT\SYSTEM和\WINNT\SYSTEM32子目录中。
在早期,Windows的主要部分仅通过三个动态链接库实作。这代表了Windows的三个主要子系统,它们被称作Kernel、User和GDI。当子系统的数目在Windows最近版本中增多时,大多数典型的Windows程序产生的函数呼叫仍对应到这三个模块之一。Kernel(日前由16位的KRNL386.EXE和32位的KERNEL32.DLL实现)处理所有在传统上由操作系统核心处理的事务-内存管理、文件I/O和多任务管理。User(由16位的USER.EXE和32位的USER32.DLL实作)指使用者接口,实作所有窗口运作机制。GDI(由16位的GDI.EXE和32位的GDI32.DLL实作)是一个图形设备接口,允许程序在屏幕和打印机上显示文字和图形。
上面这话可要记住啊
然后写了一下书上的第一个程序,简单熟悉了一下VC.
Unicode部分介绍了一下宽字符问题,这个也需要明白怎么回事
窗口和消息部分介绍了win的消息机制,这个一定要看明白消息怎么运作,不然后面的都死翘翘了.我来用我的文字阐述一下对这部分的理解。用户键盘鼠标等操作会产生消息,windows本身有个消息队列。咱们写的程序里面有个读取win消息队列的循环交给自己写的消息处理函数,在消息处理函数里面定义了的消息根据我们自己的处理方式处理,没有定义的消息全部扔给win默认的消息处理函数,我们就不用管了.那个窗口的例程大家一定要理解,窗口类别和窗口的关系,为类别设置消息处理函数,这些都是基本的基本,起码要理解,有点熟悉先。
4-6:输出文字
________________________________________________________________
哈哈,昨晚忙着看视频去了,现在才开始看书.
WM_PAINT消息什么情况下产生,书上列出来了。然后就是昨晚我没看明白的有效矩形和无效矩形的概念.啥叫无效矩形呢,现在我的理解就是之前被遮挡过的那部分叫做无效矩形,需要重汇。windows系统一般自动保存了一个PAINTSTRUCT 结构,这个结构代表的就是需要重汇的无效矩形区域."hdc参数是「设备内容句柄」,它是GDI的重要部分。实际上,每个GDI函数都需要将这个句柄作为函数的第一个参数。"这个话要记住.这一章的实例主要是拿滚动条说事.对竖的滚动条会产生 WM_VSCROLL消息,具体这个消息的细节可以通过LOWORD (wParam)得到然后做相应的处理。这里我想说两个问题,一定要打开VC6调试调试代码,增加动手能力。另一个问题就是,很多细节我也没记住或者没完全明白,但是整体了解了整体意思也就跳过了。我个人感觉应该如此.
4-9:图形基础
____________________________________________________________________
(关于字体分成几个部分的那个图和解释,我没看懂,没时间追究了跳过跳过,以后有实际需要再研究)
组成GDI的几百个函数呼叫可以分为几大类:取得(或者建立)和释放(或者清除)设备内容的函数 ;取得有关设备内容信息的函数;绘图函数;设定和取得设备内容参数的函数;使用GDI对象的函数.
取得设备内容句柄的几种方法:
hdc = BeginPaint (hwnd, &ps) ;
其它行程序
EndPaint (hwnd, &ps) ;
hdc = GetDC (hwnd) ;
其它行程序
ReleaseDC (hwnd, hdc) ;
hdc = GetWindowDC (hwnd) ;
其它行程序
ReleaseDC (hwnd, hdc) ;
hdc = CreateDC (pszDriver, pszDevice, pszOutput, pData) ;
其它行程序
DeleteDC (hdc) ;
取得设备内容信息:iValue = GetDeviceCaps (hdc, iIndex) ;
这里差句题外话,如果是初学的人要注意多看看.H的头文件,从里面你会能解决很多问题。
引用一句话“在第一章,我们谈论过Windows图形设备接口将图形输出设备的设备驱动程序与计算机连在一起的方式。在理论上,只要提供SetPixel和GetPixel函数,就可以使用图形设备驱动程序绘制一切东西了。其余的一切都可以使用GDI模块中实作的更高阶的例程来处理。例如,画线时,只需GDI呼叫SetPixel数次,并适当地调整x和y坐标。”这话的含义我认为说明了屏幕显示都是由像素点组成,只要一个一个像素去控制显示,就能控制显示的一切.画笔是用来填线,画刷天封闭的几何图形.
窗口原点、视端口原点、窗口范围和视端口范围-与映像方式密切相关。在TextOut中,以及在几乎所有GDI函数中,这些坐标值使用的都是一种「逻辑单位」。Windows必须将逻辑单位转换为「设备单位」,即图素。这种转换是由映像方式、窗口和视端口的原点以及窗口和视端口的范围所控制的。映像方式还指示着x轴和y轴的方向(orientation);也就是说,它确定了当您在向显示器的左或者右移动时x的值是增大还是减小,以及在上下移动时y的值是增大还是减小。
此章的最后部分讲解了两个图形有部分交集的时候怎么处理。我也只是稍微看了看。因为我觉得win32学习的话.关键是熟悉熟悉,心中有个大概框架,不必每个细节弄的很通很透。这样会打击你的自信。过了一段时间你也还是忘记。实际上我认为熟悉了框架,最重要的是你知道有这么个东西。但你有实际要写的东西的时候,你要知道去找什么资料。我觉得也就差不多了.
4-15:键盘
____________________________________________________________________
有些应用程序可能有多个窗口,键盘必须由该应用程序内的所有窗口共享。程序用来从消息队列中检索消息的MSG结构包括hwnd字段。此字段指出接收消息的窗口控件码。消息循环中的DispatchMessage函数向窗口消息处理程序发送该消息,此窗口消息处理程序与需要消息的窗口相联系。在按下键盘上的键时,只有一个窗口消息处理程序接收键盘消息,并且此消息包括接收消息的窗口控件码。应用程序从Windows接收的关于键盘事件的消息可以分为按键和字符两类.wParam消息参数含有的虚拟键码,而lParam消息参数则含有对了解按键非常有用的其它信.
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)