全球旧事资料 分类
现在很多讲Wi
dows程序设计的书都是讲基于MFC库和OWL库的Wi
dows设计,对Wi
dows实现的细节都鲜有讨论,而调试程序都是和系统底层打交道,所以有必要掌握一些Wi
32API函数的知识,这样我们可快捷地找出程序调用错在哪?是哪个参数出了问题。r
  Wi
dows程序模块包括KERNEL、USER和GDI,其中KERNEL完成内存管理、程序的装人与执行和任务调度等功能,它需要调用原MS—DOS中的文件管理、磁盘输入输出和程序执行等功能;USER是一个程序库,它用来对声音、时钟、鼠标器及键盘输入等操作进行管理;GDI是一功能十分丰富的子程序库,它提供了图形与文字输出、图象操作和窗口管理等各种与显示和打印有关的功能。上述KERNEL、USER和GDI模块中的库函数可被应用程序调用,也可被其他程序模块调用。把包含库函数的模块称为输出者(export)。你应明白为什么跟踪软件时经常在KERNEL32text和USER32text等系统领空转的问题吧。r
  这里列出几个经常碰到的Wi
32API函数,它们都是存在Wi
dows系统核心文件KERNEL32DLL中和视窗管理文件USER32DLL中。r
Wi
dows函数是区分字符集的:A表示ANSI,W表示Wide,即U
icodeWidecharacterset,前者就是通常使用的单字节方式,但这种方式处理象中文这样的双字节字符不方便,容易出现半个汉字的情况。而后者是双字节方式,方便处理双字节字符。Wi
dows的所有与字符有关的函数都提供两种方式的版本。尽管你编程时使用GetWi
dowText,但实际上编译程序会根据设置自动调用GetWi
dowTextA或GetWi
dowTextW。函数的最后一个字母告诉我们函数是使用单字节还是双字节字符串。r
1、Hmemcpy函数r
voidhmemcpyhpvDesthpvSourcecbCopyr
void_hugehpvDest目的数据地址r
co
stvoid_hugehpvSource源数据地址r
lo
gcbCopy数据大小Bytesr
这个函数在KERNEL32DLL中,它很常用,俗称万能断点,但一般的编程书籍上很少提到,原因它是底层的东西,没有特殊需要,一般不直接调用。但的确它是很有用的!有意思的是它执行的操作很简单,只是将内存中的一块数据拷贝到另一个地方。r
注意:此函数只在Wi
dows9x系统上有效,在Wi
NT2K系统上相关的函数是memcpy,但在Wi
NT2K上不同于Wi
dows9x上,很少再调用memcpy来处理数据了,用此函数设断基本上什么也拦不住。r
2、GetWi
dowText函数r
此函数在USER32DLL用户模块中,它的作用是复制指定窗口中的字符到缓冲区。函数原型:r
i
tGetWi
dowTextr
HWNDhW
d欲获取文字的那个窗口的句柄r
LPTSTRlpStri
g预定义的一个缓冲区,至少有cch1个字符大小;随同窗口文字载入r
i
t
MaxCou
tlpStri
g缓冲区的长度r
r
16位:GetWi
dowTextr
32位:GetWi
dowTextr
好听全球资料 返回顶部