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

Posted evilangel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vb代码之---打开文件或文件夹属性相关的知识,希望对你有一定的参考价值。

打开一个文件夹或者一个文件该怎么写?当然是ShellExecute函数了,但是他不能完成文件属性窗口的调用。

要想调用一个文件的属性窗口,就要用到ShellExecute的扩展ShellExecuteEx了

先看怎么声明

Private Declare Function ShellExecuteEx Lib "shell32.dll" (ByRef lpExecInfo As SHELLEXECUTEINFOA) As Long

参数很简单,只有一个SHELLEXECUTEINFOA,但是SHELLEXECUTEINFOA这个结构却不简单

声明

Private 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
lpIDList As Long
lpClass As String
hkeyClass As Long
dwHotKey As Long
hIcon As Long
hProcess As Long
End Type

我擦,这么多成员

其实用到的不多,只要指定其中的几个就可以了,先看看这个结构的介绍(以下摘自MSDN,翻译有google翻译)

会员

CBSIZE

类型:DWORD

需要。这个结构的大小,以字节为单位。

fMask

类型:ULONG

表明其他结构成员的内容和有效性的标志; 以下值的组合:

SEE_MASK_DEFAULT(0x00000000)

使用默认值。

SEE_MASK_CLASSNAME(0x00000001)

使用lpClass成员给出的类名如果同时设置了SEE_MASK_CLASSKEY和SEE_MASK_CLASSNAME,则使用类密钥。

SEE_MASK_CLASSKEY(0x00000003)

使用由hkeyClass成员给出的类密钥如果同时设置了SEE_MASK_CLASSKEY和SEE_MASK_CLASSNAME,则使用类密钥。

SEE_MASK_IDLIST(0x00000004)

使用由lpIDList成员给出的项目标识符列表所述lpIDList构件必须指向一个ITEMIDLIST结构。

SEE_MASK_INVOKEIDLIST(0x0000000C)

使用所选项目的快捷菜单处理程序IContextMenu界面使用lpFile通过其文件系统路径或lpIDList来标识项目以通过其PIDL标识项目。此标志允许应用程序使用ShellExecuteEx从快捷菜单扩展中调用动词,而不是注册表中列出的静态动词。

注意   SEE_MASK_INVOKEIDLIST覆盖并隐含SEE_MASK_IDLIST。
 

SEE_MASK_ICON(0x00000010)

使用hIcon成员给出的图标该标志不能与SEE_MASK_HMONITOR组合。

注意   此标志仅用于Windows XP及更早版本。在Windows Vista中忽略它。
 

SEE_MASK_HOTKEY(0x00000020)

使用由dwHotKey成员给出的键盘快捷键

SEE_MASK_NOCLOSEPROCESS(0x00000040)

用于指示hProcess成员接收进程句柄。此句柄通常用于允许应用程序查明用ShellExecuteEx创建的进程何时终止。在某些情况下,例如通过DDE对话满足执行时,不会返回句柄。调用应用程序负责在不再需要时关闭句柄。

SEE_MASK_CONNECTNETDRV(0x00000080)

验证共享并连接到驱动器号。这使重新连接断开的网络驱动器。所述lpFile构件是在网络上的文件的UNC路径。

SEE_MASK_NOASYNC(0x00000100)

在返回之前等待执行操作完成。此标志应由使用ShellExecute表单的调用方使用,这些表单可能会导致异步激活,例如DDE,并创建可能在后台线程上运行的进程。(注:的ShellExecuteEx在默认情况下在后台线程运行,如果来电者的线程模型是不是公寓。)调用的ShellExecuteEx从后台线程已经运行的进程应该总是通过此标志。此外,在调用ShellExecuteEx之后立即退出的应用程序应指定此标志。

如果执行操作是在后台线程上执行的,并且调用者未指定SEE_MASK_ASYNCOK标志,则调用线程将等待,直到新进程启动后再返回。这通常意味着CreateProcess已被调用,DDE通信已完成,或者自定义执行委托已通知ShellExecuteEx它已完成。如果指定了SEE_MASK_WAITFORINPUTIDLE标志,则ShellExecuteEx将调用WaitForInputIdle,并在返回之前等待新进程闲置,最大超时时间为1分钟。

有关此标志何时需要的更多讨论,请参阅备注部分。

SEE_MASK_FLAG_DDEWAIT(0x00000100)

不使用; 改用SEE_MASK_NOASYNC。

SEE_MASK_DOENVSUBST(0x00000200)

