mirror of
https://github.com/microsoft/PowerToys
synced 2025-09-05 08:55:13 +00:00
After #39955, the "exe" items from the shell commands only ever have the "Run{as admin, as other user}" commands. This adds the rest of the "file" commands - copy path, open in explorer, etc. This shuffles around some commands into the toolkit and common commands project to make this easier. <img width="814" height="505" alt="image" src="https://github.com/user-attachments/assets/36ae2c75-d4d6-4762-98ec-796986f39c20" />
58 lines
1.6 KiB
C#
58 lines
1.6 KiB
C#
// Copyright (c) Microsoft Corporation
|
|
// The Microsoft Corporation licenses this file to you under the MIT license.
|
|
// See the LICENSE file in the project root for more information.
|
|
|
|
using System.Runtime.InteropServices;
|
|
using ManagedCsWin32;
|
|
using Microsoft.CmdPal.Common.Properties;
|
|
using Microsoft.CommandPalette.Extensions.Toolkit;
|
|
using Windows.Win32.UI.WindowsAndMessaging;
|
|
|
|
namespace Microsoft.CmdPal.Common.Commands;
|
|
|
|
public partial class OpenWithCommand : InvokableCommand
|
|
{
|
|
internal static IconInfo OpenWithIcon { get; } = new("\uE7AC");
|
|
|
|
private readonly string _path;
|
|
|
|
private static unsafe bool OpenWith(string filename)
|
|
{
|
|
var filenamePtr = Marshal.StringToHGlobalUni(filename);
|
|
var verbPtr = Marshal.StringToHGlobalUni("openas");
|
|
|
|
try
|
|
{
|
|
var info = new Shell32.SHELLEXECUTEINFOW
|
|
{
|
|
CbSize = (uint)sizeof(Shell32.SHELLEXECUTEINFOW),
|
|
LpVerb = verbPtr,
|
|
LpFile = filenamePtr,
|
|
Show = (int)SHOW_WINDOW_CMD.SW_SHOWNORMAL,
|
|
FMask = global::Windows.Win32.PInvoke.SEE_MASK_INVOKEIDLIST,
|
|
};
|
|
|
|
return Shell32.ShellExecuteEx(ref info);
|
|
}
|
|
finally
|
|
{
|
|
Marshal.FreeHGlobal(filenamePtr);
|
|
Marshal.FreeHGlobal(verbPtr);
|
|
}
|
|
}
|
|
|
|
public OpenWithCommand(string fullPath)
|
|
{
|
|
this._path = fullPath;
|
|
this.Name = Resources.Indexer_Command_OpenWith;
|
|
this.Icon = OpenWithIcon;
|
|
}
|
|
|
|
public override CommandResult Invoke()
|
|
{
|
|
OpenWith(_path);
|
|
|
|
return CommandResult.GoHome();
|
|
}
|
|
}
|