Visual Basic将程序员和错综复杂的Windows操作系统屏蔽开来,从而提供了一种有效快速的应用程序开发环境。这只是一种折衷,它良好的开发简易性和快速性会导致较差的性能,并损失了灵活性和可控制性。幸运的是,Visual Basic是可以扩展的;当VB隐藏的细节妨碍了应用程序开发时,你总可以通过直接调用Win32应用程序编程接口(API)来弥补VB的缺点。\r\n 《Visual Basic Win32 API编程》面向的对象是中级和高级VB程序员,他们对在自己的应用程序中组合Windows的系统服务非常感兴趣。为了帮助程序员实现这个目的,这本书集中讲述两个方面内容:Windows NT和Windows 9x操作系统的基本操作。因为微软的文档很少考虑为了调用Win32 API函数读者需要知道什么内容。Win32 API中的主要函数。在讨论Win32 API时,这本书首先说明如何从Visual Basic代码中调用Win32 API,然后解释如何有效地使用主要的Win32 API函数。\r\n 在说明如何在应用程序中使用Win32 API时,这本书集中解释了如何完成范围广泛的、从简单到复杂的各种实用编程任务,包括:获得基本的系统信息,例如操作系统的版本。在一个列表框事添加制表键停止。向注册表和私有配置文件中写数据,或从它们中获得数据。使两个VB应用程序同步,让它们协同工作。枚举系统中可得到的字体。建立控件的子类,从而产生特殊的动作。侵入另一个应用程序的地址空间,可以读写它的数据并执行它的代码。安装显示器挂钩或者改变鼠标或键盘的行为。\r\n 本书提供了Visual Basic程序员成为真正高手所需要的背景知识和信息,帮助程序员清除在调Win32 API时经常发生的错误。\r\n
前言\r\n\r\n第一部分 使用VB声明API函数\r\n\r\n第一章 介绍\r\n\r\nWin32 API是什么?\r\n在VB下使用Win 32 API编程的困难\r\n小心前进\r\n注意\r\n\r\n第二章 预备知识\r\n\r\n字符编码\r\n形式参数和实参数\r\n动态链接库\r\nVC++中使用的一些语法\r\n指针\r\n\r\n第三章 API的声明\r\n\r\nVB的声明语句\r\n由VC到VB的翻译原则\r\n将参数传递到一个外部函数\r\nCopyMemory——一个VB黑客的梦想\r\n处理API错误\r\n\r\n第四章 数据类型\r\n\r\n数据类型是什么?\r\n基本和派生数据类型\r\nVisual Basic的数据类型\r\n基本的VC++数据类型\r\n转换导出数据类型\r\nWin 32的Typedef\r\n一个例子\r\n结构和用户定义类型\r\n标志\r\n符号常量\r\n\r\n第五章 有符号和无符号数据类型\r\n\r\n有符号和无符号的表示\r\n为什么要使用两种表示方法?\r\n无符号表示法\r\n有符号表示法\r\n在有符号和无符号表示法之间进行转换\r\n字长间的转换\r\n\r\n第六章 字符串\r\n\r\nBSTR\r\nC中的LPSTR和LPWSTR类型的字符串\r\n字符串术语\r\n研究字符串的工具\r\n使用VB进行字符串转换\r\n将字符串传递给Win32 API\r\n字符串和字节数组\r\n得到一个用户定义类型变量的地址\r\n\r\n第七章 系统信息函数\r\n\r\n计算机名称\r\n特殊的Windows路径\r\n操作系统的版本\r\n系统度量\r\n系统参数\r\n系统颜色\r\n\r\n第八章 异常处理\r\n\r\n防止一般保护性错\r\n替换缺省的异常处理程序\r\n替换的异常处理程序\r\n一个完整的例子\r\n\r\n第二部分 Windows操作系统\r\n\r\n第九章 Windows的结构\r\n\r\n进程和线程\r\nWindows结构\r\nWindows 9x与Windows NT之间的差异\r\n\r\n第十章 对象和它们的句柄\r\n\r\n句柄\r\n例子:文件映射\r\n\r\n第十一章 进程\r\n\r\n进程句柄和标识符\r\n模块句柄\r\n进程的识别\r\n进程伪句柄\r\n列举进程\r\n这个应用程序已经运行了吗\r\n\r\n第十二章 线程\r\n\r\n线程句柄和线程标识符\r\n线程优先权\r\n线程同步\r\n机警的等待\r\n\r\n第十三章 Windows的内存结构\r\n\r\n内存类型\r\n一个进程的地址空间\r\n例子:使用GetSystemIInfo\r\n分配虚拟内存\r\n例子:使用GlobalMemoryStatus\r\n虚拟内存管理\r\n内存堆\r\n例子:映射虚拟内存\r\n\r\n第十四章 PE文件\r\n\r\n模块重定位\r\nPE文件的格式\r\n例子:得到PE文件的信息\r\n\r\n第三部分 Windows(USER32.DLL编程)\r\n\r\n第十五章 Windows:基础\r\n\r\n术语 \r\n窗口类型\r\n拥有窗口\r\nZ顺序\r\n枚举窗口\r\n大小和位置函数\r\n\r\n第十六章 Windows消息\r\n\r\n线程的消息队列\r\nWindows的消息系统\r\n投递和发送消息\r\n例子:向列表框发送消息\r\n进程调度\r\n在进程间复制数据\r\n本地输入状态\r\n\r\n第十七章 窗口类和窗口创建过程\r\n\r\n窗口类\r\n预定义的窗口类\r\n一个窗口类的窗口过程\r\n创建一个窗口\r\n窗口风格\r\n窗口和VB控件\r\n例子:监视窗口\r\n\r\n第十八章 Windows子类\r\n\r\n建立一个窗口或窗口类的子类\r\n例子:建立VB复选框类的子类\r\n\r\n第十九章 Windows挂钩\r\n\r\n全局和线程专有挂钩\r\n设置挂钩\r\n挂钩过程\r\n挂钩类型\r\n挂钩链\r\n例子:一个局部挂钩\r\n例子:一个全局挂钩\r\n\r\n第二十章 动态链接库的注入和外部进程的访问\r\n\r\n访问一个外部进程:挂钩线程图\r\n分配外部内存\r\n例子:外部控件提取\r\n例子:修改VB帮助系统\r\n\r\n第四部分 Windows图形设备接口(GDI32.DLL编程)\r\n\r\n第二十一章 位图\r\n\r\n矩形\r\n位图\r\n位图函数\r\n在菜单中使用位图\r\n\r\n第二十二章 设备上下文I:概述\r\n\r\nWindows如何处理窗口绘制\r\n设备上下文\r\n\r\n第二十三章 设备上下文II:设备上下文的类型\r\n\r\n信息设备上下文\r\n内存设备上下文\r\n打印机设备上下文\r\n显示器设备上下文\r\n坐标系\r\n\r\n第二十四章 设备上下文III:坐标系\r\n\r\nGDI坐标系\r\n虚拟空间\r\n设备空间\r\n页空间\r\n虚拟空间到物理空间\r\n在物理空间中建立逻辑坐标系\r\n映射方式\r\n世界空间\r\n\r\n第二十五章 字体\r\n\r\n字体系列\r\n字体技术\r\n字符集\r\n逻辑和物理字体\r\n枚举字体\r\n\r\n第五部分 附录\r\n\r\n附录一 剪贴板\r\n附录二 Windows Shell\r\n附录三 注册表和私有配置文件\r\n\r\n词汇表\r\n\r\n
这本书所面向的读者是中级或更高级的VB程序员, 它有两个目标:
使用 VB5. 0或6. 0描述Win32 API并使用它编写程序.
描述Windows 9x和Windows NT操作系统的基本操作. 如你所知道的, Win 32应用程序编程接口, 或简称为Win 32 API, 是用来编程控制Windows操作系统的编程接口. 说得更具体一些, Win 32 API由一组包含在动态链接库中的函数和子程序组成, 通过它们可以编程访问操作系统的功能. 因为Win 32 API在扩展VB的功能方面有巨大的应用前景, 所以上面提到的第一个目标就理所当然更具有实用价值. 虽然第二个目标的实用价值要小一些, 但是它也同样重要, 因为微软的文档很少考虑读者知道和不知道什么. 因此介绍一下Windows操作系统的基础知识, 将会有助于VB程序员更好地理解微软的文档. 当然, 这两个目标并非毫无关系. 事实上, Win 32 API的目的就是实现Windows操作系统所提供的服务(你也可以称之为功能). 因此, 为了理解Win 32 API函数, 对Windows自身的工作机理有一些了解就变得很重要了. 我还需要指出的是, 本书不是一本关于Win 32 API的百科全书. 我的目的是为你提供充足的信息以使你对Windows操作系统和Win 32 API有一个全面的了解, 并使你具备使用微软文档的能力.
先决条件
本书的先决条件很简单:你需要具有中等或更高水平的VB4. 0或其更新版本的知识, 并有使用VB在Windows系统编程的渴望. 你可能因为一个特殊的目的而这样做, 也可能因为你正在编写一个特殊的应用程序, 这个应用程序中有一些要求使用VB不能达到, 或者仅仅是因为想学习更多的Windows工作机理, 但又不想经历使用VC++进行Windows编程所带来的非常困难的学习过程.
你在学习本书时不需要具备VC++. C++或C的背景知识, 也不需要使用Win 32 API的经历.
光盘上的内容
本书所附带的光盘包括了几个我们将会在书中讨论的应用程序. 你可能想使用这些应用程序或者修改它们以适应你自己的特殊需要. 但是请你注意, 这些应用程序是作为学习了具而不是商业级的应用程序而编写的. 例如, 它们的错误处理代码非常少, 而且同为我对应用程序在不同的屏幕分辨率下工作的问题考虑较少, 所以应用程序在有些应用界面下会显得有些粗糙.
你还需要注意:只能自己使用这些代码, 而不能销售或传播它们. 顺便提一下, rPi前缀经常出现在大多数Roman出版公司发行的应用程序的名字中, 这个公司是我自己的计算机业务咨询和出版公司. 如果你发现应用程序中有严重的问题, 或者你对使用或修改某一应用程序有特别的兴趣, 请通过电子邮件或通过网址www. Romanpress. com和我联系, 如果能收到你的建议和要求我将非常感谢.
rpiAPI. bas和rpiExampleCode. bas
光盘内的标准VB6代码模块rpiAPI.bas包含有声明和大部分本书例子中使用的重要的实用程序代码. 其他不太重要的一次性代码包含在rpiExampleCode. bas模块中. 两者之间的差异是, 你可以在自己的项目中使用rpiAPI. bas中的代码, 但是包含在rpiExampleCode. bas中的代码可能只会使用一次. 应用程序下面是一些本书中讨论的并且包含在光盘中的应用程序例子.
rpiAllocMemory 用来演示rpiAccessProcess. dll的例子, 这个动态链接库可以使用一个外部进程来执行内存的分配. 数据的传输, 以及其他工作.
rpiBitBlt位图函数的演示程序.
rpiClipViewer剪贴板阅读器应用程序.
rpiEnumProcs NT和rpiEnumProcs 95 用来显示系统中当前进程的应用程序.
rpiEnumWins用来显示系统中当前有多少窗口的应用程序.
rpiFileMapping演示文件存储映像的应用程序.
rpiGLoblHook 使用rpiGlobalHook. DLL来演示全局鼠标挂钩(hook)的应用程序.
rpiLocalHook 演示局部鼠标挂钩的应用程序.
rpiPEINfo检索可执行文件信息的应用程序.
rpiSpyWin 检索一个窗口信息的应用程序.
rpiSubClass演示subclassing的应用程序.
rpiThreadSync演示线程同步的程序(互斥. 事件和信号).
rpiDLL 一个具有某些不同性质函数的动态链接库, 包括rpiVarPtr, 这个函数的功能 和VB中未在正式文件中讲述过的(与非字符串变量有关的)函数VarPtr相同, 而且还可以模拟StrPtr函数的功能. 另外这个动态链接库中还包括函数rpiGetTargetByte. rpiGetTargetInteger. rpiGetTargetLong和rPiGetTarget64, 它们允许在VB中间接的访问地址.
rpiUsageCount. dll 一个可以用来表明VB应用程序当前运行时间的动态链接库.
rpiAPIData应用程序
光盘上还包括一个名为rpiAPIData的文件, 这个文件基本上是包括下列项目的一个数据库的简化版.
超过6000个Win 32常量和它们的值
超过1500个VB类型的API函数声明
大约1000个消息标识符
大约200个类型常量
超过400个结构数据类型声明
超过600个Win 32数据类型声明
图0-1和图0-2显示了这个应用程序的主窗口. 这个应用程序可以用来在VB项目中使用的函数. 常量. 类型和其他声明. 你甚至可以把这个应用程序转化成一个VB的附加项, 我发现这一点非常有用. 如果, 你需要了解如何创建VB附加项的信息, 我建议你可以参考我在O'Reilly出版的另一本书《Developing Visual BaiscAdd-ins》.
资源和参考资料
不论是在VC++还是VB中, 进行与Win 32相关的编程注定很复杂. 为了使你事半功倍, 你需要有好的参考资料. 除了这本书以外, 我还向你推荐以下资料.
正如你所知道的, 在开发第6版时, 微软把Visual Studio(VB6. VC6. VJ6等)的文档全部移植到它的MSDN库中, VB6本身附带此文档库. 因此, 你不仅可以得到VB6的帮助文档, 同时还可以得到VC6和Win 32 API的帮助文档. 在使用VB进行Win 32 API编程时, 无疑这是一个最有用的文档. 事实上, 这几乎是我使用的唯一的帮助文档. 另外, Visual Studio中所包含的MSDN库被称做MSDN的Visual Studio版. 坦白地说, 我还不能区分这个版本和MSDN的订阅版有什么差异.
本书中使用的不加限制的术语“文档”, 指的就是MSDN库文档.
为了每季都可以更新此文档, 你可以每年花费100美元订阅MSDN. 从 httP://msdn.microsoft.com/即可订阅. 这样做还是物有所值的, 因为MSDN 库除了包括微软的知识库(Knowledge Base)外, 还包括一些非常有用的文章, 而且这些内容会经常更新.
如果你想了解Windows操作系统的更多知识, 我可以向你推荐微软出版的由Jeffrey Richter著的《Advanced Windows》(第三版). 但是你要注意, 这本书中没有使用VB代码, 它严格的使用VC++代码表述, 学习此书会是一个相当繁重的工作. 如果你想了解关于Windows NT的内部工作机理的更多知识, 我向你推荐由David Solomon著的《Inside Windows NT》(第二版), 这本书也是由微软出版的. 但是, 请注意此书非常偏重于技术方面而且里面完全没有包含代码.