WPF開發(fā)的實(shí)用小工具 - 快捷懸浮菜單
WPF開發(fā)的實(shí)用小工具 - 快捷懸浮菜單
?本文由網(wǎng)友投稿,Dotnet9站長整理。站長覺得這小工具很實(shí)用,站長家里、公司也在嘗試使用了。
行文目錄:
這工具有什么用? 正文 源碼獲取及應(yīng)用下載體驗(yàn) 站長的建議
1. 這工具有什么用?
問:操作系統(tǒng)安裝的應(yīng)用在哪里啟動?
答:
左下角的操作系統(tǒng)開始菜單; 操作系統(tǒng)任務(wù)欄; 操作系統(tǒng)桌面快捷方式
回答正確,給10分!
大家主要在這三個地方找應(yīng)用,大家有想過,把這些應(yīng)用的快捷方式集中到一處嗎?想要什么應(yīng)用,鼠標(biāo)只要簡單一滾動,看到目標(biāo)應(yīng)用一點(diǎn)就啟動了,看看下面的操作是不是你想要的?

市面上有很多類似的軟件小工具,做得功能可能更強(qiáng)大,但誰叫我們是程序員,不搞點(diǎn)自己開發(fā)的小玩意兒,那還有面出去說道說道?哈哈哈,下面是站長參考作者的開源項(xiàng)目,提取其中的一種風(fēng)格做出來的(vs 2019 + .net 5,最近交流才知道,作者暫時去掉了水平菜單,笑哭了,希望作者后面加上):

2.正文
前言
看最近(站長注:博客園WPF版塊)比較冷清,我來暖暖場。
2020-10-29
【新更新】
新增托盤。
新增換膚。
透明度切換。
【環(huán)境】
Visual Studio 2019,dotNet Framework 4.0 SDK
本項(xiàng)目采用MVVM模式,簡單介紹功能代碼:
獲取主監(jiān)視器上工作區(qū)域的尺寸。
并設(shè)置當(dāng)前主窗體高度,設(shè)置窗體的Left與Top 到最右側(cè)。
private?Rect?desktopWorkingArea;???????
desktopWorkingArea?=?System.Windows.SystemParameters.WorkArea;
this.Height?=?desktopWorkingArea.Height?/?2;
this.Left?=?desktopWorkingArea.Width?-?this.Width;
this.Top?=?desktopWorkingArea.Height?/?2?-?(this.Height?/?2);
移動窗體只允許Y軸 移動,調(diào)用Win32 的 MoveWindow。
#region?移動窗體
protected?override?void?OnMouseLeftButtonDown(MouseButtonEventArgs?e)
{
????anchorPoint?=?e.GetPosition(this);
????inDrag?=?true;
????CaptureMouse();
????e.Handled?=?true;
}
protected?override?void?OnMouseMove(MouseEventArgs?e)
{
????try
????{
????????if?(inDrag)
????????{
????????????System.Windows.Point?currentPoint?=?e.GetPosition(this);
????????????var?y?=?this.Top?+?currentPoint.Y?-?anchorPoint.Y;
????????????Win32Api.RECT?rect;
????????????Win32Api.GetWindowRect(new?WindowInteropHelper(this).Handle,?out?rect);
????????????var?w?=?rect.right?-?rect.left;
????????????var?h?=?rect.bottom?-?rect.top;
????????????int?x?=?Convert.ToInt32(PrimaryScreen.DESKTOP.Width?-?w);
????????????Win32Api.MoveWindow(new?WindowInteropHelper(this).Handle,?x,?(int)y,?w,?h,?1);
????????}
????}
????catch?(Exception?ex)
????{
????????Log.Error($"MainView.OnMouseMove{ex.Message}");
????}
}
protected?override?void?OnMouseLeftButtonUp(MouseButtonEventArgs?e)
{
????if?(inDrag)
????{
????????ReleaseMouseCapture();
????????inDrag?=?false;
????????e.Handled?=?true;
????}
}
#endregion
在Tab鍵+Alt鍵切換時隱藏當(dāng)前窗體。
WindowInteropHelper?wndHelper?=?new?WindowInteropHelper(this);
int?exStyle?=?(int)Win32Api.GetWindowLong(wndHelper.Handle,?(int)Win32Api.GetWindowLongFields.GWL_EXSTYLE);
exStyle?|=?(int)Win32Api.ExtendedWindowStyles.WS_EX_TOOLWINDOW;
Win32Api.SetWindowLong(wndHelper.Handle,?(int)Win32Api.GetWindowLongFields.GWL_EXSTYLE,?(IntPtr)exStyle);

