vb 关于 ShellExecute 的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb 关于 ShellExecute 的问题相关的知识,希望对你有一定的参考价值。

ShellExecute(NULL,"open","calc.exe",NULL,NULL,SW_SHOWNORMAL);
ShellExecute 0, "open", "H:\2016-15-65.jpg", "", "", 1
请问:1)什么情况下 需要写 null,什么情况下需要写 0,什么情况下要用空字符串""
2)为什么下句代码VB提示说无效的使用null?
ShellExecute null, "open", "H:\2016-15-65.jpg", "", "", 1

这个你可以从ShellExecute的声明语句中看出:

Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

第1个参数hwnd是指父窗口的句柄,类型是Long,一般可以设为0表示没有父窗口,也可以设为当前窗口的句柄Me.hWnd;
第2个参数lpOperation是操作字串,比如“Open”是打开文档,“Print”是打印文档,等等。如果设为vbNullString,则默认为“Open”;
第3个参数lpFile则是要操作的文件名,可以是可执行文件,也可以是已经与某个应用程序建立关联的文档;
第4个参数lpParameters,则表示如果上述第3个参数是可执行文件,这里就是可执行文件的命令行参数,如果没有就可以设为空字符串"",或者是vbNullString;
第5个参数lpDirectory是程序启动时的默认路径,可以设为空字符串""或vbNullString,表示使用当前的默认路径;
第6个参数nShowCmd是程序启动后的窗口状态,比如SW_Hide(或数字0)是隐藏窗口,SW_NORMAL(或数字1)是普通窗口,SW_MAXIMIZE(或数字3)是最大化窗口,SW_MINIMIZE(或数字6)是最小化窗口,等等。

也就是说究竟用0还是空字符串要根据参数的类型来定。追问

我想问的是为什么在使用0的地方,使用null 行不行?

为什么有时候实用Null 就行,有的时候就不行,比如说我觉得那个打开图片的那就代码

或者说“无效使用Null’”

是什么意思

参考技术A printer函数是通过参数打开指定的文件.函数中调用ShellExecute打开由参数a指定的文件,它的参数通过com获得.

VB达人请进,关于VB引入TXT文件的问题

小弟想在VB中引入一个TXT文件,并用VB对TXT文件中的数据进行处理,应该怎样编码?
急用,谢谢~

1.打开文件语句:Open
语法格式如下:
Open <文件名> For <打开方式> As # <文件号> [ Len = 缓冲区大小 ]
其中:
●Open、For、As、Len等是VB关键字。
●文件名:指定打开的文件名(文件名用字符串表示),包括盘符、路径、文件主名及扩展名。例如:”E:\MF\Test.txt”。
●打开方式方式:指定文件的打开方式,打开文件后,只能按指定的方式进行一种操作。打开一个顺序文件有三种方式可选:
◆Input:打开文件后,从文件中读取数据
◆Output:打开文件后,向文件中写入数据,即重写一个顺序文件
◆Append:打开文件后,向文件末尾添加数据
若指定Input方式,则当指定文件不存在时产生一个错误;若指定Output或Append方式,则当文件不存在时建立该文件,文件已存在时写入的数据,前者覆盖,后者追加。所以Open具有建立和打开文件的双重功能。
对同一文件用一种方式打开后,在关闭之前,不能再以另一种方式打开。
●文件号:VB应用程序每打开一个文件,必须指定一个文件号,且不能与其它打开的文件占用的文件号重复。文件号的范围是1 - 511之间的整数。打开文件后,指定的文件号就与该文件相关联,程序通过文件号来对文件进行读、写操作,直到关闭文件。关闭文件后,该文件号被释放,可供打开其他文件时使用。
如果在程序中已打开多个文件(此时占用的文件号未必连续),则再打开文件时,为了避免文件号重复,可使用FreeFile函数,该函数返回当前程序未被占用的最小的文件号,可通过把函数值赋给一个变量来取得这个文件号。例如,执行下面的代码,
FileNumber = FreeFile
Open "E:\VB\Exercise.TXT" For Output As # FileNumber
则在E盘VB文件夹下建立Exercise.TXT数据文件,文件号为FileNumber,如果这个文件已经存在,则原有文件被覆盖;如果执行下面的代码,
FileNumber = FreeFile
Open "E:\VB\Exercise.TXT" For Append As # FileNumber
也在E盘VB文件夹下建立Exercise.TXT数据文件,文件号为FileNumber,但当该文件已经存在时,新写入的数据追加到原有数据的后面。
●缓冲区大小:当在文件与程序之间拷贝数据时,选项len参数指定缓冲区的字符数,其范围为1 - 32767,缺省值为512字节。例如,执行下面的代码,
Open "E:\VB\Exercise.TXT" For Input As # 1 len = 1024
则打开E盘VB文件夹下的数据文件Exercise.TXT,为读取数据作准备,与之关联的文件号为1,读写缓冲区为1024字节。
在程序中,获取文件名可通过【打开】文件或文件【另存为】对话框实现。例如,下面的代码从【打开】文件对话框中打开一个文件,以便从该文件中读取数据:
CommonDialog1.Filter = "All Files (*.*)|*.*|Text Files (*.txt)|*.txt| Batch Files (*.bat)|*.bat"
CommonDialog1.FilterIndex = 2
CommonDialog1.ShowOpen
Filename = CommonDialog1.Filename
F = FreeFile
Open Filename For Input As F
… … …
而下面的代码则从文件【另存为】对话框中输入文件名,以便建立从文件名框中输入或选定的文件:
CommonDialog1.Filter = "All Files (*.*)|*.*|Text Files (*.txt)|*.txt| Batch Files (*.bat)|*.bat"
CommonDialog1.FilterIndex = 2
CommonDialog1.ShowSave
Filename = CommonDialog1.Filename
F = FreeFile
Open Filename For Otput As F
… … …
建立【打开】文件或文件【另存为】对话框用公共对话(CommonDialog)控件,见相关章节。
注意:用公共对话控件可创建【打开】文件和文件【另存为】对话框,但它只能为建立和访问的文件输入文件名提供一个可视的界面,对话框本身不能完成打开文件和保存文件的功能,须编写代码完成。