展开由lpDirectorylpFile成员给出的字符串中指定的任何环境变量

SEE_MASK_FLAG_NO_UI(0x00000400)

如果发生错误,不要显示错误消息框。

SEE_MASK_UNICODE(0x00004000)

使用此标志来表示一个Unicode应用程序。

SEE_MASK_NO_CONSOLE(0x00008000)

用于继承新进程的父级控制台,而不是创建新控制台。这与CreateProcess使用CREATE_NEW_CONSOLE标志是相反的

SEE_MASK_ASYNCOK(0x00100000)

执行可以在后台线程上执行,并且调用应该立即返回而不需要等待后台线程完成。请注意,在某些情况下,ShellExecuteEx将忽略此标志,并在返回之前等待该过程完成。

SEE_MASK_NOQUERYCLASSSTORE(0x01000000)

不曾用过。

SEE_MASK_HMONITOR(0x00200000)

在多显示器系统上指定显示器时使用此标志。显示器在hMonitor成员中指定该标志不能与SEE_MASK_ICON组合。

SEE_MASK_NOZONECHECKS(0x00800000)

在Windows XP中引入不要执行区域检查。此标志允许ShellExecuteEx绕过由IAttachmentExecute放置到位的区域检查

SEE_MASK_WAITFORINPUTIDLE(0x02000000)

新流程创建完成后,请等待进程在返回之前变为空闲状态,并等待一分钟。有关更多详细信息,请参阅WaitForInputIdle

SEE_MASK_FLAG_LOG_USAGE(0x04000000)

在Windows XP中引入跟踪此应用程序启动的次数。具有足够高计数的应用程序出现在开始菜单的最常用程序列表中。

SEE_MASK_FLAG_HINST_IS_SITE(0x08000000)

所述hInstApp构件用于指定所述的IUnknown实现的对象的的IServiceProvider这个对象将被用作站点指针。站点指针用于为ShellExecute函数,处理程序绑定进程和调用的动词处理程序提供服务

在Windows 8之前的操作系统中使用SEE_MASK_FLAG_HINST_IS_SITE,请在程序中手动定义它:#define SEE_MASK_FLAG_HINST_IS_SITE 0x08000000。

HWND

类型:HWND

可选的。父窗口的句柄,用于显示执行此功能时系统可能产生的任何消息框。该值可以是NULL

lpVerb

类型:LPCTSTR

一个字符串,被称为动词,用于指定要执行的操作。可用动词的集合取决于特定的文件或文件夹。通常,对象快捷菜单中的可用动作是可用的动词。该参数可以为NULL,在这种情况下,如果可用,则使用默认动词。如果不是,则使用“打开”动词。如果两个动词都不可用,则系统使用注册表中列出的第一个动词。以下动词通常使用:

编辑

启动编辑器并打开文档进行编辑。如果lpFile不是文档文件,则该函数将失败。

探索

探索由lpFile指定的文件夹

从指定的目录开始搜索。

打开

打开由lpFile参数指定的文件该文件可以是可执行文件,文档文件或文件夹。

打印

打印由lpFile指定的文档文件如果lpFile不是文档文件,则该函数将失败。

性能

显示文件或文件夹的属性。

lpFile

类型:LPCTSTR

空终止字符串的地址,它指定ShellExecuteEx将执行由lpVerb参数指定的操作的文件或对象的名称ShellExecuteEx函数支持的系统注册表动词包括可执行文件和文档文件的“打开”以及已为其注册打印处理程序的文档文件的“打印”。其他应用程序可能会通过系统注册表添加Shell动词,例如.avi和.wav文件的“play”。要指定一个Shell命名空间对象,请传递完全限定的解析名称,并fMask参数中设置SEE_MASK_INVOKEIDLIST标志

注意   如果设置SEE_MASK_INVOKEIDLIST标志,则可以使用lpFilelpIDList分别通过其文件系统路径或其PIDL来识别项目。一个值-两个lpFilelpIDList -必须进行设置。
 
注意   如果路径不包含在名称中,则假定当前目录。
 
lpParameters

类型:LPCTSTR

可选的。包含应用程序参数的以空字符结尾的字符串的地址。参数必须用空格分隔。如果lpFile成员指定一个文档文件,则lpParameters应该为NULL

lpDirectory

类型:LPCTSTR

可选的。指定工作目录名称的以空字符结尾的字符串的地址。如果此成员为NULL,则当前目录用作工作目录。

n显示

类型:int

