VB 打开文件
VB 打开文件
2009年07月21日
关于VB中Shell及ShellExecute的总结
shell 函数只可以执行.exe .com .bat 的可执行文件。
ShellExecute 是个api函数,可以执行与Windows系统相关联的文件。
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
比如:
shell "c:\1.doc" 应该报错的,因为shell只能执行.exe .com .bat
正确的应为:ShellExecute Me.hwnd, "open", "C:\1.doc", "", "", 0
打开某个网址:ShellExecute Me.hwnd, "open", http://www.sina.com, "", "", 5
打开Excel:ShellExecute hwnd, "open", "C:\1.xls", vbNull, vbNull, SW_SHOWNORMAL
打开文件夹
shell "explorer 文件夹",1
运用命令指示符:shell "cmd /c start D:\music" '打开d盘下music的文件夹
打开网址:
Shell "C:\Program Files\TheWorld 2.0\TheWorld.exe http://www.baidu.com", 1 '用别的浏览器打开网址
Shell "explorer.exe http://www.baidu.com", 1 '用IE浏览器打开网址
调用系统计算器Shell "calc.exe", 3
调用记事本Shell "NotePad ", vbNormalFocus
(打开某个记事本:Shell "NOTEPAD.EXE " & 文档路径, vbNormalFocus)
打开任务管理器:Shell "c:\windows\system32\taskmgr.exe", 1
打开资源管理器:Shell "c:\windows\explorer.exe " & path, 1
注销用户 Shell "shutdown -l"
关闭系统 Shell "shutdown -S -t 0"
重启 Shell "shutdown -R -t 0"
0是代表响应的时间
结束explorer.exe进程
Shell "taskkill /f /im explorer.exe ", vbHide
(结束其它进程也是这样,如:shell "taskkill /f /im ttplayer.exe")
VB 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
原型
HINSTANCE ShellExecute(
HWND hwnd, 父窗口句柄
LPCTSTR lpOperation, 操作,open,print,explore
LPCTSTR lpFile, 文件名,前面可加路径
LPCTSTR lpParameters, 参数
LPCTSTR lpDirectory, 默认文件夹
INT nShowCmd 显示方式
);
打开一个应用程序
ShellExecute(this-m_hWnd,open,calc.exe,,, SW_SHOW );
或
ShellExecute(this-m_hWnd,open,notepad.exe,cMyLog.log,,SW_SHOW );
打开一个同系统程序相关连的文档
ShellExecute(this-m_hWnd,open,cabc.txt,,,SW_SHOW );
激活相关程序,发送EMAIL
ShellExecute(this-m_hWnd,open,mailtoxxf@5y6s.com,,, SW_SHOW );
打开文件夹
ShellExecute(handle, open, path_to_folder, NULL, NULL, SW_SHOWNORMAL)
用系统打印机打印文档
ShellExecute(this-m_hWnd,print,cabc.txt,,, SW_HIDE);
本函数还可以用来连接到网页,照下面写就行了:
ShellExecute 0&, vbNullString, , vbNullString, vbNullString, vbNormalFocus
或者这样写来发送Email:
ShellExecute me.hwnd, open, mailtoxxf@5y6s.com, vbNullString, vbNullString, SW_SHOW
另外有ShellExecute的替代用法,更加简单实用,不用API,一句Shell搞定!
连接到网页:
Shell rundll32.exe url.dll,FileProtocolHandler
打开文件:
Shell rundll32.exe url.dll,FileProtocolHandler & App.Path & SHELLTST.TXT
ShellExecute API应用整理
作者 yanek
1. 执行“打开”,“查找”,“资源管理器”和“打印”
必要的声明:
’ nShowCmd
Public Const SW_HIDE = 0
Public Const SW_SHOWNORMAL = 1
Public Const SW_SHOWMINIMIZED = 2
Public Const SW_SHOWMAXIMIZED = 3
Public Const SW_MAXIMIZE = 3
Public Const SW_SHOWNOACTIVATE = 4
Public Const SW_SHOW = 5
Public Const SW_MINIMIZE = 6
Public Const SW_SHOWMINNOACTIVE = 7
Public Const SW_SHOWNA = 8
Public Const SW_RESTORE = 9
’ Error Code
Public Const ERROR_FILE_NOT_FOUND = 2
Public Const ERROR_PATH_NOT_FOUND = 3
Public Const ERROR_BAD_FORMAT = 11
Public Const SE_ERR_FNF = 2
Public Const SE_ERR_PNF = 3
Public Const SE_ERR_ACCESSDENIED = 5
Public Const SE_ERR_OOM = 8
Public Const SE_ERR_SHARE = 26
Public Const SE_ERR_ASSOCINCOMPLETE = 27
Public Const SE_ERR_DDETIMEOUT = 28
Public Const SE_ERR_DDEFAIL = 29
Public Const SE_ERR_DDEBUSY = 30
Public Const SE_ERR_NOASSOC = 31
Public Const SE_ERR_DLLNOTFOUND = 32
Public 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
“打开“操作
ShellExecute Me.hwnd, open, _
Text1.Text, _
vbNullString, vbNullString, _
SW_SHOWNORMAL
“查找“操作
ShellExecute Me.hwnd, find, _
LocalDir, _
vbNullString, vbNullString, _
SW_SHOWNORMAL
“打印“操作
ShellExecute Me.hwnd, print, _
Text1.Text, _
vbNullString, vbNullString, _
SW_SHOWNORMAL
“资源管理器“
ShellExecute Me.hwnd, explore, _
LocalDir, _
vbNullString, vbNullString, _
SW_SHOWNORMAL
打开“我的文档“
ShellExecute Me.hwnd, _
open, explorer, _
vbNullString, vbNullString, _
SW_SHOWNORMAL
打开“我的电脑“
’ 我的电脑
’ HKEY_CLASSES_ROOTCLSID’ {20D04FE0-3AEA-1069-A2D8-08002B30309D}
ShellExecute Me.hwnd, open, _
explorer, _
{20D04FE0-3AEA-1069-A2D8-08002B30309D}, _
vbNullString, SW_SHOWNORMAL
打开“网上邻居“
’ 网上邻居
’ HKEY_CLASSES_ROOTCLSID’ {208D2C60-3AEA-1069-A2D7-08002B30309D}
ShellExecute Me.hwnd, open, _
explorer, _
{208D2C60-3AEA-1069-A2D7-08002B30309D}, _
vbNullString, SW_SHOWNORMAL
打开“回收站“
’ 回收站
’ HKEY_CLASSES_ROOTCLSID’ {645FF040-5081-101B-9F08-00AA002F954E}
ShellExecute Me.hwnd, open, _
explorer, _
{645FF040-5081-101B-9F08-00AA002F954E}, _
vbNullString, SW_SHOWNORMAL
ShellExecuteEx API演示
必要声明:
Public Type SHELLEXECUTEINFO
cbSize As Long
fMask As Long
hwnd As Long
lpVerb As String
lpFile As String
lpParameters As String
lpDirectory As String
nShow As Long
hInstApp As Long
’ Optional fields
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type
’ fMask
Public Const SEE_MASK_CLASSKEY = &H3
Public Const SEE_MASK_CLASSNAME = &H1
Public Const SEE_MASK_CONNECTNETDRV = &H80
Public Const SEE_MASK_DOENVSUBST = &H200
Public Const SEE_MASK_FLAG_DDEWAIT = &H100
Public Const SEE_MASK_FLAG_NO_UI = &H400
Public Const SEE_MASK_HOTKEY = &H20
Public Const SEE_MASK_ICON = &H10
Public Const SEE_MASK_IDLIST = &H4
Public Const SEE_MASK_INVOKEIDLIST = &HC
Public Const SEE_MASK_NOCLOSEPROCESS = &H40
Public Declare Function ShellExecuteEX Lib shell32.dll _
Alias ShellExecuteEx _
(lpExecInfo As SHELLEXECUTEINFO) As Boolean
执行调用“文件属性“对话框
Dim dwReturn As Long
Dim lpExecInfo As SHELLEXECUTEINFO
With lpExecInfo
.cbSize = Len(lpExecInfo)
.fMask = SEE_MASK_NOCLOSEPROCESS Or _
SEE_MASK_INVOKEIDLIST Or _
SEE_MASK_FLAG_NO_UI
.hwnd = Me.hwnd
.lpVerb = properties
.lpFile = LocalDir & File1.FileName
.lpParameters = vbNullChar
.lpDirectory = vbNullChar
.nShow = SW_SHOWNORMAL
.hInstApp = 0
.lpIDList = 0
End With
dwReturn = ShellExecuteEX(lpExecInfo)
VB SHELL语句用法心得2007年11月09日 星期五 18:22语法:ID=shell(“文件.exe”,Style)
功能:以Style参数所指定的方式来打开可执行文件窗口形式
ID:属Integer数据类型代表调用shell函数的传回值。
文件名.exe 其扩展名可省略文件名可以使用变量若有需要应该加上磁盘驱动器名与路径
一. 调用系统“创建快捷方式”向导
是否为VB不支持创建快捷方式而于着急呢?虽然 您可以调用vb5stkit.Dll中的fCreateShellLink函 数,但它是为安装程序设计的,快捷方式的默认路径 总是从当前用户的“\Start Menu\Programs”开始,也 就是说,如果您的Windows95装在C盘上,您无法通过 fCreateShellLink函数把快捷方式创建到D盘上去。
现在,给大家介绍一种极为方便、巧妙的方法: 用Shell语句调用系统“创建快捷方式”向导。
新建一个项目,在窗体上放一个按钮,双击此按 钮,加入以下代码:
Private Sub Command1_Click()
Open App.Path & "\temp.lnk" For Output As #1
Close #1 '以上两句在程序所在目录建立一 个临时文件
Shell "Rundll32.exe AppWiz.Cpl,NewLinkHere
"& App.Path & "\temp.lnk"
End Sub
(注意:Shell语句中NewLinkHere后面跟着一个 空格才是引号,否则将出错。)
运行程序,按一下命令按钮,怎么样?“创建快 捷方式”向导出现了,如果创建成功,快捷方式将取 代临时文件temp.lnk的位置,如果选取消,temp.lnk 也会自动消失。当然,您可以在硬盘的任意位置建立 temp.lnk。好,现在又可以为您的程序增添一项新功 能了。Enjoy!
二. Rundll32.exe的用途
我们知道,用Shell语句只能调用可执行文件,即 exe、com、bat和pif文件,有时我们想要调用其他一 些系统功能该怎么办呢?此时,Windows提供的 Rundll32.exe可大显身手了。下面我们来认识一下这 些用法,也许会给您带来一点惊喜。
1.要打开设置系统时间的控制面板文件 (Timedate.cpl),只需运行如下代码:
Shell "Rundll32.exe
Shell32.dll,Control_RunDLL Timedate.cpl"
至于打开其他控制面板文件,相信您一定能够举 一反三,尝试一下,换个文件名就成了。
2.要运行某一快捷方式(*.lnk)则可以用以下 代码:
She11 "Rundll32.exe url.dll, FileProtocolHandler X" (X代表要运行的文件,包括 路径,下同。
3. 也可以这样写来打开ActiveMovie控制:
Shell "RUNDLL32.EXE amovie.ocx,Rundll",1
而用Shell "RUNDLL32.EXE amovie.ocx,Rundll /play X",1 将直接播放媒体文件。
4. Shell "rundll32.exe desk.cpl,InstallScreenSaver X”当然是安装屏幕保 护啦,如果你写了一个屏幕保护程序,那么可以在安 装程序中写上它,而不一定要装到system目录下。顺 便提一下,VB不是自捞一个“Application Setup Wizard”么?它的VB源代码都在安装目录下的 “\setupkit\setup1”中放着呢,好好把它研究一下。 你完全能做出富有个性的安装程序来。
5.按住shift键,右击某一文件,菜单中会出现 “打开方式”选项,这也许已不是什么秘密。但现在, 用shell "rundll32.exe shell32.dll OpenAs_RunDLL X" 便能直接调用“打开方式”框。
6. 甚至能用这样一句来打印文件(包括HTML所 支持的所有文本与图像格式):
Shell "rundll32.exe MSHTML.DLL,PrintHTML X”, 1
怎么样?是不是小有收获呢?这下,您一定会对 Rundll32.exe这个平时不起眼的文件另眼相待了,它 可是系统运行必不可少的部件呢!其实 Shell+Rundll32还能调用其他许多系统功能,比如关 于NetMeeting和Telnet方面的。如果您有兴趣,可以 到往册表的“我的电脑\HKEY_CLASSES_ROOT\”或“我 的电脑\HKEY_LOCAL_MACHINE\Software\CLASSES”下 去看看,本文的内容大都是从那里“抄”来的。只要 有足够的决心、信心、耐心,您一定能发现更多有价 值的东西。Good luck!
Shell 函数
执行一个可执行文件,返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。
语法
Shell(pathname[,windowstyle])
Shell 函数的语法含有下面这些命名参数:
部分 描述
pathname 必要参数。Variant (String),要执行的程序名,以及任何必需的参数或命令行变量,可能还包括目录或文件夹,以及驱动器。
Windowstyle 可选参数。Variant (Integer),表示在程序运行时窗口的样式。如果 windowstyle 省略,则程序是以具有焦点的最小化窗口来执行的。
windowstyle 命名参数有以下这些值:
常量 值 描述
vbHide 0 窗口被隐藏,且焦点会移到隐式窗口。
VbNormalFocus 1 窗口具有焦点,且会还原到它原来的大小和位置。
VbMinimizedFocus 2 窗口会以一个具有焦点的图标来显示。
VbMaximizedFocus 3 窗口是一个具有焦点的最大化窗口。
VbNormalNoFocus 4 窗口会被还原到最近使用的大小和位置,而当前活动的窗口仍然保持活动。
VbMinimizedNoFocus 6 窗口会以一个图标来显示。而当前活动的的窗口仍然保持活动。
说明
如果 Shell 函数成功地执行了所要执行的文件,则它会返回程序的任务 ID。任务 ID 是一个唯一的数值,用来指明正在运行的程序。如果 Shell 函数不能打开命名的程序,则会产生错误。
注意 缺省情况下,Shell 函数是以异步方式来执行其它程序的。也就是说,用 Shell 启动的程序可能还没有完成执行过程,就已经执行到 Shell 函数之后的语句。
Shell 函数示例
本示例使用 Shell 函数来完成一个用户指定的应用程序。
' 将第二个参数值设成 1,可让该程序以正常大小的窗口完成,并且拥有焦点。
Dim RetVal
打开.exe文件
Shell "打开文件的路径", vbNormalFocus