在窗體加載完成去注冊表讀取安裝的應(yīng)用(還有系統(tǒng)桌面),獲取應(yīng)用路徑后提取.ICO轉(zhuǎn)換為.PNG保存。

剩下的代碼都是wpf中的動畫和自動定義控件的代碼。
【效果圖預(yù)覽】

2020/11/09
【新更新】
滾動增加動畫
【效果圖預(yù)覽】




2020/11/19
【新更新】
新增drag移動。
操作使用說明:在主頁面右鍵后會出現(xiàn)虛線邊框然后就可以修改當(dāng)前應(yīng)用的位置,但是并沒有做保存。下次啟動后還是會默認(rèn)排序。
修改查找已存在引用不會找到卸載。
【效果圖預(yù)覽】

2020/11/20
【新更新】
新增移除應(yīng)用。 編輯時不顯示按鈕。 編輯時不走動畫。
【效果圖預(yù)覽】

3. 源碼獲取及應(yīng)用下載體驗(yàn)
源碼下載地址:SoftWareHelper

下載解壓后體驗(yàn):點(diǎn)擊下載
作者投稿文章:
Wpf 開發(fā)的實(shí)用小工具(附源碼)持續(xù)更新 Wpf 開發(fā)的實(shí)用小工具(附源碼)持續(xù)更新(二)拖動應(yīng)用 Wpf 開發(fā)的實(shí)用小工具(附源碼)持續(xù)更新(三)移除應(yīng)用
4. 站長建議
作者也是憑著一股熱情,一直在更新該項(xiàng)目,大家有需要可以通過上面的鏈接進(jìn)行下載、使用,覺得不錯,不要忘了給個star哦:SoftWareHelper。

站長在接到作者投搞之前,也在博客園關(guān)注到了作者發(fā)布的第一篇文章,并下載項(xiàng)目進(jìn)行了體驗(yàn),覺得其中水平的快捷菜單不錯,于是提取出來進(jìn)行了修改(小部分想法已經(jīng)實(shí)現(xiàn),其余待抽空完成):
菜單通過配置文件配置,因?yàn)椴僮飨到y(tǒng)可能裝了太多應(yīng)用,不需要全部加載:已實(shí)現(xiàn) 支持exe拖拽(或者系統(tǒng)生成的快捷方式拖拽)添加:已實(shí)現(xiàn) 支持網(wǎng)址配置(點(diǎn)擊打開指定網(wǎng)址,類似網(wǎng)頁收藏快捷方式):已實(shí)現(xiàn) 支持cmd命令配置(比如系統(tǒng)應(yīng)用mstsc,遠(yuǎn)程桌面配置目標(biāo)IP及端口,一鍵打開連接等):已實(shí)現(xiàn) 提供界面配置菜單:未實(shí)現(xiàn) 顯示圖標(biāo)與文字:未實(shí)現(xiàn) ....更多想法還在想
作者如果覺得上面的想法可以,不妨也考慮加上。
站長先不要臉的奉上基于作者開源項(xiàng)目的修改版,很簡陋的一個版本:QuickApp

除了上面站長自己的魔改版想法外,還有下面的小建議,希望作者在原項(xiàng)目上能考慮:
保留原水平菜單的展示方式,最好桌面上、下、左、右都支持才好(可動態(tài)切換位置); 換膚目前只有l(wèi)ignt和dark兩種,后面可以適當(dāng)擴(kuò)展(用換背景色的方式應(yīng)該可以);
大家還有什么建議?歡迎在文章下方留言,或者點(diǎn)擊上面原作者博文留言,集思廣益,大家一起做出一個有意思的小工具出來?。?!
感謝
謝謝網(wǎng)友投稿
博客園博主:驚鏵
歡迎大家向站長投稿文章,或推薦WPF項(xiàng)目或者控件庫哦。
資源分享
謝謝您的支持,需要任何資源,只需要在公眾號后臺回復(fù)對應(yīng)數(shù)字即可,注:只回復(fù)【數(shù)字】中的數(shù)字:
【01】dotnet 【02】java 【03】android 【04】C++ 【05】qt 【06】react
想要的資源本號沒有 或 資源鏈接失效,請【公眾號后臺留言】或【加我微信】。另:大部分資源可在我的網(wǎng)站搜索哦:https://dotnet9.com
微信中外鏈無法訪問,可點(diǎn)擊下方閱讀原文查看。
