真假糊涂 發表於 2023-5-21 14:36:24

VBS Shell.Application中ShellExecute的使用方法详解

<p>最近在项目中偶然用到了使用VBS调用&ldquo;shell.application&rdquo;中的ShellExecute方法。在百度搜索一圈后发现很难找到关于这个方法的详细的中文教程。最后是在微软的官方文档中才找到了这个指令的详细英文教程。现将该方法的详细描述用中文分享给各位码友。</p>
<p>首先,VBS中调用该方法可以用Set Shell=CreateObject(&quot;Shell.Application&quot;)来创建对象。该方法的命令格式如下:</p>
<p>Shell.ShellExecute &quot;执行命令或文件的名称&quot;, &quot;执行命令的附加参数&quot;, &quot;执行命令或文件所在目录的绝对路径&quot;, &quot;操作&quot;, 窗口显示类型</p>
<p>具体解释如下:</p>
<p>1.执行命令或文件的名称:就是您要执行的命令或处理文件的名称。例如您想打开一个cmd指令窗口,那么这个名称就是cmd.exe。</p>
<p>2.执行命令的附加参数:如果您执行的命令是需要参数的,则可以将这些参数填写在这里。</p>
<p>3.执行命令或文件所在目录的绝对路径:填写您要执行的命令文件或要处理的文件的存储路径。如果是空则默认为当前路径。</p>
<p>4.操作:本参数有六项设定值可供选择。</p>
<table><tbody><tr><td>设定值</td><td>中文意思</td><td>描述</td></tr><tr><td>edit</td><td>编辑</td><td>使用对应的编辑器打开第一个参数中输入的文件以对其编辑。</td></tr><tr><td>find</td><td>查找</td><td>在第三个参数指定的目录下查找第一个参数指定的文件。</td></tr><tr><td>open</td><td>打开</td><td>运行第一个参数中指定的文件。如果该文件不是一个可执行文件,则用相应的可以打开该文件的软件打开它。</td></tr><tr><td>print</td><td>打印</td><td>打印第一个参数中指定的文件。</td></tr><tr><td>properties</td><td>属性</td><td>列出第一个参数中指定文件的所有属性。</td></tr><tr><td>runas</td><td>以管理员账户运行</td><td>以管理员账户运行第一个参数指定的程序。用户账户管理系统(UAC)会提示用户确认程序以更高的权限运行或要求用户输入管理员账户的凭证。</td></tr></tbody></table>
<p>5.窗口显示类型:这个参数用于设定在执行第一个参数中指定的程序时,以何种方式打开程序窗口。这是一个用数字表示不同设定值的参数。具体内容如下:</p>
<table><tbody><tr><td>设定值</td><td>描述</td></tr><tr><td>0</td><td>在隐藏的窗口中打开程序。</td></tr><tr><td>1</td><td>以正常尺寸打开窗口。如果该窗口已经最大化或最小化,则系统会自动将窗口回滚到正常状态。</td></tr><tr><td>2</td><td>用最小化窗口打开程序。</td></tr><tr><td>3</td><td>用最大化窗口打开程序。</td></tr><tr><td>4</td><td>以最近使用的窗口尺寸和位置打开程序窗口。激活的窗口仍然激活。</td></tr><tr><td>5</td><td>以当前使用的窗口尺寸和位置打开程序窗口。</td></tr><tr><td>7</td><td>以最小化打开程序窗口。当前激活的窗口仍然激活。</td></tr><tr><td>10</td><td>以打开程序默认的窗口尺寸打开程序窗口。</td></tr></tbody></table>
<p>应用实例:本例子是使用ShellExecute方法调用&ldquo;C:\Windows\System32\cmd.exe&rdquo;控制台程序来添加用户。用户名称为username,密码为password。以管理员账户运行。</p>
<div class="jb51code"><pre class="brush:vb;">Set Shell=CreateObject("Shell.Application")
Shell.ShellExecute "cmd.exe", "/k net user username password /add", "C:\Windows\System32\", "runas", 1</pre></div>
<h3>Shell.ShellExecute 方法官方资料</h3>
<p>对指定文件执行指定操作。</p>
<p>语法<br />JScript:</p>
<p>JavaScript</p>
<div class="jb51code"><pre class="brush:js;">iRetVal = Shell.ShellExecute(
  sFile,
  [ vArguments ],
  [ vDirectory ],
  [ vOperation ],
  [ vShow ]
);</pre></div>
<p>VBScript:</p>
<div class="jb51code"><pre class="brush:vb;">iRetVal = Shell.ShellExecute( _
  sFile, _
  [ ByVal vArguments ], _
  [ ByVal vDirectory ], _
  [ ByVal vOperation ], _
  [ ByVal vShow ] _
)</pre></div>
<p>VB:</p>
<div class="jb51code"><pre class="brush:vb;">Shell.ShellExecute( _
  ByVal sFile As BSTR, _
  [ ByVal vArguments As Variant ], _
  [ ByVal vDirectory As Variant ], _
  [ ByVal vOperation As Variant ], _
  [ ByVal vShow As Variant ] _
) As Integer</pre></div>
<h2>参数</h2>
<p>sFile&nbsp;</p>
<p>类型:&nbsp;BSTR</p>
<p>一个&nbsp;字符串&nbsp;,其中包含&nbsp;ShellExecute&nbsp;将对其执行&nbsp;vOperation&nbsp;指定的操作的文件的名称。</p>
<p>vArguments&nbsp;</p>
<p>类型:&nbsp;Variant</p>
<p>包含操作的参数值的字符串。</p>
<p>vDirectory&nbsp;</p>
<p>类型:&nbsp;Variant</p>
<p>包含&nbsp;sFile&nbsp;指定的文件的目录的完全限定路径。 如果未指定此参数,则使用当前工作目录。</p>
<p>vOperation&nbsp;</p>
<p>类型:&nbsp;Variant</p>
<p>要执行的操作。 此值设置为文件支持的谓词字符串之一。 有关谓词的讨论,请参阅&ldquo;备注&rdquo;部分。 如果未指定此参数,则执行默认操作。</p>
<p>vShow&nbsp;</p>
<p>类型:&nbsp;Variant</p>
<p>最初应如何显示应用程序窗口的建议。 应用程序可以忽略此建议。 此参数的取值可为下列值之一: 如果未指定此参数,则应用程序使用其默认值。</p>
<table><tbody><tr><th>值</th><th>含义</th></tr><tr><td><p>0</p></td><td>使用隐藏窗口打开应用程序。</td></tr><tr><td><p>1</p></td><td>使用普通窗口打开应用程序。 如果窗口最小化或最大化,系统会将其还原为其原始大小和位置。</td></tr><tr><td><p>2</p></td><td>使用最小化窗口打开应用程序。</td></tr><tr><td><p>3</p></td><td>使用最大化窗口打开应用程序。</td></tr><tr><td><p>4</p></td><td>使用其窗口打开其最新大小和位置的应用程序。 活动窗口保持活动状态。</td></tr><tr><td><p>5</p></td><td>打开应用程序,其窗口的当前大小和位置。</td></tr><tr><td><p>7</p></td><td>使用最小化窗口打开应用程序。 活动窗口保持活动状态。</td></tr><tr><td><p>10</p></td><td>打开应用程序,其窗口处于应用程序指定的默认状态。</td></tr></tbody></table>
<h2>注解</h2>
<p>此方法等效于启动与文件快捷菜单关联的命令之一。 每个命令由谓词字符串表示。 支持的谓词集因文件而异。 最常支持的谓词是&ldquo;open&rdquo;,这通常是默认谓词。 其他谓词可能仅支持某些类型的文件。 有关 Shell 谓词的进一步讨论,请参阅&nbsp;<a href="https://learn.microsoft.com/zh-cn/windows/win32/shell/launch" rel="external nofollow"   target="_blank">启动应用程序</a>&nbsp;或&nbsp;<a href="https://learn.microsoft.com/zh-cn/windows/win32/shell/context" rel="external nofollow"   target="_blank">扩展快捷菜单</a>。</p>
<p>此方法目前在 Microsoft Visual Basic中不可用。</p>
<h2>示例</h2>
<p>以下示例演示如何使用&nbsp;ShellExecute&nbsp;打开记事本。 JScript和 VBScript 的使用情况显示。</p>
<p>JScript:</p>
<div class="jb51code"><pre class="brush:js;">function ShellExecuteJS()
{
    var objShell = new ActiveXObject("Shell.Application");
    objShell.ShellExecute("notepad.exe", "", "", "open", 1);
}</pre></div>
<p>VBScript:</p>
<div class="jb51code"><pre class="brush:vb;">Function ShellExecuteVB()
    Dim objShell
    Set objShell = CreateObject("Shell.Application")
    Call objShell.ShellExecute("notepad.exe", "", "", "open", 1)
End Function</pre></div>
<h2>要求</h2>
<table><tbody><tr><th>要求</th><th>值</th></tr><tr><td>最低受支持的客户端</td><td>Windows 2000 Professional,Windows XP [仅限桌面应用]</td></tr><tr><td>最低受支持的服务器</td><td>Windows Server 2003 [仅限桌面应用]</td></tr><tr><td>标头</td><td><p>Shldisp.h</p></td></tr><tr><td>IDL</td><td><p>Shldisp.idl</p></td></tr><tr><td>DLL</td><td><p>Shell32.dll (版本 5.0 或更高版本)</p></td></tr></tbody></table>
<p>想了解更多的朋友可以到微软官方查看</p>
<p><a href="https://learn.microsoft.com/zh-cn/windows/win32/shell/shell-shellexecute" rel="external nofollow"   target="_blank">https://learn.microsoft.com/zh-cn/windows/win32/shell/shell-shellexecute</a></p>
頁: [1]
查看完整版本: VBS Shell.Application中ShellExecute的使用方法详解