From 98a8cdf693a580a3453486bc2dbcce8e375d6f15 Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Fri, 19 Aug 2022 00:24:50 -0700 Subject: [PATCH] remove gongshell, add "simple" code for opening win32 context menu (gongshell's only actual use), re: #2261 --- References/GongShell.XML | 1795 ----------------- References/GongShell.dll | Bin 111616 -> 0 bytes .../BizHawk.Client.EmuHawk.csproj | 1 - .../Extensions/ToolExtensions.cs | 23 +- .../Win32/Win32ShellContextMenu.cs | 284 +++ 5 files changed, 298 insertions(+), 1805 deletions(-) delete mode 100644 References/GongShell.XML delete mode 100644 References/GongShell.dll create mode 100644 src/BizHawk.Common/Win32/Win32ShellContextMenu.cs diff --git a/References/GongShell.XML b/References/GongShell.XML deleted file mode 100644 index 4b8bb166608..00000000000 --- a/References/GongShell.XML +++ /dev/null @@ -1,1795 +0,0 @@ - - - - GongShell - - - - - Provides a toolbar showing common places in the computer's - filesystem. - - - - Use the control to display a - toolbar listing common places in the computer's filesystem, - similar to that on the far left-side of the standard file - open/save dialogs. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Initializes a new instance of the - class. - - - - - Adds a new folder to the toolbar. - - - - A representing the folder to be added. - - - - true if the item was sucessfully added, false otherwise. - - - - - Overrides the method. - - - - - - A that should be automatically - navigated when the user clicks on an entry in the toolbar. - - - - - Occurs when the control wants to - know if it should include an item. - - - - This event allows the items displayed in the - control to be filtered. - - - - - This property does not apply to the - class. - - - - - This property is not relevant to the - class. - - - - - This property is not relevant to the - class. - - - - - This property is not relevant to the - class. - - - - - This property is not relevant to the - class. - - - - - This property is not relevant to the - class. - - - - - This property is not relevant to the - class. - - - - - This property is not relevant to the - class. - - - - - This property is not relevant to the - class. - - - - - This property is not relevant to the - class. - - - - - This property is not relevant to the - class. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - A filename combo box suitable for use in file Open/Save dialogs. - - - - - This control extends the class to provide - auto-completion of filenames based on the folder selected in a - . The control also automatically navigates - the ShellView control when the user types a folder path. - - - - - - Determines whether the specified key is a regular input key or a - special key that requires preprocessing. - - - - One of the values. - - - - true if the specified key is a regular input key; otherwise, false. - - - - - Raises the event. - - - - A that contains the event data. - - - - - Raises the event. - - - - A that contains the event data. - - - - - Raises the event. - - - - An that contains the event data. - - - - - Initializes a new instance of the - class. - - - - - Gets/sets the control that the - should look for auto-completion - hints. - - - - - Occurs when a file name is entered into the - and the Return key pressed. - - - - - Provides a drop-down list displaying the Windows Shell namespace. - - - - The class displays a view of the Windows - Shell namespace in a drop-down list similar to that displayed in - a file open/save dialog. - - - - - Initializes a new instance of the class. - - - - - Gets/sets a value indicating whether the combo box is editable. - - - - - Gets/sets a value indicating whether the full file system path - should be displayed in the main portion of the control. - - - - - Gets/sets the folder that the should - display as the root folder. - - - - - Gets/sets the folder currently selected in the - . - - - - - Gets/sets a whose navigation should be - controlled by the combo box. - - - - - Occurs when the 's - property changes. - - - - - Occurs when the control wants to know - if it should include a folder in its view. - - - - This event allows the folders displayed in the - control to be filtered. - - - - - Represents an item in the Windows Shell namespace. - - - - - Initializes a new instance of the class. - - - - Takes a containing the location of the ShellItem. - This constructor accepts URIs using two schemes: - - - file: A file or folder in the computer's filesystem, e.g. - file:///D:/Folder - - shell: A virtual folder, or a file or folder referenced from - a virtual folder, e.g. shell:///Personal/file.txt - - - - A containing the location of the ShellItem. - - - - - Initializes a new instance of the class. - - - - Takes a containing the location of the ShellItem. - This constructor accepts URIs using two schemes: - - - file: A file or folder in the computer's filesystem, e.g. - file:///D:/Folder - - shell: A virtual folder, or a file or folder referenced from - a virtual folder, e.g. shell:///Personal/file.txt - - - - A string containing a Uri with the location of the ShellItem. - - - - - Initializes a new instance of the class. - - - - Takes an containing the - location of the folder. - - - - An containing the - location of the folder. - - - - - Initializes a new instance of the class. - - - - Creates a ShellItem which is a named child of . - - - - The parent folder of the item. - - - - The name of the child item. - - - - - Initializes a new instance of the class. - - - - An representing the folder. - - - - - Compares two s. The comparison is carried - out by display order. - - - - The item to compare. - - - - 0 if the two items are equal. A negative number if - is before in - display order. A positive number if - comes after in - display order. - - - - - Determines whether two s refer to - the same shell folder. - - - - The item to compare. - - - - if the two objects refer to the same - folder, otherwise. - - - - - Returns the name of the item in the specified style. - - - - The style of display name to return. - - - - A string containing the display name of the item. - - - - - Returns an enumerator detailing the child items of the - . - - - - This method returns all child item including hidden - items. - - - - An enumerator over all child items. - - - - - Returns an enumerator detailing the child items of the - . - - - - A filter describing the types of child items to be included. - - - - An enumerator over all child items. - - - - - Returns an enumerator detailing the child items of the - . - - - - This method returns all child item including hidden - items. - - - - An enumerator over all child items. - - - - - Returns an representing the - item. This object is used in drag and drop operations. - - - - - Returns an representing the - item. This object is used in drag and drop operations. - - - - - Returns an representing the - item. - - - - - Gets the index in the system image list of the icon representing - the item. - - - - The type of icon to retrieve. - - - - Flags detailing additional information to be conveyed by the icon. - - - - - - - Tests whether the is the immediate parent - of another item. - - - - The potential child item. - - - - - Tests whether the is the parent of - another item. - - - - The potential child item. - - - - - Returns a string representation of the . - - - - - Returns a URI representation of the . - - - - - Tests if two s refer to the same folder. - - - - The first folder. - - - - The second folder. - - - - - Tests if two s refer to the same folder. - - - - The first folder. - - - - The second folder. - - - - - Gets a child item. - - - - The name of the child item. - - - - - Gets the underlying COM interface. - - - - - Gets the normal display name of the item. - - - - - Gets the file system path of the item. - - - - - Gets a value indicating whether the item has subfolders. - - - - - Gets a value indicating whether the item is a file system item. - - - - - Gets a value indicating whether the item is a file system item - or the child of a file system item. - - - - - Gets a value indicating whether the item is a folder. - - - - - Gets a value indicating whether the item is read-only. - - - - - Gets the item's parent. - - - - - Gets the item's parsing name. - - - - - Gets a PIDL representing the item. - - - - - Gets the item's shell icon. - - - - - Gets the item's tooltip text. - - - - - Gets the Desktop folder. - - - - - Enumerates the types of shell icons. - - - - The system large icon type - - - The system shell icon type - - - The system small icon type - - - - Enumerates the optional styles that can be applied to shell icons. - - - - The icon is displayed opened. - - - Get the overlay for the icon as well. - - - - Provides support for displaying the context menu of a shell item. - - - - - Use this class to display a context menu for a shell item, either - as a popup menu, or as a main menu. - - - - To display a popup menu, simply call - with the parent control and the position at which the menu should - be shown. - - - - To display a shell context menu in a Form's main menu, call the - method to populate the menu. In addition, - you must intercept a number of special messages that will be sent - to the menu's parent form. To do this, you must override - like so: - - - - protected override void WndProc(ref Message m) { - if ((m_ContextMenu == null) || (!m_ContextMenu.HandleMenuMessage(ref m))) { - base.WndProc(ref m); - } - } - - - - Where m_ContextMenu is the being shown. - - - Standard menu commands can also be invoked from this class, for - example and . - - - - - Initialises a new instance of the - class. - - - - The item to which the context menu should refer. - - - - - Initialises a new instance of the - class. - - - - The items to which the context menu should refer. - - - - - Handles context menu messages when the - is displayed on a Form's main menu bar. - - - - - To display a shell context menu in a Form's main menu, call the - method to populate the menu with the shell - item's menu items. In addition, you must intercept a number of - special messages that will be sent to the menu's parent form. To - do this, you must override like so: - - - - protected override void WndProc(ref Message m) { - if ((m_ContextMenu == null) || (!m_ContextMenu.HandleMenuMessage(ref m))) { - base.WndProc(ref m); - } - } - - - - Where m_ContextMenu is the being shown. - - - - - The message to handle. - - - - if the message was a Shell Context Menu - message, if not. If the method returns false, - then the message should be passed down to the base class's - method. - - - - - Invokes the Delete command on the shell item. - - - - - Invokes the Rename command on the shell item. - - - - - Populates a with the context menu items for - a shell item. - - - - If this method is being used to populate a Form's main menu - then you need to call in the - Form's message handler. - - - - The menu to populate. - - - - - Shows a context menu for a shell item. - - - - The parent control. - - - - The position on that the menu - should be displayed at. - - - - - Gets the underlying COM interface. - - - - - A strongly-typed resource class, for looking up localized strings, etc. - - - - - Returns the cached ResourceManager instance used by this class. - - - - - Overrides the current thread's CurrentUICulture property for all - resource lookups using this strongly typed resource class. - - - - - Provides a toolbar suitable for use in file Open/Save dialogs. - - - - This control provides a toolbar containing a - and the various navigation buttons as - found in a standard file dialog. By setting the - property, the toolbar will automatically - control the navigation of a ShellView> control in response to the - user's actions. - - - - - Required designer variable. - - - - - Clean up any resources being used. - - true if managed resources should be disposed; otherwise, false. - - - - Required method for Designer support - do not modify - the contents of this method with the code editor. - - - - - Initializes a new instance of the FileDialogToolbar control. - - - - - Gets/sets the root folder displayed in the toolbar's drop-down - folder list. - - - - - Gets/sets the folder currently selected in the toolbar's combo box. - - - - - Gets/sets a whose navigation should be - controlled by the toolbar. - - - - - Occurs when the needs to know - what items it should display in its drop-down list. - - - - - A file-filter combo box suitable for use in open/save file dialogs. - - - - - This control extends the class to provide - automatic filtering of shell items according to wildcard patterns. - By setting the control's property, the control - will automatically filter items in a ShellView. - - - - The property accepts a filter string - similar to that accepted by the standard - class, for example: - "Text files (*.txt)|*.txt|All files (*.*)|*.*" - - - - The currently selected filter is selected by the - property. This should be set to one of the filter patterns specified - in , e.g. "*.txt". - - - - - - Initializes a new instance of the - class. - - - - - Generates a object equivalent to the - provided wildcard. - - - - The wildcard to generate a regex for. - - - - A regex equivalent to the wildcard. - - - - - Raises the event. - - - - An EventArgs that contains the event data. - - - - - Gets or sets the current filter string, which determines the - items that appear in the control's . - - - - - This property does not apply to . - - - - - Gets/sets the filter string which determines the choices that - appear in the control's drop-down list. - - - - - For each filtering option, the filter string contains a - description of the filter, followed by the vertical bar (|) and - the filter pattern. The strings for different filtering options - are separated by the vertical bar. - - - - If the filter itself does not appear in the description then - it will be automatically added when the control is displayed. - For example, in the example below the "Video files" entry will - be displayed as "Video files (*.avi, *.wmv)". Beacuse the "All - files" entry already has the filter string present in its - description, it will not be added again. - - - - - "Video files|*.avi, *.wmv|All files (*.*)|*.*" - - - - - - - This property does not apply to . - - - - - Gets/sets the control that the - should filter the items of. - - - - - Provides a tree view of a computer's folders. - - - - - The control allows you to embed Windows - Explorer functionality in your Windows Forms applications. The - control provides a tree view of the computer's folders, as it would - appear in the left-hand pane in Explorer. - - - - - - Initializes a new instance of the class. - - - - - Refreses the contents of the . - - - - - Gets/sets a value indicating whether drag/drop operations are - allowed on the control. - - - - - Gets or sets a value indicating whether a tree node label takes on - the appearance of a hyperlink as the mouse pointer passes over it. - - - - - Gets or sets the root folder that is displayed in the - . - - - - - Gets/sets a whose navigation should be - controlled by the treeview. - - - - - Gets or sets the selected folder in the - . - - - - - Gets or sets a value indicating whether hidden folders should - be displayed in the tree. - - - - - Occurs when the property changes. - - - - - This property does not apply to the - class. - - - - Describes whether hidden files/folders should be displayed in a - control. - - - - Hidden files/folders should not be displayed. - - - - - Hidden files/folders should be displayed. - - - - - The Windows Explorer "Show hidden files" setting should be used - to determine whether to show hidden files/folders. - - - - - Listens for notifications of changes in the Windows Shell Namespace. - - - - - Initializes a new instance of the - class. - - - - - Initializes a new instance of the - class. - - - - - Overrides the method. - - - - - - Occurs when a drive is added. - - - - - Occurs when a drive is removed. - - - - - Occurs when a folder is created. - - - - - Occurs when a folder is deleted. - - - - - Occurs when a folder is renamed. - - - - - Occurs when a folder's contents are updated. - - - - - Occurs when a non-folder item is created. - - - - - Occurs when a non-folder item is deleted. - - - - - Occurs when a non-folder item is renamed. - - - - - Occurs when a non-folder item is updated. - - - - - Occurs when the shared state for a folder changes. - - - - - Provides information of changes in the Windows Shell Namespace. - - - - - Initializes a new instance of the - class. - - - - The ShellItem that has changed. - - - - - The ShellItem that has changed. - - - - - Provides information of changes in the Windows Shell Namespace. - - - - - Initializes a new instance of the - class. - - - - The ShellItem before the change - - - - The ShellItem after the change - - - - - The ShellItem before the change. - - - - - The ShellItem after the change. - - - - - Represents the method that handles change notifications from - - - - - The source of the event. - - - - A that contains the data - for the event. - - - - - Represents the method that handles change notifications from - - - - - The source of the event. - - - - A that contains the data - for the event. - - - - - Specifies how list items are displayed in a - control. - - - - - Each item appears as a full-sized icon with a label below it. - - - - - Each item appears as a small icon with a label to its right. - - - - - Each item appears as a small icon with a label to its right. - Items are arranged in columns with no column headers. - - - - - Each item appears on a separate line with further information - about each item arranged in columns. The left-most column - contains a small icon and label. - - - - - Each item appears with a thumbnail picture of the file's content. - - - - - Each item appears as a full-sized icon with the item label and - file information to the right of it. - - - - - Each item appears in a thumbstrip at the bottom of the control, - with a large preview of the seleted item appearing above. - - - - - Provides a view of a computer's files and folders. - - - - - The control allows you to embed Windows - Explorer functionality in your Windows Forms applications. The - control provides a view of a single folder's contents, as it would - appear in the right-hand pane in Explorer. - - - - When a new control is added to a form, - it displays the contents of the Desktop folder. Other folders - can be displayed by calling one of the Navigate methods or setting - the property. - - - - - - Initializes a new instance of the class. - - - - - Creates a new folder in the folder currently being browsed. - - - - - Deletes the item currently selected in the . - - - - - Navigates to the specified . - - - - The folder to navigate to. - - - - - Navigates to the specified filesystem directory. - - - - The path of the directory to navigate to. - - - - is not a valid folder. - - - - - Navigates to the specified standard location. - - - - The to which to navigate. - - - - Standard locations are virtual folders which may be located in - different places in different versions of Windows. For example - the "My Documents" folder is normally located at C:\My Documents - on Windows 98, but is located in the user's "Documents and - Settings" folder in Windows XP. Using a standard - to refer to such folders - ensures that your application will behave correctly on all - versions of Windows. - - - - - Navigates the control to the previous folder - in the navigation history. - - - - - The WebBrowser control maintains a history list of all the folders - visited during a session. You can use the - method to implement a Back button similar to the one in - Windows Explorer, which will allow your users to return to a - previous folder in the navigation history. - - - - Use the property to determine whether - the navigation history is available and contains a previous page. - This property is useful, for example, to change the enabled state - of a Back button when the ShellView control navigates to or leaves - the beginning of the navigation history. - - - - - There is no history to navigate backwards through. - - - - - Navigates the control backwards to the - requested folder in the navigation history. - - - - The WebBrowser control maintains a history list of all the folders - visited during a session. You can use the - method to implement a drop-down menu on a Back button similar - to the one in Windows Explorer, which will allow your users to return - to a previous folder in the navigation history. - - - - The folder to navigate to. - - - - The requested folder is not present in the - 's 'back' history. - - - - - Navigates the control to the next folder - in the navigation history. - - - - - The WebBrowser control maintains a history list of all the folders - visited during a session. You can use the - method to implement a Forward button similar to the one - in Windows Explorer, allowing your users to return to the next - folder in the navigation history after navigating backward. - - - - Use the property to determine - whether the navigation history is available and contains a folder - located after the current one. This property is useful, for - example, to change the enabled state of a Forward button - when the ShellView control navigates to or leaves the end of the - navigation history. - - - - - There is no history to navigate forwards through. - - - - - Navigates the control forwards to the - requested folder in the navigation history. - - - - The WebBrowser control maintains a history list of all the folders - visited during a session. You can use the - method to implement a drop-down menu - on a Forward button similar to the one in Windows Explorer, - which will allow your users to return to a folder in the 'forward' - navigation history. - - - - The folder to navigate to. - - - - The requested folder is not present in the - 's 'forward' history. - - - - - Navigates to the parent of the currently displayed folder. - - - - - Navigates to the folder currently selected in the - . - - - - If the 's - property is set, and more than one item is selected in the - ShellView, the first Folder found will be navigated to. - - - - if a selected folder could be - navigated to, otherwise. - - - - - Refreshes the contents of the . - - - - - Begins a rename on the item currently selected in the - . - - - - - Selects all items in the . - - - - - Overrides - - - - - - - Creates the actual shell view control. - - - - - Overrides . - - - - - - - - Overrides . - - - - - - - Overrides - - - - - - - - Overrides - - - - - - Gets a value indicating whether a new folder can be created in - the folder currently being browsed by th . - - - - - Gets a value indicating whether a previous page in navigation - history is available, which allows the - method to succeed. - - - - - Gets a value indicating whether a subsequent page in navigation - history is available, which allows the - method to succeed. - - - - - Gets a value indicating whether the folder currently being browsed - by the has parent folder which can be - navigated to by calling . - - - - - Gets the control's underlying COM IShellView interface. - - - - - Gets/sets a describing the folder - currently being browsed by the . - - - - - Gets the 's navigation history. - - - - - Gets a list of the items currently selected in the - - - - - A array detailing the items currently - selected in the control. If no items are currently selected, - an empty array is returned. - - - - - Gets/sets a value indicating whether multiple items can be selected - by the user. - - - - - Gets/sets a value indicating whether a "WebView" is displayed on - the left of the control. - - - - The WebView is a strip of HTML that appears to the left of a - Windows Explorer window when the window has no Explorer Bar. - It displays general system tasks and locations, as well as - information about the items selected in the window. - - - Important: When is set to - , the - event will not occur. This is due to a limitation in the - underlying windows control. - - - - - - Gets/sets a control that the - should use to display folder details. - - - - - Gets or sets how items are displayed in the control. - - - - - Occurs when the control wants to know - if it should include an item in its view. - - - - This event allows the items displayed in the - control to be filtered. You may want to to only list files with - a certain extension, for example. - - - - - Occurs when the control navigates to a - new folder. - - - - - Occurs when the control is about to - navigate to a new folder. - - - - - Occurs when the 's current selection - changes. - - - - Important: When is set to - , this event will not occur. This is due to - a limitation in the underlying windows control. - - - - - This property does not apply to . - - - - - This property does not apply to . - - - - - This property does not apply to . - - - - - Provides information for FilterItem events. - - - - - Initializes a new instance of the - class. - - - - The item to be filtered. - - - - - Gets/sets a value which will determine whether the item will be - included in the . - - - - - The item to be filtered. - - - - - Provides information for the - event. - - - - - Initializes a new instance of the - class. - - - - The folder being navigated to. - - - - - Gets/sets a value indicating whether the navigation should be - cancelled. - - - - - The folder being navigated to. - - - - - Exception raised when a user aborts a Shell operation. - - - - - Initializes a new instance of the - class. - - - - The inner exception. - - - - - Represents the method that will handle FilterItem events. - - - - - Represents the method that will handle the - event. - - - - - Holds a 's navigation history. - - - - - Clears the shell history. - - - - - Gets the list of folders in the 's - Back history. - - - - - Gets the list of folders in the 's - Forward history. - - - - diff --git a/References/GongShell.dll b/References/GongShell.dll deleted file mode 100644 index ee48480b75da797b5ae08cb767e9a88fb847eb29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 111616 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 z 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�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 G0{;i0SCP#C diff --git a/src/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/src/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index 48b1713e164..9a7c16fd598 100755 --- a/src/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/src/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -16,7 +16,6 @@ - diff --git a/src/BizHawk.Client.EmuHawk/Extensions/ToolExtensions.cs b/src/BizHawk.Client.EmuHawk/Extensions/ToolExtensions.cs index a80a9f71362..da6091dc100 100644 --- a/src/BizHawk.Client.EmuHawk/Extensions/ToolExtensions.cs +++ b/src/BizHawk.Client.EmuHawk/Extensions/ToolExtensions.cs @@ -2,6 +2,7 @@ using System.IO; using System.Collections.Generic; using System.Windows.Forms; + using BizHawk.Common; using BizHawk.Emulation.Common; using BizHawk.Client.Common; @@ -113,16 +114,20 @@ public static ToolStripItem[] RecentMenu(this RecentFiles recent, IMainFormForTo tsmiCopyFile.Click += (o, ev) => { Clipboard.SetFileDropList(lame); }; tsdd.Items.Add(tsmiCopyFile); - var tsmiTest = new ToolStripMenuItem { Text = "&Shell Context Menu" }; - tsmiTest.Click += (o, ev) => + if (!OSTailoredCode.IsUnixHost) { - var si = new GongSolutions.Shell.ShellItem(hf.FullPathWithoutMember); - var scm = new GongSolutions.Shell.ShellContextMenu(si); - var tsddi = o as ToolStripDropDownItem; - tsddi.Owner.Update(); - scm.ShowContextMenu(tsddi.Owner, new System.Drawing.Point(0, 0)); - }; - tsdd.Items.Add(tsmiTest); + var tsmiTest = new ToolStripMenuItem { Text = "&Shell Context Menu" }; + tsmiTest.Click += (o, ev) => + { + var tsddi = o as ToolStripDropDownItem; + tsddi.Owner.Update(); + using var menu = new ContextMenu(); + using var dummy = new Control(); + Win32ShellContextMenu.ShowContextMenu( + hf.FullPathWithoutMember, menu.Handle, dummy.Handle, tsddi.Owner.Location.X, tsddi.Owner.Location.Y); + }; + tsdd.Items.Add(tsmiTest); + } tsdd.Items.Add(new ToolStripSeparator()); } diff --git a/src/BizHawk.Common/Win32/Win32ShellContextMenu.cs b/src/BizHawk.Common/Win32/Win32ShellContextMenu.cs new file mode 100644 index 00000000000..3b1d6dc4da5 --- /dev/null +++ b/src/BizHawk.Common/Win32/Win32ShellContextMenu.cs @@ -0,0 +1,284 @@ +using System; +using System.Runtime.InteropServices; +using System.Text; + +namespace BizHawk.Common +{ + public class Win32ShellContextMenu + { + [ComImport] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [Guid("43826d1e-e718-42ee-bc55-a1e261c37bfe")] + public interface IShellItem + { + IntPtr BindToHandler(IntPtr pbc, + [MarshalAs(UnmanagedType.LPStruct)] Guid bhid, + [MarshalAs(UnmanagedType.LPStruct)] Guid riid); + + [PreserveSig] + int GetParent(out IShellItem ppsi); + + IntPtr GetDisplayName(uint sigdnName); + + uint GetAttributes(uint sfgaoMask); + + int Compare(IShellItem psi, uint hint); + } + + + [ComImport] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [Guid("000214F2-0000-0000-C000-000000000046")] + public interface IEnumIDList + { + [PreserveSig] + int Next(uint celt, out IntPtr rgelt, out uint pceltFetched); + + [PreserveSig] + int Skip(uint celt); + + [PreserveSig] + int Reset(); + + IEnumIDList Clone(); + } + + [ComImport] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [Guid("000214E6-0000-0000-C000-000000000046")] + public interface IShellFolder + { + void ParseDisplayName( + [In] IntPtr hwnd, + [In] IntPtr pbc, + [In, MarshalAs(UnmanagedType.LPWStr)] string pszDisplayName, + [Out] out uint pchEaten, + [Out] out IntPtr ppidl, + [In, Out] ref uint pdwAttributes); + + [PreserveSig] + int EnumObjects( + [In] IntPtr hwnd, + [In] SHCONTF grfFlags, + [Out] out IEnumIDList ppenumIDList); + + void BindToObject(IntPtr pidl, IntPtr pbc, + [MarshalAs(UnmanagedType.LPStruct)] Guid riid, + out IntPtr ppv); + + void BindToStorage(IntPtr pidl, IntPtr pbc, + [MarshalAs(UnmanagedType.LPStruct)] Guid riid, + out IntPtr ppv); + + [PreserveSig] + short CompareIDs(uint lParam, IntPtr pidl1, IntPtr pidl2); + + IntPtr CreateViewObject(IntPtr hwndOwner, + [MarshalAs(UnmanagedType.LPStruct)] Guid riid); + + void GetAttributesOf(uint cidl, + [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 0)] IntPtr[] apidl, + ref uint rgfInOut); + + void GetUIObjectOf(IntPtr hwndOwner, uint cidl, + [MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] IntPtr[] apidl, + [MarshalAs(UnmanagedType.LPStruct)] Guid riid, + uint rgfReserved, + out IntPtr ppv); + + void GetDisplayNameOf(IntPtr pidl, int uFlags, out STRRET pName); + + void SetNameOf(IntPtr hwnd, IntPtr pidl, string pszName, SHCONTF uFlags, out IntPtr ppidlOut); + + public enum SHCONTF + { + FOLDERS = 0x0020, + NONFOLDERS = 0x0040, + INCLUDEHIDDEN = 0x0080, + INIT_ON_FIRST_NEXT = 0x0100, + NETPRINTERSRCH = 0x0200, + SHAREABLE = 0x0400, + STORAGE = 0x0800 + } + + [StructLayout(LayoutKind.Explicit, Size = 264)] + public struct STRRET + { + [FieldOffset(0)] + public uint uType; + [FieldOffset(4)] + public IntPtr pOleStr; + [FieldOffset(4)] + public IntPtr pStr; + [FieldOffset(4)] + public uint uOffset; + [FieldOffset(4)] + public IntPtr cStr; + } + } + + [Flags] + public enum TPM + { + TPM_LEFTBUTTON = 0x0000, + TPM_RIGHTBUTTON = 0x0002, + TPM_LEFTALIGN = 0x0000, + TPM_CENTERALIGN = 0x000, + TPM_RIGHTALIGN = 0x000, + TPM_TOPALIGN = 0x0000, + TPM_VCENTERALIGN = 0x0010, + TPM_BOTTOMALIGN = 0x0020, + TPM_HORIZONTAL = 0x0000, + TPM_VERTICAL = 0x0040, + TPM_NONOTIFY = 0x0080, + TPM_RETURNCMD = 0x0100, + TPM_RECURSE = 0x0001, + TPM_HORPOSANIMATION = 0x0400, + TPM_HORNEGANIMATION = 0x0800, + TPM_VERPOSANIMATION = 0x1000, + TPM_VERNEGANIMATION = 0x2000, + TPM_NOANIMATION = 0x4000, + TPM_LAYOUTRTL = 0x8000, + } + + [Flags] + public enum CMF : uint + { + NORMAL = 0x00000000, + DEFAULTONLY = 0x00000001, + VERBSONLY = 0x00000002, + EXPLORE = 0x00000004, + NOVERBS = 0x00000008, + CANRENAME = 0x00000010, + NODEFAULT = 0x00000020, + INCLUDESTATIC = 0x00000040, + EXTENDEDVERBS = 0x00000100, + RESERVED = 0xffff0000, + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct CMINVOKECOMMANDINFO + { + public int cbSize; + public int fMask; + public IntPtr hwnd; + public string lpVerb; + public string lpParameters; + public string lpDirectory; + public int nShow; + public int dwHotKey; + public IntPtr hIcon; + } + + [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] + public struct CMINVOKECOMMANDINFO_ByIndex + { + public int cbSize; + public int fMask; + public IntPtr hwnd; + public int iVerb; + public string lpParameters; + public string lpDirectory; + public int nShow; + public int dwHotKey; + public IntPtr hIcon; + } + + [ComImport] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [Guid("000214e4-0000-0000-c000-000000000046")] + public interface IContextMenu + { + [PreserveSig] + int QueryContextMenu(IntPtr hMenu, uint indexMenu, int idCmdFirst, int idCmdLast, CMF uFlags); + + void InvokeCommand(ref CMINVOKECOMMANDINFO pici); + + [PreserveSig] + int GetCommandString(int idcmd, uint uflags, int reserved, + [MarshalAs(UnmanagedType.LPStr)] StringBuilder commandstring, + int cch); + } + + [ComImport] + [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)] + [Guid("000214f4-0000-0000-c000-000000000046")] + public interface IContextMenu2 : IContextMenu + { + [PreserveSig] + new int QueryContextMenu(IntPtr hMenu, uint indexMenu, int idCmdFirst, int idCmdLast, CMF uFlags); + + void InvokeCommand(ref CMINVOKECOMMANDINFO_ByIndex pici); + + [PreserveSig] + new int GetCommandString(int idcmd, uint uflags, int reserved, + [MarshalAs(UnmanagedType.LPStr)] StringBuilder commandstring, + int cch); + + [PreserveSig] + int HandleMenuMsg(int uMsg, IntPtr wParam, IntPtr lParam); + } + + [DllImport("shell32.dll", CharSet = CharSet.Unicode, PreserveSig = false)] + public static extern IShellItem SHCreateItemFromParsingName( + [In] string pszPath, + [In] IntPtr pbc, + [In, MarshalAs(UnmanagedType.LPStruct)] Guid riid); + + [DllImport("shell32.dll", PreserveSig = false)] + public static extern IntPtr SHGetIDListFromObject([In, MarshalAs(UnmanagedType.IUnknown)] object punk); + + [DllImport("shell32.dll", EntryPoint = "#16")] + public static extern IntPtr ILFindLastID(IntPtr pidl); + + [DllImport("user32.dll")] + public static extern int TrackPopupMenuEx(IntPtr hmenu, TPM fuFlags, int x, int y, IntPtr hwnd, IntPtr lptpm); + + private IContextMenu ComInterface { get; } + private IContextMenu2 ComInterface2 { get; } + + private static Guid SFObject = new("3981e224-f559-11d3-8e3a-00c04f6837d5"); + + private Win32ShellContextMenu(string path) + { + var uri = new Uri(path); + + // gongshell supported shell schemes, although that seems complicated to support and very edge case, so not bothering for now --cpp + if (uri.Scheme != "file") + { + throw new NotSupportedException("Non-file Uri schemes are unsupported"); + } + + var shellItem = SHCreateItemFromParsingName(uri.LocalPath, IntPtr.Zero, typeof(IShellItem).GUID); + + var pidls = new IntPtr[1]; + pidls[0] = ILFindLastID(SHGetIDListFromObject(shellItem)); + shellItem.GetParent(out var parent); + + var result = parent.BindToHandler(IntPtr.Zero, SFObject, typeof(IShellFolder).GUID); + + var shellFolder = (IShellFolder)Marshal.GetObjectForIUnknown(result); + shellFolder.GetUIObjectOf(IntPtr.Zero, 1, pidls, typeof(IContextMenu).GUID, 0, out result); + + ComInterface = (IContextMenu)Marshal.GetObjectForIUnknown(result); + ComInterface2 = (IContextMenu2)ComInterface; + } + + public static void ShowContextMenu(string path, IntPtr handle, IntPtr hwnd, int x, int y) + { + var ctxMenu = new Win32ShellContextMenu(path); + const int CmdFirst = 0x8000; + ctxMenu.ComInterface.QueryContextMenu(handle, 0, CmdFirst, int.MaxValue, CMF.EXPLORE); + int command = TrackPopupMenuEx(handle, TPM.TPM_RETURNCMD, x, y, hwnd, IntPtr.Zero); + if (command > 0) + { + const int SW_SHOWNORMAL = 1; + CMINVOKECOMMANDINFO_ByIndex invoke = default; + invoke.cbSize = Marshal.SizeOf(invoke); + invoke.iVerb = command - CmdFirst; + invoke.nShow = SW_SHOWNORMAL; + ctxMenu.ComInterface2.InvokeCommand(ref invoke); + } + } + } +}