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

原文地址:https://www.cnblogs.com/Evilangel/p/8456944.html

时间: 2024-10-03 01:40:24

vb代码之---打开文件或文件夹属性的相关文章

Qt打开外部程序和文件夹需要注意的细节(Qt调用VC写的动态库,VC需要用C的方式输出函数,否则MinGW32编译过程会报错)

下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this);     QFileInfo fileinfo(appUrl);     QString appPath = QApplication::applicationDirPath()+SAVEDIR+"/"+fileinfo.fileName();     bool res = proce

Qt打开外部程序和文件夹需要注意的细节(注意QProcess的空格问题,以及打开本地文件时,需要QUrl::fromLocalFile才可以)

下午写程序中遇到几个小细节,需要在这里记录一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 QProcess *process = new QProcess(this);     QFileInfo fileinfo(appUrl);     QString appPath = QApplication::applicationDirPath()+SAVEDIR+"/"+fileinfo.fileName();     bool res = proce

UWP入门(十一)--使用选取器打开文件和文件夹

原文:UWP入门(十一)--使用选取器打开文件和文件夹 很漂亮的功能,很有趣 重要的 API FileOpenPicker FolderPicker StorageFile 通过让用户与选取器交互来访问文件和文件夹. 你可以使用 FileOpenPicker 和 FileSavePicker 类访问文件,并使用 FolderPicker 访问文件夹 1. 文件选取器 UI 文件选取器显示信息以引导用户并在打开或保存文件时提供一致性体验 该信息包括: 当前位置 用户选取的项 = 用户可以浏览到的位

关于如何便捷地以命令行的形式打开exe执行文件和进入文件夹

经常以命令行的形式打开exe执行文件的同学应该知道,直接双击是会闪退,正确的打开方式是这样:运行cmd.exe--"盘符:"--"cd 路径"--"执行文件.exe". 我这里提供一个便捷的方法,原理和上面的一样:打开注册表,在"HKEY_CLASSES_ROOT\*\"下面新建项名为"shell"的项,在项"shell"下新建项名为"通过cmd打开此文件"的项,在项

[Android]用图库打开指定的文件夹,没错是第一个画面直接是图库的文件夹画面

参考了这个里面的代码 http://bbs.csdn.net/topics/380084274 一直报错 06-16 23:58:50.698 26148-26161/com.example.myapplication.app W/ContentResolver﹕ Failed to get type for: content://media/external/images/media/120818 (Unknown URL : content://media/external/images/m

无法打开默认电子邮件文件夹....

outlook邮箱出问题时我们通常会尝试重新配置outlook的exchange邮箱,配置好后打开邮件提示如下: 无法打开默认电子邮件文件夹.必须先使用当前的配置文件连接到microsoft exchange,然后才能将文件夹与outlook数据文件(.ost)文件进行同步. 通常我是重新安装office,安装后一般可以恢复正常, 但是也有问题依旧存在. 看到一篇博文,提供的方法: 1.找到outlook所在的文件夹,我的是C:\Program Files\Microsoft Office\Of

atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php

atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 .打开浏览服务器文件夹java .net php 1. 环境:::项目java web,需要打开浏览服务器文件夹挑选文件,在返回... 1 2. 在线文件管理器要实现的基本的功能::指定开始目录,指定getfile回调 1 3. 组件选型:: elFinder (3M) ,,php web ftp 1 4. elFinder 的概念 1 5. elFinder  1.x 的使用过程 2 6. elF

打开eclipse中文件所在文件夹

在myeclipse中选中文件后能够打开文件所在文件夹,可是eclipse中没有直接打开文件路径的功能.须要我们自己加入. 选择:Run -> External Tools -> External Tools Configurations: 打开设置界面: 在Program下新建一个程序项.将其命名为"Open In Explorer".选择"Main"选项卡,在"Location"中输入: C:\Windows\explorer.e

BAT批处理之文件与文件夹操作代码(附xcopy命令详解)

批处理中的文件.文件夹操作,xcopy命令的用法. 一,建bat文件自动执行复制,删除命令. 例1:复制cd.dll文件至windows\system32的bat文件内容: copy cd.dll %windir%\system32 例2:卸载windows\system32目录中的cd.dll,即把上面复制的文件删除: del %windir%\system32\cd.dll 例3:删除download文件夹中的文件,例子如下: del C:\DOWNLOAD\*.* 注意,以处的del命令只