VBOpen函数详解.docx

上传人:b****2 文档编号:2322070 上传时间:2023-05-03 格式:DOCX 页数:20 大小:25.53KB
下载 相关 举报
VBOpen函数详解.docx_第1页
第1页 / 共20页
VBOpen函数详解.docx_第2页
第2页 / 共20页
VBOpen函数详解.docx_第3页
第3页 / 共20页
VBOpen函数详解.docx_第4页
第4页 / 共20页
VBOpen函数详解.docx_第5页
第5页 / 共20页
VBOpen函数详解.docx_第6页
第6页 / 共20页
VBOpen函数详解.docx_第7页
第7页 / 共20页
VBOpen函数详解.docx_第8页
第8页 / 共20页
VBOpen函数详解.docx_第9页
第9页 / 共20页
VBOpen函数详解.docx_第10页
第10页 / 共20页
VBOpen函数详解.docx_第11页
第11页 / 共20页
VBOpen函数详解.docx_第12页
第12页 / 共20页
VBOpen函数详解.docx_第13页
第13页 / 共20页
VBOpen函数详解.docx_第14页
第14页 / 共20页
VBOpen函数详解.docx_第15页
第15页 / 共20页
VBOpen函数详解.docx_第16页
第16页 / 共20页
VBOpen函数详解.docx_第17页
第17页 / 共20页
VBOpen函数详解.docx_第18页
第18页 / 共20页
VBOpen函数详解.docx_第19页
第19页 / 共20页
VBOpen函数详解.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

VBOpen函数详解.docx

《VBOpen函数详解.docx》由会员分享,可在线阅读,更多相关《VBOpen函数详解.docx(20页珍藏版)》请在冰点文库上搜索。

VBOpen函数详解.docx

VBOpen函数详解

VBOpen函数详解打开、关闭、读、写文件

(一)打开和关闭文件

    1、顺序文件

    打开顺序文件,我们可以使用Open语句。

它的格式如下:

