今天給大家分享一個我做的小工具,可以自定義擴展右鍵菜單的功能來提高工作效率,效果圖如下:
如上圖,右鍵菜單多了幾個我自定義的菜單
-
複製文件路徑 -
複製文件夾路徑 -
我的工具箱 <走配置文件動態創建子菜單,下面會講>
我上圖是在win10操作系統下演示的,在win11系統也測試可用。
源碼和工具包已經開源在github https://github.com/yuzd/WindowsExplorerExtensions
歡迎star,如果github訪問慢,可以公衆號內回覆 菜單擴展 會提供你baidu網盤的下載包
如何安裝
軟件包下載後,解壓後
-
windows-explorer-ext目錄是安裝擴展文件用的 -
30594988.csv 是測試csv轉excel的demo文件 -
csv2xlsx.exe是我開發的一個netcore獨立打包的csv轉excel的執行文件
csv2xlsx的源碼地址: https://github.com/yuzd/Exporter/tree/master/ConsoleApp
是基於我開源的各種類型轉化封裝庫,比如csv,xlsx,json,list相互轉化
開源地址:https://github.com/yuzd/Exporter
有人可能會問 ,如果電腦安裝了office的話 直接csv就可以打開爲excel啊, 但是默認的雙擊csv以excel方式打開,對於是大數字會顯示成下面這樣
所以我想要讓csv的內容全部以字符串類型展示(就是上面csv3xlsx的功能了)
開始安裝
進入解壓後的windows-explorer-ext目錄
-
ServerManager.exe 安裝擴展用的 -
menu.txt 動態菜單配置文件 -
WindowsExplorerExtentions.dll 擴展邏輯封裝
首先打開ServerManager.exe
這個工具你也可以從官方地址下載:https://github.com/dwmkerr/sharpshell/releases
打開ServerManager.exe 點擊Load Server
然後選中當前目錄的WindowsExplorerExtentions.dll
選中第一個然後點擊Install安裝擴展
出現如下提示代表安裝成功
此時,複製文件地址和複製文件夾地址這2個擴展菜單已經可用了
<我的工具箱>是動態創建二級子菜單的容器,需要配置下文件
打開menu.txt配置文件
總共要配置4個東西(按照-_-隔開)
-
[1]針對什麼後綴的文件進行 比如.csv代表只針對csv文件纔會創建該菜單 -
[2]菜單名稱 -
[3]這個菜單功能對應的可執行文件 這個根據功能自己開發了 -
[4]傳給上面可執行文件的參數 {path} 會動態替換爲選擇的文件地址全路徑
注意,針對[1] 有2個特殊約定
如果配置 * 那麼選擇文件或者文件夾都會出現該菜單
*-_-測試-_-E:\xxxxx\xxxx.exe-_-"{path}"
如果配置 folder 那麼只會選擇文件夾纔會出現該菜單
folder-_-測試-_-E:\xxxxx\xxxx.exe-_-"{path}"
這樣一來的話,如果我後面想要動態創建菜單,只需要開發這個菜單功能的可執行文件,然後再menu.txt新增個配置就搞定了, 是不是很方便
上面說到下載包有個csv2xlsx.exe文件,下面我們配置下 動態新增一個二級子菜單<轉成excel> 只針對csv文件有效
menu.txt配置如下:
.csv-_-轉成excel-_-E:\Tool\windows-extention\csv2xlsx.exe-_-"{path}"
我們這麼配置下:
配置好後,在csv類型文件點擊右鍵,就可以看到效果了
點擊該菜單,會啓動一個cmd窗口 注意,在非csv的文件是不會有這個菜單的,這個是根據配置來的
其實就是將選中的文件路徑傳給你配置的可執行文件去執行
源碼說明
打開vs創建一個空的solution,新增一個新的Class Library 工程(目標是framework)
引入 ShapShell 包
示例代碼
[ComVisible(true)]//這個很關鍵
[COMServerAssociation(AssociationType.AllFiles)] //這個代表針對文件類型纔有效
//[COMServerAssociation(AssociationType.AllFilesAndFolders)]這個代表針對全部類型有效,包括文件夾
public class CopyFileLocationExt : SharpContextMenu
{
protected override bool CanShowMenu()
{
return true;
}
protected override ContextMenuStrip CreateMenu()
{
try
{
var contextMenu = new ContextMenuStrip();
var menuItem = new ToolStripMenuItem("複製文件路徑");
menuItem.Image = Resources.AppStrings.Duplicate3;
menuItem.Click += (sender, args) =>
{
var file = SelectedItemPaths.First();
Clipboard.SetText(file);
};
contextMenu.Items.Add(menuItem);
// Return the menu.
return contextMenu;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + Environment.NewLine + ex.StackTrace);
return null;
}
}
}
主要依賴ShapShell,創建SharpContextMenu的實現類,重寫關鍵的CanShowMenu和CreateMenu的方法 注意[ComVisible(true)]不能漏
如何調試
用ServerManager.exe註冊進去後,菜單點擊的時候會進入斷點
關於我
微軟最有價值專家是微軟公司授予第三方技術專業人士的一個全球獎項。27年來,世界各地的技術社區領導者,因其在線上和線下的技術社區中分享專業知識和經驗而獲得此獎項。
MVP是經過嚴格挑選的專家團隊,他們代表着技術最精湛且最具智慧的人,是對社區投入極大的熱情並樂於助人的專家。MVP致力於通過演講、論壇問答、創建網站、撰寫博客、分享視頻、開源項目、組織會議等方式來幫助他人,並最大程度地幫助微軟技術社區用戶使用Microsoft技術。
更多詳情請登錄官方網站https://mvp.microsoft.com/zh-cn