Support context menu modifications for third-party file managers (XYplorer, Total Commander, Double Commander and possibly more)#797
Conversation
…info in third party file managers
…nd selected items
…ird-party file managers
|
You did a good job. I don’t understand anything about coding, but I would like Nilesoft Shell to work everywhere it’s possible. I use Everything and Directory Opus, and it’s a pity that this can’t be done in DOpus. If possible, could you please explain in simpler terms which lines of code need to be added to the .nss files to enable support in Everything? Thank you for your contribution! |
|
I was going to create a new thread asking about this but it sounds like the third-party file manager that I use, xplorer², can also be included here as well, because only changes to theme.nss are working and no modify.nss/remove.nss changes are working. |
I implemented an context menu shell extension in Nilesoft Shell to retrieve the selected file list, so that it works in most file managers where Shell Extensions are allowed to run in context menu. In my test, in XYplorer, Total Commander, Double Commander, Everything context menu modifications are working correctly, in Directory Opus and OneCommander, they are not working because they don't use native context menu.
In the beginning I discovered that Nilesoft Shell doesn't work properly with third-party file managers. It only changes the menu appearence, item addition/modification are not working, like so:

On the Internet I found out lots of discussions on this problem:
https://www.xyplorer.com/xyfc/viewtopic.php?p=226677#p226677
https://www.xyplorer.com/xyfc/viewtopic.php?t=26686
https://web.archive.org/web/20250715220407/https://www.xyplorer.com/xyfc/viewtopic.php?t=27737
https://resource.dopus.com/t/how-can-i-make-the-directory-opus-use-my-windows-context-menu/53508/4
https://www.reddit.com/r/OneCommander/comments/1hf7q6l/request_support_for_nilesoft_shell_integration/
Because I feel like Nilesoft Shell fits well with modern Windows 11 UI, and replacement solutions are not as easy to use, I decided to somehow implement third-party file manager support for Nilesoft Shell. I reseached into the code of Nilesoft Shell and come up with my solution.
The details of this implementation is that:
Selection::QuerySelected.g_ShellContext.ContextMenu::Initializeit checks for the dummy context menu item it generated to judge whether a menu is indeed a context menu.QuerySelectedreads selected file list stored ing_ShellContext.Instead of Windows File Explorer hook that only works in Explorer, this method can retrieve the selected file list wherever Shell Extension runs (in third-party file managers). The original implementation requires a
ShellBrowserto be available inSelection::QueryShellWindow, and used inSelection::QuerySelected, but third-party managers implement file browser by themselves, they don't have aShellBrowserexposed. My implementation doesn't completely change how it works, it only tries to use the Shell Extension retrieved file selection list when the original method fails.Below are some screenshots showing it work in different file managers. In
shell.nssthe excluded condition should be changed. like:XYplorer
exclude.where = !process.is_explorer && (process.name != "XYplorer") && (process.name != "notepad") && (process.name != "dopus") && (process.name != "dopusrt") && (process.name != "doublecmd") && (process.name != "OneCommander")Total Commander 64-bit

Double Commander

Directory Opus (not working)
Everything (working)

If it's not working, it can be added in "excluded" condition, to remove the "ShellExtSelectionRetriever Placeholder" item in context menu.