如何从Powershell或cmd调用Windows 10共享对话框

时间:2019-04-20 23:18:35

标签: windows powershell cmd

在Windows 10中,如果右键单击图像,则会找到一个名为“共享”的选项。

单击此按钮将打开一个对话框,您可以在其中通过电子邮件共享图像,例如一个便笺。

有人知道我怎么能从CMD或PowerShell调用它吗?因为我想将此功能添加到我的应用中。

我已经到了这一步,但是出现了无效的窗口句柄错误:

$Target = "C:\Users\igweo\OneDrive\Pictures\wallpapers\luca-zanon-26595-unsplash.jpg"

$KeyPath1  = "HKCU:\SOFTWARE\Classes"
$KeyPath2  = "*"
$KeyPath3  = "shell"
$KeyPath4  = "{:}"
$ValueName = "ExplorerCommandHandler"
$ValueData = (Get-ItemProperty("HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\" +
  "Explorer\CommandStore\shell\Windows.ModernShare")).ExplorerCommandHandler


$Key2 = (Get-Item $KeyPath1).OpenSubKey($KeyPath2, $true)
$Key3 = $Key2.CreateSubKey($KeyPath3, $true)
$Key4 = $Key3.CreateSubKey($KeyPath4, $true)
$Key4.SetValue($ValueName, $ValueData)

$Shell = New-Object -ComObject "Shell.Application"
$Folder = $Shell.Namespace((Get-Item $Target).DirectoryName)
$Item = $Folder.ParseName((Get-Item $Target).Name)
$Item.InvokeVerb("{:}")

$Key3.DeleteSubKey($KeyPath4)
if ($Key3.SubKeyCount -eq 0 -and $Key3.ValueCount -eq 0) {
    $Key2.DeleteSubKey($KeyPath3)
}

此外,使用RUNDLL也不起作用:

RUNDLL32.EXE NTSHRUI.DLL,ShowShareFolderUI C:\Users\igweo\OneDrive\Pictures\wallpapers\luca-zanon-26595-unsplash.jpg

1 个答案:

答案 0 :(得分:2)

感谢@Simon Mourier向我指出了答案。 该解决方案可以在https://github.com/daibatzu/electron-sharing

上找到

使用Visual Studio可以构建一个exe文件,我在readme.txt中包含了说明

生成的exe是WindowsFormsApp2.exe 然后,您可以使用以下方式共享文件:

WindowsFormsApp2.exe“ C:\ Projects \ Javascript \ photos \ celeste.png”“ C:\ Projects \ Javascript \ photos \ Silvercoins.jpg”

您可以通过打开cmd提示符,导航到包含WindowsFormsApp2.exe的文件夹并传递文件名作为参数来进行测试。

在共享对话框之外单击将关闭WindowsFormsApp2.exe 不幸的是,您将需要使用Visual Studio更改此应用程序的图标

为了防止您不了解Visual Studio或C#,我提供了一个发行版。您需要7-zip(免费下载)将其解压缩。

再次感谢西蒙。 这花了比我想象的更长的时间。

编辑

github有问题,因此zip文件在这里:https://drive.google.com/file/d/1jyBqO6jmGo5dSxw32LXa5lej1J3ElD34/view?usp=sharing