OpenpathnameFor[Input|Output|Append]As[#]filenumber[Len=buffersize] 

    说明:

    

(1)参数pathname表示要打开的文件名,文件名可以包含有驱动器和目录

    

(2)InputOutput和Append用于设置顺序文件的打开方式。

其中,Input表示从打开的文件中读取数据。

以这种方式打开文件时,文件必须存在,否则会产生错误。

Output表示向打开的文件中写入数据。

以这种方式打开文件时,文件中原有的数据将被覆盖,新的数据将从文件开始写入。

如果文件不存在,则创建一个新文件。

Append表示向打开的文件中添加数据。

以这种方式打开时,文件中原有的数据将被保留,新的数据将从文件为开始添加。

如果文件不存在,则创建一个新文件。

    (3)As[#]filenumber子句用于为打开的文件指定文件号.对文件进行读写操作时,要用文件号表示该文件.文件号是介于1~511之间的整数,既可以是数字,又可以是变量.也可以省略不用.

    (4)当在文件与程序之间拷贝数据时,Len=buffersize子句指定缓冲区的字符数.

    例如:

OpenApp.Path+"\test.dat"ForOutputAs1

OpenApp.Path+"\test.dat"ForOutputAs1 

    这两句代码在当前应用程序所在目录下创建了一个名为test.dat的文本文件,分配文件号为1.

OpenApp.Path+"\test.dat"ForInputAs[#]filenumber 

    这条语句是从文本文件中读取数据.

OpenApp.Path+"\test.dat"ForAppendAs[#]filenumber 

    这条语句则是像文本文件中添加数据

    2、随机文件

    操作随机文件之前,首先必须定义用于保存数据项的记录类型.该记录是用户自定义数据类型,他们是随机文件中存储数据的基本结构.例如:

TypeStudent

  NoAsInteger

  NameAsString*20

  ageAsInteger

EndType

DimStudAsStudent‘定义一个可以存放学生材料的变量 

    随机文件中,所有的数据都将保存到若干个结构为Student类型的记录中,而从随机文件中读出的数据则可以存放到变量Stud中.

    之后我们就可以打开并读写文件了.下面是打开随机文件的语法格式:

OpenfilenameForRandomas[#]filenumberLen=Reclength 

    说明:

    

(1)参数filename和filenumber分别表示文件名或文件号.

    

(2)关键字Random表示打开的是随机文件

    (3)Len子句用于设置记录长度,长度由参数Reclength指定.Reclength的值必须大于0,而且必须与定义的记录结构的长度一致.计算记录长度的方法是将记录结构中每个元素的长度相加.例如前面声明的Student的长度应该是2+20+2=24字节.

    打开一个记录类型为Student的随机文件的方法是:

Open"c:

\Student.txt"ForRandomAs#1Len=25 

    3、二进制文件

    打开二进制文件的语法格式如下:

OpenpathnameForBinaryAs[#]filenumber 

    说明:

    

(1)参数filename和filenumber分别表示文件名或文件号.

    

(2)关键字Binary表示打开的是二进制文件

    (3)对于二进制文件,不能指定字节长度.每个打开的二进制文件都有一个自己的指针,文件指针是一个数字值,指向下一次读写操作的文件中的位置.二进制文件中的每个”位置”对应一个数据字节,因此,有n个字节的文件,就有1到n个位置.

    我们可以用Seek()函数返回当前的文件指针位置(即下一个要读写的字节);用Loc()函数返回上一次读写的字节位置,除非用Seek语句移动了指针,Loc()返回值总比Seek()的小1.我们来看下面的例子:

Open“student.txt”forBinaryas#1 

    该语句用二进制的方式打开了student.txt文件.

    

(二)读文件

    1、顺序文件

    顺序文件的读取有三种方式:

    

(1)LineInput#语句

    该语句从打开的顺序文件中读取一行数据。

这里的一行指的是从当前指针位置开始到回车符或回车换行符之间的所有数据。

LineInput#语句的语法格式如下:

LineInput#文件号,变量号 

    说明:

“文件号”是打开文件时所用的文件号;“变量号”使用来存放读出数据的一个或多个变量,如果有多个变量,中间用空格分割开。

Input#语句为参数列表中的每一个变量读取文件的一个域,并将读出的域存入变量中。

该语句只能顺序的从第一个域开始,直到读取想要的域。

    请看下面代码:

DimstrLineAsString

Open"c:

\vb\test.txt"ForInputAs#1

DoUntilEOF

(1)

  LineInput#1,strLine

  text1.Text=text1.Text+strLine+Chr(13)+Chr(10)

Loop

Close#1 

    此段代码逐行读取一个文件到文本框中。

    

(2)Input函数

    此函数可以从顺序文件中一次读取指定长度的字符串。

具体地说,就是从文件的当前位置开始,读取指定个数的字符,然后将他们返回。

Input函数可以读取包括换行符,回车符,空格符等在内的各种字符。

下面是它的语法格式:

    变量=Input(串长度,文件号)

    例如,要从一个打开文件中读取12个字符并复制到变量file中,我们可以这样写:

file=Input(12,filenum) 

    如果要将整个文件复制到变量,请使用InputB函数将字节从文件复制到变量。

由于InputB函数返回一个ASCII字符串,因此,必须用StrCopy函数将ASCII字符串转换为Unicode字符串。

代码如下:

file=StrCopy(Input(LOF(filenanum),filenum),vbUnicode) 

    (3)Input#语句

    Input#语句可以从文件中同时向多个变量内读入数据,而且读入的数据可以是不同类型的。

  

    下面使它的语法格式:

Input#文件号,变量列表 

    例如,我们要在文件student.txt中写入数据,下面是代码:

Open"student.txt"ForOutputAs#filenum

Write#filenum,"张三","初一年级",14

Write#filenum,"李四","职业高中",18

DimnameAsString,nianjiAsString,ageAsInteger

Dimname1AsString,nianji1AsString,age1AsInteger

Open"student.txt"ForInputAs#filenum

Input#filenum,name,nianji,age

Input#filenum,name1,nianji1,age1

Close#filenum 

    执行结果:

name=”张三”,nianji=“初一年级”,age=14 

name=”李四”,nianji=“职业高中”,age=18 

    2、随机文件

    读取随机文件是可以使用Get#语句,数据从文件的一个指定记录中读出后,存入一个用户自定义的变量中.

    语法格式:

Get#FileNum,[RecNum],UserType

    说明:

    

(1)FileNum是要打开的文件号;RecNum是要读取的记录号,若省略,则读取下一个记录

    

(2)UserType是一个用来存放读出数据的用户自定义的数据类型变量.

    下面是一个例子:

Get#1,5,Student 

    该语句读取文件号为1的文件中的第5条记录.

    3、二进制文件

    读写二进制文件的方法和读写随机文件的方法基本相同,下面是相关的语句格式及其说明:

    格式:

Get[#]fileNumber,[Pos],Var

    功能:

用二进制方式,从文件的中指定的位置开始读取,所给变量长度的数据

    说明:

    

(1)FileNumber是以二进制方式打开的文件号.

    

(2)Pos用来指定读写操作发生时的字节位置,若省略,则使用当前文件指针位置.

    (3)Var是用来存放读出的数据的变量.该语句会自动根据var变量包含的字节长度读取适当的文件,如果Var是一个可变长度的字符串变量,则传送的字节数等于Var中目前的字节数.对于文件长度的判断我们可以使用Lof()函数,Eof()函数检查文件的结尾位置.

    下面的代码复制studert.txt文件到student1.txt文件中

DimarAsString*1,iAsInteger

Open"c:

\student.txt"ForBinaryAs#1

Open"c:

\student2.txt"ForBinaryAs#2

Fori=1ToLOF

(1)

  Get#1,,ar

  Put#2,,ar

Nexti

Close#1,#2 

    (三)写文件

    1、顺序文件

    写顺序文件我们可以用Write#和Print#语句向一个已经打开的文件中写入数据.

    下面是他们的格式和说明:

    Print#的语法格式:

    Print#文件号,变量列表 

    例如,将文本框中的文本写到文件中,代码如下:

Open"file.txt"ForOutputAs#filenum

Input#filenum,text1.text 

    Write#语句的语法格式:

Write#文件号,变量列表 

    说明:

用Write#语句写入的信息便于以后用Input#语句来读取数据,因为Write#语句自动将写入到文件中的信息用逗号分开,并为字符串数据加上双引号.例如:

Open"student.txt"ForOutputAs#filenum

Write#filenum,"张三","初一年级",14

Write#filenum,"李四","职业高中",18 

    2、随机文件

    向随机文件中写入数据,使用Put  #语句.语法格式如下:

Put[#]FileNum,[RecNum],UserType 

    说明:

    

(1)FileNum是要打开的文件号;RecNum是要写入的记录号,若省略,则再上一次用Get和Put语句所读写过的记录的后一条记录中写入,如果没有执行过Get和Put语句,就从第一条记录开始

    

(2)UserType是包含要写入数据的用户自定义的数据类型变量.例如:

我们向前面的student.txt文件中的第5个记录写入数据,可用这些语句:

stud.No=0301

stud.Name=“王武”

stud.Age=20

Put#1,5,stud 

    如果要插入的数据不只一两条的话,首先要确定文件和每条记录的长度,这样就可以计算出文件中究竟有多少条记录.我们可以用Lof()函数返回文件的长度,Len()函数返回每个记录的长度,计算文件中的记录个数可以用文件的长度除以给个记录的长度.示例如下:

Nextrec=(Lof

(1)\Len(UserType))+1

Put#1,Nextrec,UserType 

    3、二进制文件

    下面是以二进制方式写入文件的语句格式及其说明:

    格式:

Put[#]fileNumber,[Pos],Var 

    功能:

用二进制方式,从文件的中指定的位置开始写入,所给变量长度的数据

    说明:

    

(1)FileNumber是以二进制方式打开的文件号.

    

(2)Pos用来指定写操作发生时的字节位置,若省略,则使用当前文件指针位置.

    (3)Var是用来存放写入的数据的变量.该语句会自动根据var变量包含的字节长度写入文件,如果Var是一个可变长度的字符串变量,则传送的字节数等于Var中目前的字节数  

附录资料:

不需要的可以自行删除

VBHOOK(钩子)超级无敌详细用法(介绍)

hook是WINDOWS提供的一种消息处理机制,它使得程序员可以使用子过程来监视系统消息,并在消息到达目标过程前得到处理。

下面将介绍WINNDOWSHOOKS并且说明如何在WINDOWS程序中使用它。

关于HOOKS

使用HOOK将会降低系统效率,因为它增加了系统处量消息的工作量。

建议在必要时才使用HOOK,并在消息处理完成后立即移去该HOOK。

HOOK链

WINDOWS提供了几种不同类型的HOOKS;不同的HOOK可以处理不同的消息。

例如,WH_MOUSEHOOK用来监视鼠标消息。

WINDOWS为这几种HOOKS维护着各自的HOOK链。

HOOK链是一个由应用程序定义的回调函数队列,当某种类型的消息发生时,WINDOWS向此种类型的HOOK链的第一个函数发送该消息,在第一函数处理完该消息后由该函数向链表中的下一个函数传递消息,依次向下。

如果链中某个函数没有向下传送该消息,那么链表中后面的函数将得不到此消息。

(对于某些类型的HOOK,不管HOOK链中的函数是否向下传递消息,与此类型HOOK联系的所有HOOK函数都会收到系统发送的消息)

HOOK过程

为了拦截特定的消息,你可以使用SetWindowsHookEx函数在该类型的HOOK链中安装你自己的HOOK函数。

该函数语法如下:

publicfunctionMyHook(nCode,wParam,iParam)aslong

‘加入代码

endfunction

其中MyHook可以随便命名,其它不能变。

该函数必须放在模块段。

nCode指定HOOK类型。

wParam,iParam的取值随nCode不同而不同,它代表了某种类型的HOOK的某个特定的动作。

SetWindowsHookEx总是将你的HOOK函数放置在HOOK链的顶端。

你可以使用CallNextHookEx函数将系统消息传递给HOOK链中的下一个函数。

[注释]对于某些类型的HOOK,系统将向该类的所有HOOK函数发送消息,这时,HOOK函数中的CallNextHookEx语句将被忽略。

全局HOOK函数可以拦截系统中所有线程的某个特定的消息(此时该HOOK函数必须放置在DLL中),局部HOOK函数可以拦截指定线程的某特定消息(此时该HOOK函数可以放置在DLL中,也可以放置在应用程序的模块段)。

[注释]建议只在调试时使用全局HOOK函数。

全局HOOK函数将降低系统效率,并且会同其它使用该类HOOK的应用程序产生冲突。

HOOK类型

WH_CALLWNDPROC和WH_CALLWNDPROCRETHOOK

WH_CALLWNDPROC和WH_CALLWNDPROCRETHOOK可以监视SendMessage发送的消息。

系统在向窗体过程发送消息前,将调用WH_CALLWNDPROC;在窗体过程处理完该消息后系统将调用WH_CALLWNDPROCRET。

WH_CALLWNDPROCRETHOOK会向HOOK过程传送一个CWPRETSTRUCT结构的地址。

该结构包含了窗体过程处理系统消息后的一些信息。

WH_CBTHook

系统在激活,创建,消毁,最小化,最大化,移动,改变窗体前;在完成一条系统命令前;在从系统消息队列中移去鼠标或键盘事件前;在设置输入焦点前,或同步系统消息队列前,将调用WH_CBTHOOK。

你可以在你的HOOK过程拦截该类HOOK,并返回一个值,告诉系统,是否继续执行上面的操作。

WH_DEBUGHOOK

系统在调用与某种HOOK类型联系的HOOK过程前,将调用WH_DEBUG,应用程序可以使用该HOOK决定是否让系统执行某种类型的HOOK。

WH_FOREGROUNDIDLEHook

系统在空闲时调用该HOOK,在后台执行优先权较低的应用程序。

WH_GETMESSAGEHook

WH_GETMESSAGEHook使应用程序可以拦截GetMessage或PeekMessage的消息。

应用程序使用WH_GETMESSAGEHOOK监视鼠标、键盘输入和发送到队列中的其它消息。

WH_JOURNALRECORDHook

WH_JOURNALRECORDHook使应用程序可以监视输入事件。

典型地,应用程序使用该HOOK记录鼠标、键盘输入事件以供以后回放。

该HOOK是全局HOOK,并且不能在指定线程中使用。

WH_JOURNALPLAYBACKHook

`WH_JOURNALPLAYBACKHook使应用程序可以向系统消息队列中插入消息。

该HOOK可以回放以前由WH_JOURNALRECORDHOOK录制的鼠标、键盘输入事件。

在WH_JOURNALPLAYBACKHook安装到系统时,鼠标、键盘输入事件将被屏蔽。

该HOOK同样是一个全局HOOK,不能在指定线程中使用。

WH_JOURNALPLAYBACKHook返回一个时间暂停值,它告诉系统,在处理当前回放的消息时,系统等待百分之几秒。

这使得此HOOK可以控制在回放时的时间事件。

WH_KEYBOARDHook

WH_KEYBOARDHook使应用程序可以监视由GetMessage和PeekMessage返回的WM_KEYDOWN及WM_KEYUP消息。

应用程序使用该HOOK监视发送到消息队列中的键盘输入。

WH_MOUSEHook

WH_MOUSEHook使应用程序可以监视由GetMessage和PeekMessage返回的消息。

应用程序使用该HOOK监视发送到消息队列中的鼠标输入。

WH_MSGFILTERandWH_SYSMSGFILTERHooks

WH_MSGFILTER和WH_SYSMSGFILTERHooks使应用程序可以监视菜单、滚动条、消息框、对话框,当用户使用ALT+TAB或ALT+ESC来切换窗体时,该HOOK也可以拦截到消息。

WH_MSGFILTER仅在应用程序内部监视菜单、滚动条、消息框、对话框,而WH_SYSMSGFILTER则可以在系统内监视所有应用程序的这些事件。

WH_SHELLHook

一个SHELL程序可以使用WH_SHELLHook来接收重要的信息。

当一个SHELL程序被激活前或当前窗体被创建、消毁时,系统会调用WH_SHELLHook过程。

使用HOOK

安装、销毁HOOK过程

监视系统事件

安装、销毁HOOK过程

使用SetWindowsHookEx函数,指定一个HOOK类型,自己的HOOK过程是全局还是局部HOOK,同时给出HOOK过程的进入点,就可以轻松的安装你自己的HOOK过程。

DeclareFunctionSetWindowsHookExLib"user32"Alias"SetWindowsHookExA"_

            (ByValidHookAsLong,_

              ByVallpfnAsLong,        _

              ByValhmodAsLong,        _

              ByValdwThreadIdAsLong)AsLong

idHook代表是何种Hook,有以下几种

          PublicConstWH_CALLWNDPROC=4

          PublicConstWH_CALLWNDPROCRET=12

          PublicConstWH_CBT=5

          PublicConstWH_DEBUG=9

          PublicConstWH_FOREGROUNDIDLE=11

          PublicConstWH_GETMESSAGE=3

          PublicConstWH_HARDWARE=8

          PublicConstWH_JOURNALPLAYBACK=1

          PublicConstWH_JOURNALRECORD=0

          PublicConstWH_KEYBOARD=2

          PublicConstWH_MOUSE=7

          PublicConstWH_MSGFILTER=(-1)

          PublicConstWH_SHELL=10

          PublicConstWH_SYSMSGFILTER=6

lpfn代表HookFunction所在的Address,这是一个CallBackFucnction,当挂上某个Hook时,我们便得定义一个Function来当作某个讯息产生时,来处理它的Function,这个HookFunction有一定的叁数格式

          PrivateFunct

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2