需要。指定应用程序在打开时如何显示的标志; ShellExecute函数列出的其中一个SW_值如果lpFile指定一个文档文件,该标志只是传递给关联的应用程序。决定如何处理它取决于应用程序。

hInstApp

类型:HINSTANCE

[out]如果设置了SEE_MASK_NOCLOSEPROCESS并且ShellExecuteEx调用成功,则它将此成员设置为大于32的值。如果该函数失败,则将其设置为指示失败原因的SE_ERR_XXX错误值。虽然hInstApp为了兼容16位Windows应用程序而声明为HINSTANCE,但它并不是真正的HINSTANCE。它只能转换为int,并与32或以下SE_ERR_XXX错误代码进行比较。

SE_ERR_FNF(2)

文件未找到。

SE_ERR_PNF(3)

找不到路径。

SE_ERR_ACCESSDENIED(5)

拒绝访问。

SE_ERR_OOM(8)

内存不足。

SE_ERR_DLLNOTFOUND(32)

未找到动态链接库。

SE_ERR_SHARE(26)

无法共享打开的文件。

SE_ERR_ASSOCINCOMPLETE(27)

文件关联信息不完整。

SE_ERR_DDETIMEOUT(28)

DDE操作超时。

SE_ERR_DDEFAIL(29)

DDE操作失败。

SE_ERR_DDEBUSY(30)

DDE操作繁忙。

SE_ERR_NOASSOC(31)

文件关联不可用。

lpIDList

类型:LPVOID

绝对ITEMIDLIST结构(PCIDLIST_ABSOLUTE)的地址,用于包含唯一标识要执行的文件的项目标识符列表。如果fMask成员不包含SEE_MASK_IDLISTSEE_MASK_INVOKEIDLIST,则该成员将被忽略

lpClass

类型:LPCTSTR

以空值终止的字符串的地址,指定以下之一:

  • 一个ProgId。例如,“Paint.Picture”。
  • 一个URI协议方案。例如,“http”。
  • 文件扩展名。例如,“.txt”。
  • HKEY_CLASSES_ROOT下的注册表路径,用于命名包含一个或多个Shell动词的子项。这个键将有一个符合Shell动态注册表模式的子键,比如

    shell \ 动词名称

如果fMask不包含SEE_MASK_CLASSNAME,则该成员将被忽略

hkeyClass

类型:HKEY

文件类型的注册表项句柄。此注册表项的访问权限应设置为KEY_READ。如果fMask不包含SEE_MASK_CLASSKEY,则该成员将被忽略

dwHotKey

类型:DWORD

与应用程序关联的键盘快捷键。低位字是虚拟键码,高位字是修饰符标志(HOTKEYF_)。有关修饰符标志的列表,请参阅WM_SETHOTKEY消息的描述如果fMask不包含SEE_MASK_HOTKEY,则该成员将被忽略

DUMMYUNIONNAME
惠康

类型:手柄

文件类型图标的句柄。如果fMask不包含SEE_MASK_ICON,则该成员将被忽略该值仅在Windows XP及更早版本中使用。在Windows Vista中忽略它。

HMONITOR

类型:手柄

要显示文档的显示器的句柄。如果fMask不包含SEE_MASK_HMONITOR,则该成员将被忽略

hProcess

类型:手柄

好了,看代码吧

Private Declare Function ShellExecuteEx Lib "shell32.dll" (SEI As SHELLEXECUTEINFO) As Long
Private Const SEE_MASK_INVOKEIDLIST As Long = &HC
Private Const SW_SHOW As Long = 5
Private Const SEE_MASK_ICON As Long = &H10

Private Sub Form_Load()
Dim s As SHELLEXECUTEINFO
s.cbSize = Len(s) ‘结构大小
s.lpVerb = "properties" ‘当properties时打开属性窗口,open时打开文件或文件夹
s.lpFile = "F:\Recv" ‘路径
s.nShow = SW_SHOW
s.fMask = SEE_MASK_INVOKEIDLIST
ShellExecuteEx s

End Sub

 


以上是关于vb代码之---打开文件或文件夹属性的主要内容,如果未能解决你的问题,请参考以下文章

vb获得文件地址的方法

打开 chm 文件 c# 或 vb.net 目录的特定部分

VB6.0 获取WebBrowser当前打开页面的网址

向vb 高手求助代码编程:菜单中打开txt或excel数据表文件,求某列中几个数求平均,找出并输出均值附近数据

VB 显示打开文件对话框

VB中读入文件,如何获得文本的行数