2、 关闭文件语句:Close
语法格式为:
Close [ #文件号] [, #文件号] … …
该语句的功能是关闭指定的文件,释放缓冲区;若不指定文件号,则关闭所有打开的文件。
程序运行结束时,会自动关闭所有打开的文件,但对打开的文件完成操作后及时关闭该文件是个好习惯,不仅节约内存,也避免意外情况丢失数据。程序运行时将写入文件的数据均放在文件读写缓冲区,待整批写入文件。
6.2.2 顺序文件的写操作
要将程序中的数据写到一个顺序文件,先打开文件以进行顺序输出或添加(注意此时的选用打开方式,选择Output则覆盖原来文件,选择Append则在原来文件后添加数据),可用下面的命令语句写入数据。
1、 Print # 语句:用于为顺序文件写入数据
语法格式为:
Print # 文件号 [, 输出项表]
其中输出项表是要输出的表达式或表达式列表,输出格式同Print方法。
例如,下面的代码在E盘VB文件夹下建立Exercise.TXT数据文件,并往文件中输入字符,最后关闭文件:
Open "E:\VB\Exercise.TXT" For Output As #1 ‘打开文件以便输出
Print #1,”顺序文件写入数据测试” ‘向文件中写入字符串”This is a test”
Print #1, ‘输出一个空行
Print #1,”Zone 1”;Tab;”Zone 2” ‘在两个打印区输出
Print #1,Spc(5);”5 leading spaces” ‘先输出5个空格,再输出字符串
Print #1,Tab(10);”Hello” ‘在第10列上输出字符串
Close #1 ‘关闭文件
下面的代码把文本框Text1中的内容写到一个顺序文件:Exercise.TXT,存放于D:\:
Open "D:\Exercise.TXT" For Output As #2
Print #2, Exercise.Text
Close #2
2、 Write # 语句:将记录写入文件
语法格式为:
Write # 文件号[,表达式列表]
该语句适用于向划分了字段的记录格式的文件写入数据。“表达式表”中的每个表达式写入一个字段,一个Write # 语句一次写入一个记录。表达式表中包含多个表达式时以逗号分隔。缺省表达式时写入一个空行。
用Write # 语句写入的数据各个字段间自动加逗号分隔符,字符型数据自动加双引号定界符,记录尾自动加回车换行符。
例如,用Write # 建立由表6-2给出的居民区人员登记表:
表6-2 居民区人员登记表(jmdjb.dat)
身份证号 姓名 性别 年龄 出生年月
101 小米 女 24 11/1/1980
102 张明哲 女 6 3/4/1998
……… ……… ……… ……… ………
999 张前 男 1 10/6/2003

代码如下:
Dim sfzh(3) As String, xm(3) As String, xb(3) As String, nl(3) As Integer, csny(3) As Date
sfzh(1) = "101": xm(1) = "小米": xb(1) = "女": nl(1) = 24: csny(1) = #11/1/1980#
sfzh(2) = "102": xm(2) = "张明哲": xb(2) = "女": nl(2) = 6: csny(2) = #3/4/1998#
sfzh(3) = "999": xm(3) = "张前": xb(3) = "男": nl(3) = 1: csny(3) = #10/6/2003#
Open " jmdjb.dat " For Output As #1 ' 建立文件
Write #1, "身份证号", "姓名", "性别", "年龄", "出生年月" ' 写入表头
For i = 1 To 3 '利用循环语句写入多条记录
Write #1, sfzh(i), xm(i), xb(i), nl(i), csny(i) ' 写入第i个记录
Next
Close #1
参考技术A 需要用到VB的FSO文件系统。新建一个FSO对像
Private Sub CmdRead_Click()
Dim fsoTest As New FileSystemObject, file1 As File, ts As TextStream, s As String
Set file1 = fsoTest.GetFile(“C:\testfile.txt")
Set ts = file1.OpenAsTextStream(ForReading)
'读取一行
s = ts.ReadLine
MsgBox s
ts.Close
End Sub
Private Sub CmdWrite_Click()
Dim txtfile As File, ts As TextStream
Set txtfile = fsoTest.GetFile(“c:\testfile.txt")
Set ts = txtfile.OpenAsTextStream(ForWriting)
'使用Write方法写入一行。
ts.Write (“This is only a Test")
' 写入一行带有换行符的文本。
ts.WriteLine (“Testing 1, 2, 3.")
' 向文件中写入三个换行符。
ts.WriteBlankLines (3)
ts.Close
End Sub
参考技术B 如果要运行。可以使用 顺序文件的读取方式,
一行一行的读取 对字符进行操作。

你的文本内容很简单,2组数字中间有空格隔开,可以使用 split函数分割为2个字符,转换为整型,就可以进行运算拉。
参考技术C filename1 = "e:\test.txt"
Open filename1 For Input As #1
Input #1, X1, X2, X3, X4 'x1,x2,x3,x4是用tab隔开的数
Close #1

以上是关于vb 关于 ShellExecute 的问题的主要内容,如果未能解决你的问题,请参考以下文章

VB中Shell函数和ShellExecute函数的使用方法、联系、区别?

vb保存she皮肤

vb如何使用she皮肤

请问delphi中ShellExecute的功能,和直接用show有啥不同?

vb代码之---打开文件或文件夹属性

关于c++中ShellExecute的用法(积分用光,没法悬赏了)