我正在关注此 msdn 文档。我想创建一个具有两个属性 AppUserModelId
和 ToastActivatorCLSID
的快捷方式。我如何使用 powershell 实现这一点。
基本上我想转换以下代码并通过powershell脚本创建快捷方式。
_Use_decl_annotations_
HRESULT DesktopToastsApp::InstallShortcut(PCWSTR shortcutPath, PCWSTR exePath)
{
ComPtr<IShellLink> shellLink;
HRESULT hr = CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink));
if (SUCCEEDED(hr))
{
hr = shellLink->SetPath(exePath);
if (SUCCEEDED(hr))
{
ComPtr<IPropertyStore> propertyStore;
hr = shellLink.As(&propertyStore);
if (SUCCEEDED(hr))
{
PROPVARIANT propVar;
propVar.vt = VT_LPWSTR;
propVar.pwszVal = const_cast<PWSTR>(AppId); // for _In_ scenarios, we don't need a copy
hr = propertyStore->SetValue(PKEY_AppUserModel_ID, propVar);
if (SUCCEEDED(hr))
{
propVar.vt = VT_CLSID;
propVar.puuid = const_cast<CLSID*>(&__uuidof(NotificationActivator));
hr = propertyStore->SetValue(PKEY_AppUserModel_ToastActivatorCLSID, propVar);
if (SUCCEEDED(hr))
{
hr = propertyStore->Commit();
if (SUCCEEDED(hr))
{
ComPtr<IPersistFile> persistFile;
hr = shellLink.As(&persistFile);
if (SUCCEEDED(hr))
{
hr = persistFile->Save(shortcutPath, TRUE);
}
}
}
}
}
}
}
return hr;
}
我写了一个简单的脚本来创建快捷方式,但不确定如何标记上述两个道具
function set-shortcut {
param ( [string]$SourceLnk, [string]$DestinationPath )
$WshShell = New-Object -comObject WScript.Shell
$Shortcut = $WshShell.CreateShortcut($SourceLnk)
$Shortcut.TargetPath = $DestinationPath
$Shortcut.Save()
}
答案 0 :(得分:1)
为什么不直接使用 MS powershellgallery.com 中的预构建模块/脚本来确定它们是否解决了您的用例,而不是从头开始重写。除非这是一种学习努力。即便如此,查看下面的底层代码可能会有所帮助。
Find-Module -Name '*shortcut*'
# Results
<#
Version Name Repository Description
------- ---- ---------- -----------
2.2.0 DSCR_Shortcut PSGallery PowerShell DSC Resource to create shortcut file.
...
1.0.6 PSShortcut PSGallery This module eases working with Windows shortcuts (LNK and URL) files.
...
#>
Find-Script -Name '*Shortcut*'
# Results
<#
Version Name Repository Description
------- ---- ---------- -----------
...
1.0.0.0 New-DeskTopShortCut PSGallery Create a desktop shortcut
#>
答案 1 :(得分:0)
我也不知道 PSGallery
中有这个任务的模块,所以我前段时间写了一个脚本,看看是否有帮助:
编辑:
您只需在脚本顶部添加 $InformationPreference = "Continue"
即可显示信息性消息。