计算机编程学习.pdf





《计算机编程学习.pdf》由会员分享,可在线阅读,更多相关《计算机编程学习.pdf(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 计算机编程学习解除Win2000、Windows X P的管理共享在Win2000、Windows X P中有C$、D$、AdminS-类的管理共享,要想解除这类共享只须在注册表里改改就可以了!在 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanman serverparameters里新建DWORD 名称为AutoShareServer,值 为0(零)。用VB程序控制电脑说英语现在,应用Microsoft提供的一套文字朗读引擎(Text-To-SpeechEngine,简称T T S),可以在程序中编写代码来使安装了声卡的电脑流畅的朗
2、读英文。如果安装了“金山词霸2000”,那么Windows文件夹下会有一个Speech文件夹,里面的文件vtxtaulo。Ub文件就包含了有关的类型库和函数,我们完全可以在我们的程序中调用它们,使电脑开口说话。TTS包含在“金山词霸2000”的安装盘上,文件名为mstts。exe和spchapio exeo 要在 VB 程序中调用 T T S,必须首先引用 vtxtautOo Ub 文件中的“VoiceTexll。OTypeLibrary”类型库,然后参考以下代码,电脑就可以说话了:OptionExplicitPrivateSubFomi_Load()CallVTxtAutOo VTxtAut
3、Oo Register(Space(1),Space(1)VTxtAutOo VTxtAutOo Speed=17(T设置语速(170为正常语速,值越小语速越慢)DimstrT xtstrT xt=Hovey ou very much Doyoulovemc?OnErrorGoToErrorHandlcrCallVTxtAuto 0VTxtAutOo Speak(strTxt,vtxtsp_VERYHIGH+vtxtst_READING)MsgBoxnOK!nEndErrorHandler:错误处理语句EndEndSub至于语速、频率等的控制,大家可以在“对象浏览器”里参看相关的控制属性。怎样
4、判断、防止程序重复执行?PrivateSubForm_load()判 断 程 序 是 否 已 经 运 行IfApp o PrcvInstanceThenMsgBox本 程 序 已 经 运 行!,vblnformationOrvbOKOnly,提示信息UnloadMeExitSubEndlf 以下是主要程序.EncISub附:另 一 个 例 子:OptionExplicitPublicSubCheckExist(fmAsForm)防 止 程 序 重 复 执 行DimtitleAsStringlfAppo PrcvInstanccThcntitle=Appo titlcCallMsgBox(这程序
5、已执行”,vbCritical)App。如此才不会 Avtivate 到自己 fm Caption=AppActivatetitleactivate 先前就已运行的程序End结束 EndIfEndSubPrivateSubForm_Load()CallCheckExist(Me)EndSub用V B实现超级链接功能用VB实现超级链接功能A:声明ShellExecute函数;在form上建立labels line控件各一个(myHttpxLinel),再仿照以下代码,即可打开浏览器登录http:/why 100000c at。china。com网站。PrivateDeclareFunctionS
6、hellExecuteLib,shell32。dHAliasShcllExecuteA(ByValhwndAsLong ByVallpOperationAsString,ByVallpFileAsString,ByVallpParametersAsString,By Vai 1 pDirectory AsStri ng,ByValnShowCmdAsLong)AsLongPrivateSubmyHttp_MouseDown(ButtonAsIntcger ShiftAsInteger,XAsSingle,YAsSingle)Linelo Visible=FalseEndSubPrivateSu
7、bmyHttp_MouseMove(ButtonAsInteger,ShiftAsInteger,XAsSingle,YAsSingle)Line 1 o Visible=TnieEndSubPrivateSubForm_MouseMove(Index Aslnteger,ButtonAsInteger,ShiftAsInteger,XAsSingle YAsSingle)Linelo Visiblc=FalseEndSubPrivateSubmyHttp_Click()DimHttpJumpDimMyUrlAsStringMyUrl=http:/why 100000o at。chinao c
8、omHttpJump=ShcllExccute(0&,vbNullString,MyUrl,vbNu 1 1 String,vbNullString,vbNormalFocus)EndSubAPI全功略API全功略(API编程的详细介绍)什么是API首先,有必要向大家讲一讲,什么是API。所谓API本来是为C和C+程序员写的。API说来说去,就是种函数,他们包含在个附加名为DLL的动态连接库文件中。用标准的定义来讲,API就是Windows的32位应用程序编程接口,是一系列很复杂的函数,消息和结构,它使编程人员可以用不同类型的编程语言编制出的运行在Windows95和WindowsNT操作系统
9、上的应用程序。可以说,如果你曾经学过V C,那么A PI对你来说不是什么问题。但是如果你没有学过V C,或者你对Windows95的结构体系不熟悉,那么可以说,学习API将是一件很辛苦的事情。如果你打开WINDOWS的SYSTEM文件夹,你可以发现其中有很多附加名为DLL的文件。一 个DLL中包含的A PI函数并不只是一个,数十个,甚至是数百个。我们能都掌握它嘛?回答是否定的:不可能掌握。但实际上,我们真的没必要都掌握,只要重点掌握Windos系统本身自带的A PI函数就可以了。但,在其中还应当抛开掉同VB本身自有的函数重复的函数。如,V B的etAttr命令可以获得文件属性,SetAltr可
10、以设置文件属性。对A PI来讲也有对应的函数GctFilcAttributes和SetFileAttributes,性能都差不多。如此地一算,剩下来的也就5、600个。是的,也不少。但,我可以敢跟你说,只要你熟悉地掌握100个,那么你的编程水平比现在高出至少要两倍。尽管人们说V B和WINDOWS具有密切的关系,但我认为,API更接近WINDOWS。如果你学会了 A P I,首要的收获便是对WINDOWS体系结构的认识。这个收获是来自不易的。如果你不依靠API会怎么样?我可以跟你说,绝大多是高级编程书本(当然这不是书的名程叫高级而高级的,而是在一开始的 本书内容中指明 本书的阅读对象是具有一定
11、VB基础的读者的那些书),首先提的问题一般大都是从A PI开始。因此可以说,你不学A P I,你大概将停留在初级水平,无法往上攀登。唯一的途径也许就是向别人求救:我快死了,快来救救我呀,这个怎么办,那个怎么办?烦不烦呢?当然,现在网上好人太多(包括我在内,嘻嘻),但,你应当明白,通过此途径,你的手中出不了好的作品。这是因为缺乏这些知识你的脑子里根本行不成一种总体的设计构思。A PI文本游览器 返回很多API函数都是很长很长的。想看什么样子吗?如下就是作为例子的APIDdeClientTransaction函数:DcclareFunctionDdcClicntTransactionLib,use
12、r32(pDataAsByte,ByValcbDataAsLong,ByValhConvAsLong,By ValhszhemAsLong,By Vai wFmt AsLong,By Vai wType AsLong,By ValdwTimeoutAsLong,pdwResultAsLong)AsLong哇!这么长?如果你从来没有接触过A P I,我想你肯定被吓住了。你也许考虑,该不该继续学下去。不过不要担心,幸运的是Microsoft的设计家们为我们提供了有用的工具,这便是API文本查看器。通过API文本查看器,我们可以方便地查找程序所需要的函数声明、结构类型和常数,然后将它复制到剪贴板,最
13、后再粘贴到V B程序的代码段中。在大多数情况下,只要我们确定了程序所需要的函数、结构和常数这三个方面后,就可以通过对API文本游览器的以上操作将他们加入到程序段中,从而程序中可以使用这些函数了。这些是学习API最基本的常识问题,它远远占不到API的庞大的体系内容。今后我们把精力浪费(这绝不是浪费)在哪里呢?那就是:什么时候使用什么函数,什么时候使用什么结构类型,什么时候使用什么常数。API函数声明 返回让我们回想一下。在V B中,如何声明函数呢?我想,如果你正在看此文,那么你绝对能够回答得出这个问题。以下便是你应该很熟悉的函数声明:FunctionSetFocus(ByValhwndAsLon
14、g)AsLong即,这行代码定义了名为SetFocus的函数,此函数具有一个Long型数据类型的参数,并按值传递(ByVai),函数执行后将返回一个Long型数据。A PI函数的声明也很类似,如,A PI中的SetFocus函数是这样写的:DeclareFunctionSetFocusLib,user32,AliasSetFocus,(ByValhwndAsLong)AsLong 有点复杂了一些。是的,是复杂了点。但我可以告诉你,除了这些多出来的部分,其他部分还是和你以前学到的东西是样的。函数在程序中的调用也是一样。如:DimdlAsLongdl&=SetFoucs(Form 1 0 Hwnd
15、)但,一点是清楚的。它不象你自己写的程序那样能够看到里面的运行机理,也不像V B自带的函数那样,能够从V B的联机帮助中查到其用法。唯一的方法就是去学、查V B以外的资料。Declare语句用于在模块级别中声明对动态链接库(D L L)中外部过程的引用。对此,你只要记住任何A PI函数声明都必须写这个语句就可以lib指明包含所声明过程或函数的动态链接库或代码资源。也就是说,它说明的是,函数或过程从何而来的问题。如在上例中,SctFocusLib”user32”说明函数SetFocus来自user32。川文件。主要的dll动态连接库文件W:user32o dllWindows管理。生成和管理应用
16、程序的用户接口。GDI32o d ll图形设备接口。产生Windows设备的图形输出Kernel32o d ll系统服务。访问操作系统的计算机资源。注意,当DLL文件不在Windows或System文件夹中的时候,必须在函数中说明其出处(路径)。如,SetFocusLibc:MydHuser32”函数声明中的Alias是可选的。表示将被调用的过程在动态链接库(D L L)中还有另外的名称(别名)。如,AliasSetFocus,说明SetFocus函数在User320 d ll中的另外一个名称是,SetFocuSo怎么两个名都一样呢?当然,也可以是不同的。在很多情况下,Alias说明的函数名,
17、即别名最后-个字符 经 常 是 字 符A,如SctWindowsText函数的另一个名称是SetWindowsTcxtA,表示为AliasSetWindowsTextAMo这个A只不过是设计家们的习惯的命名约定,表示函数属于ANSI版本。那么,别名窕竟有什么用途呢?从理论上讲,别名提供了用另一个名子调用A PI的函数方法。如果你指明了别名,那么尽管我们按Declare语句后面的函数来调用该函数,但在函数的实际调用上是以别名作为首要选择的。如,以下两个函数(Funciion,ABCD)声明都是有效的,他们调用的是同一个SetFocus函数:DeclareFunctionSetFocusLib,u
18、ser32nSetFocusn(ByValhwndAsLong)AsLongDeclareABCDSetFocusLibuser32AliasSeiFocus(ByValhwndAsLong)AsLong需要注意的是,选用Alias的时候,应注意别名的大小写;如果不选用Alias时的时候,函数名必须注意大小写,而且不能改动。当然,在很多情况下,由于函数声明是直接从API文本游览器中拷贝过来的,所以这种错误的发生机会是很少的,但您有必要知道这一点。最后提醒你一句,API声明(包括结构、常数)必须放在窗体或模块的 通用(GeneralDeclarations)数据类型与“类型安全”返回A PI函数
19、中使用的数据类型基本上和V B中的一样。但作为WIN32的A PI函数中,不存在Integer数据类型。另外点是在API函数中看不到Boolean数据类型。Variant数据类型在A PI函数中是以Any的形式出现,如DataAsAny。尽管其含义是允许任意参数类型作为一个该A PI函数的参数传递,但这样做存在定的缺点。其原因是,这将会使得对目标参数的所有类型检查都会被关闭。这自然会给各种类型的参数调用带来了产生错误的机会。为了强制执行严格的类型检查,并避免上面提到的问题,一个办法是在函数里使用上面提到到Alias技 术。如 对 A P I函 数 GetDIBits可 进行另外一种声明方法。如
20、 下:GctDIBits函 数 的 原 型:PublicDeciareFunctionGetDIBitsLib,gdi32Alias,GetDlBits(ByValaHDCAsLong,ByValhBitmapAsLong,ByValnStartScanAsLong,ByValnNumScansAsLong,IpBitsAsAny,IpBIAsBITMAPINFO ByValwUsageAsLong)AsLongGetDIBits 函数的改型:PublicDeclareFunclionGelD 出 itsLongLib”gdi32Alias”GetDIBits”(ByValaHDCAsLong
21、,ByValhBitmapAsLong,ByValnStartScanAsLong ByValnNumScansAsLong IpBitsAsLong IpBIAsBITMAPINFO,ByValwUsageAsLong)AsLong通过本课程前面所学到的知识,我们已经可以得知原型GetDIBits函数也好,改型GctDIBitsLong函数也好,实际将调用的都是Alias所指定的GctDIBits原函数。但你应当看到,两者的区别在于,我们在改型的函数中强制指定IpBits参数为Long形。这样就会使得函数调用中发生的错误机率减少到了最小。这种方法叫做“安全类型”声明。API函数中经常看到的数
22、据类型有:Long,String,Byte,Any。(也就这些吧。)常数 返回对 于 A PI常数来讲,没有什么太特别的学问。请 看 V B 中的以下代码:Msg=MsgBox(您好,vbOKCancel)我们知道,vbOKCancel这个常数的值等于1。对上面的代码我们完全可以这样写,而不会影响代码的功能:Msg=MsgBox(您好,1)但你大概不太愿意选择后一种,因为这会使得看懂代码费劲起来。这种方法也被API采取了。只是API常数必须在事情之前做好初始化声明VB本身是看不懂的。其内容仍然来自与API文本游览器。具体形式如下等等:PublicConstABM_ACTIVATE=&H6Pub
23、licConstRIGHT_CTRL_PRESSED=&H4PublicConstRPC_E_SERVER_DFD=&H80010007PrivatcConstRPC_S_CALL_FAILED_DNE=1727&在常数的初始化中,有些程序使用Global,如GlobalConstABM_ACTIVATE=&H6,但我认为Public完全可以代替它。过去我也用过Global,但现在不大用了。一会儿用这个,会儿用那个,各程序之间不能保持一致性了,起码看起来别扭。结构 返回结构是C 和 C+语言中的说法。在 VB中一般称为自定义数据类型。想必很多朋友都已经认识它。在API领域里,我更喜欢把它叫做结
24、构,因为API各种结构类型根本不是我定义(自定义)的。在 VB中,API结构同样由TYPE。ENDTYPE语句来定义。如,在 API中,点(Point)结构的定义方法如下:PublicTypcPOINTAPIXAsLong,点在X 坐 标(横坐标)上的坐标值YAsLong点 在 Y 坐 标(纵坐标)上的坐标值EndType又如,A PI中矩形(Rect)结构的定义如下:PublicTypeRECTLeftAsLong矩形左上角的X 坐 标 TopAsLong矩形左上角的Y 坐 标 RightAsLong矩形右下角的X 坐标BottomAsLong矩形右下角的Y 坐标EndTypc这些内容同样可
25、以从API文本游览器中拷贝过来。这些结构中的变量名可随意改动,而不会影响结构本身。也就是说,这些成员变量都是虚拟的。如,POINTAPI结构可改为如下:PublicTypcPOINTAPIMyXAsLong点在X 坐 标(横坐标)上的坐标值MyYAsLong,点在Y坐 标(纵坐标)上的坐标值EndType不过,一般来讲,是没有这种必要的。结构本身是一种数据类型,因此,使用时必须声明具体变量为该结构型,才能在程序中真正使用到该结构。结构的声明方法和其他数据的声明方法一样,如,以下语句把变MyPoint声明为POINTAPI结构类型:MyPointAsPOINTAPI引用结构中的成员变量也十分简单
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 编程 学习

限制150内