040111.htm
来自「提供一个VB学习教程,入门级。来源于网上」· HTM 代码 · 共 162 行
HTM
162 行
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>vb study</title>
<style>
<!--
td {font-size: 9pt}
A:link {text-decoration: none; color: #0033cc;font-size: 9pt}
A:visited {text-decoration: none; color: #0066CC;font-size: 9pt}
A:active {text-decoration: none; color: #ff0000; font-size: 9pt}
A:hover {text-decoration: underline; color: #000000;font-size: 9pt}
-->
</style>
</head>
<body>
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="98%">
<tr>
<td width="100%"><a href="#">你的位置</a>:<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="#">VB学习</a>--<a href="#">API函数</a></td>
</tr>
<tr>
<td width="100%">
<p align="center">其它函数</td>
</tr>
<tr>
<td width="100%"><br>
打开或创建文件、设备、通讯端口等:CreateFileA函数<br>
此函数用以二进制方式创建或打开文件,以供读写操作,类似于Open语句,若执行成功,则函数返回值为打开文件的句柄,恰如Open语句里的#文件号一样,用此句柄来标识,向文件中读或写--结合_lread, _lwrite或_llseek函数。<br>
声明:<br>
Declare Function CreateFileA Lib "kernel32" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, lpSecurityAttributes As SECURITY_ATTRIBUTES, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long<br>
有七个参数,如下:<br>
参数 类型及说明<br>
lpFileName String,要打开的文件的名字<br>
dwDesiredAccess Long,如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息<br>
dwShareMode Long,零表示不共享; FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示允许对文件进行共享访问<br>
lpSecurityAttributes SECURITY_ATTRIBUTES,指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果操作系统支持的话)<br>
DwCreationDisposition Long,下述常数之一:<br>
CREATE_NEW 创建文件;如文件存在则会出错<br>
CREATE_ALWAYS 创建文件,会改写前一个文件<br>
OPEN_EXISTING 文件必须已经存在。由设备提出要求<br>
OPEN_ALWAYS 如文件不存在则创建它<br>
TRUNCATE_EXISTING 讲现有文件缩短为零长度<br>
DwFlagsAndAttributes Long,一个或多个下述常数<br>
FILE_ATTRIBUTE_ARCHIVE 标记归档属性<br>
FILE_ATTRIBUTE_COMPRESSED 将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式<br>
FILE_ATTRIBUTE_NORMAL 默认属性<br>
FILE_ATTRIBUTE_HIDDEN 隐藏文件或目录<br>
FILE_ATTRIBUTE_READONLY 文件为只读<br>
FILE_ATTRIBUTE_SYSTEM 文件为系统文件<br>
FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作<br>
FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作<br>
FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块<br>
FILE_FLAG_RANDOM_ACCESS 针对随机访问对文件缓冲进行优化<br>
FILE_FLAG_SEQUENTIAL_SCAN 针对连续访问对文件缓冲进行优化<br>
FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后,将文件删除。特别适合临时文件<br>
也可在Windows NT下组合使用下述常数标记:<br>
SECURITY_ANONYMOUS, SECURITY_IDENTIFICATION, SECURITY_IMPERSONATION, SECURITY_DELEGATION, SECURITY_CONTEXT_TRACKING, SECURITY_EFFECTIVE_ONLY<br>
HtemplateFile Long,如果不为零,则指定一个文件句柄。新文件将从这个文件中复制扩展属性<br>
调用如:<br>
Public lgs&<br>
Public nul As SECURITY_ATTRIBUTES<br>
lgs& = CreateFile(c:\windows\desktop\x.exe", GENERIC_READ, 0&, nul, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0&)<br>
如果嫌这个函数参数过多的话,可以用OpenFile函数.<br>
==================================================<br>
打开一个文件进行操作:OpenFile函数<br>
声明:<br>
Declare Function OpenFile Lib "kernel32" Alias "OpenFile" (ByVal lpFileName As String, lpReOpenBuff As OFSTRUCT, ByVal wStyle As Long) As Long<br>
其中有个结构类型OFSTRUCT,声明有点特别:不要用API浏览器的,要照如下声明:<br>
Type OFSTRUCT<br>
cBytes As Byte<br>
fFixedDisk As Byte<br>
nErrCode As Integer<br>
Reserved1 As Integer<br>
Reserved2 As Integer<br>
szPathName As String * 128 --就是这一行不同,换成了定长字符串。<br>
End Type <br>
调用如:<br>
Public ldd As OFSTRUCT<br>
lgs& = OpenFile("c:\ndlxn3.exe", ldd, OF_READWRITE)<br>
函数返回值是打开的文件的句柄.,只有三个参数,第1个指明路径和文件名,第2个为1个结构型(只声明个空变量即可),第3个用OF_READ(只读)或OF_READWRITE(可读写)等常数值。全部可能值如下:<br>
OF_CREATE 创建指定的文件。如已经存在,则将其缩减为零长度 <br>
OF_DELETE 删除指定的文件 <br>
OF_EXIST 通过尝试打开文件的做法,判断一个文件是否存在。如文件存在,则将其关闭。此时,函数会返回文件打开时使用的句柄,但这个句柄是无效的。如指定的文件不存在,则返回一个负数 <br>
OF_PARSE 填写lpReOpenBuff结构的内容,但不执行其他任何操作 <br>
OF_PROMPT 如文件不存在,则显示一个消息框,在其中列出重试和取消按钮 <br>
OF_READ 以只读方式打开文件 <br>
OF_READWRITE 以可读、可写的方式打开文件 <br>
OF_REOPEN 打开lpReOpenBuff结构内指定的文件,而不是用lpFileName参数 <br>
OF_SEARCH 强迫windows查找文件--即使指定了特定的路径 <br>
OF_SHARE_COMPAT 文件可由多个应用程序打开多次 <br>
OF_SHARE_DENY_NONE 可打开文件,以便由其他程序读写 <br>
OF_SHARE_DENY_READ 禁止其他程序读写文件内容 <br>
OF_SHARE_DENY_WRITE 其他程序可以读文件,但不能写文件 <br>
OF_SHARE_EXCLUSIVE 其他任何一个程序都不能再打开这个文件 <br>
OF_WRITE 文件以只写模式打开<br>
==========================================<br>
修改文件的创建时间,修改时间:SetFileTime函数<br>
声明:<br>
Declare Function SetFileTime Lib "kernel32" (ByVal hFile As Long, lpCreationTime As FILETIME, lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long<br>
该函数设置文件的创建、修改及上次访问的时间。参数如下:<br>
hFile Long,系统文件句柄 ,可用CreateFile函数获得文件句柄。??<br>
lpCreationTime FILETIME,文件的创建时间 <br>
lpLastAccessTime FILETIME,文件上一次访问的时间 <br>
lpLastWriteTime FILETIME,文件最近一次修改的时间<br>
有一个自定义的数据类型FILETIME,如下:<br>
类型定义 <br>
Type FILETIME ' 8 Bytes <br>
dwLowDateTime As Long<br>
dwHighDateTime As Long<br>
End Type <br>
说明 <br>
windows提供了一种特殊的机制,可以记录文件的访问及创建时间。在win32环境中,这些信息以64位值的形式保存,量度的是自1601年1月1日以来经历的100ns时间单位数量(64-bit number specifying the elapsed time since January 1, 1601, in 100-nanosecond increments.) <br>
字段表 <br>
字段 类型及说明 <br>
dwLowDateTime <br>
dwHighDateTime 均为Long,Low and high-order 32 bits of the file time<br>
注解 <br>
文件时间在系统中通常用"协同世界时间"(UTC)的格式保存,但同时提供了在UTC及本地时间之间转换的函数。FILETIME结构里可包含UTC或本地时间--由我们自行决定在结构中包含什么时间。<br>
=======================================<br>
注册和反注册OCX文件:DllRegisterServer(注册)和DllUnregisterServer(卸载)<br>
这两个函数没有任何参数,但有一点特别之处:它们就包含在这个要注册或卸载的OCX文件里,因此声明时的Lib "库名"就要指明这个OCX本身。如果注册或卸载成功,函数会返回值0。例如我下载到1个叫tyftools.OCX的控件,先把它拷入c:\windows\system\下,然后在代码中声明:<br>
Private Declare Function DllRegisterServer Lib "lyftools.OCX" () As Long<br>
然后在代码中写:<br>
If DllRegisterServer =0 Then MsgBox "注册成功。"<br>
就行了,如果卸载它的话,例如:<br>
Private Declare Function DllUnregisterServer Lib "lyftools.OCX" () As Long<br>
Private Sub Command1_Click()<br>
DllUnregisterServer<br>
End Sub<br>
即可。<br>
=============================<br>
动态暂停代码的执行:Sleep函数过程<br>
同一过程中的代码通常都是连续地执行完毕,但有时,我们却希望它能在某处稍微停一下,隔二三秒再执行后面的代码,以等待某个返回值或某个动作执行完毕。这时就可利用Sleep函数,指定要暂停的时间,如1000表示暂停1秒钟。声明:<br>
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)<br>
调用如:Call Sleep(1000) '暂停1秒钟。<br>
===============================<br>
创建程序的快捷方式:fCreateShellLink函数<br>
该函数为指定程序创建快捷方式,需要指定快捷方式路径,快捷方式名称,源程序路径名称,有一点特别,第1个参数--快捷方式路径要用相对路径表示,因为它已初始化为"开始"菜单"程序"目录,声明如下:<br>
Private Declare Function fCreateShellLink Lib "vb5stkit.DLL" (ByVal lpstrFolderName As String, ByVal lpstrLinkName As String, ByVal lpstrLinkPath As String, ByVal lpstrLinkArgs As String) As Long<br>
参数为4个字符串,第1个参数指明快捷方式路径,如果此参数为空,则快捷方式创建到"开始"菜单"程序"目录中,如果要改变路径,只能用相对路径表示,如创建到桌面用"..\..\桌面"(两点".."是DOS的表示法,表示向上一级目录),创建到"开始"菜单"启动"中,用"\启动",注意:不能指定1个本不存在的相对路径,该函数不能创建目录。这个函数是有限制的,因为只能用相对路径,故不能将快捷方式创建到其他驱动器上。<br>
第2个参数为快捷方式名称,不要写出扩展名.lnk。<br>
第3个参数为源文件的全路径和名称,如:"E:\abc\xx.exe".<br>
第4个参数为空。<br>
调用如:<br>
x = fCreateShellLink("..\..\桌面", "bcd", "e:\audio\cw9\mp3enc.exe", "")<br>
给e盘上一个文件创建了1个名为bcd 的快捷方式到桌面。<br>
再如给本程序创建快捷方式到"开始"菜单"程序"的"启动"中,为:<br>
x = fCreateShellLink("\启动", "lxn1", App.Path & "\" & App.EXEName, "")
<p align="center">
<br>
< <a href="040110.htm">上一页</a>--<a href="http://www.xxby.com" target="_blank">华生小屋</a>--<a href="050101.htm">下一页</a>
><br>
</td>
</tr>
</table>
</center>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?