今天給大家分享一個我做的小工具,可以自定義擴充套件右鍵選單的功能來提高工作效率,效果圖如下:
如上圖,右鍵選單多了幾個我自定義的選單
-
複製檔案路徑 -
複製資料夾路徑 -
我的工具箱 <走配置檔案動態建立子選單,下面會講>
我上圖是在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