本文由網友投稿,dotnet9 站長整理。站長覺得這小工具很實用,站長家裡、公司也在嘗試使用了。
行文目錄:
- 這工具有什麼用?
- 正文
- 源碼獲取及應用下載體驗
- 站長的建議
1. 這工具有什麼用?
問:作業系統安裝的應用在哪裡啟動?
答:
- 左下角的作業系統開始菜單;
- 作業系統任務欄;
- 作業系統桌面快捷方式
回答正確,給 10 分!
大家主要在這三個地方找應用,大家有想過,把這些應用的快捷方式集中到一處嗎?想要什麼應用,滑鼠只要簡單一滾動,看到目標應用一點就啟動了,看看下面的操作是不是你想要的?
快捷查找應用並啟動

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

2.正文
前言
看最近(站長註:博客園 wpf 版塊)比較冷清,我來暖暖場。
2020-10-29
【新更新】
新增托盤。
新增換膚。
透明度切換。
【環境】
Visual Studio 2019,dotNet Framework 4.0 SDK
本項目採用 mvvm 模式,簡單居間功能代碼:
獲取主監視器上工作區域的尺寸。
並設置當前主窗體高度,設置窗體的 left 與 top 到最右側。
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 軸 移動,調用 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 鍵切換時隱藏當前窗體。
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);
tab + alt 隱藏當前窗體

- 在窗體加載完成去註冊表讀取安裝的應用(還有系統桌面),獲取應用路徑後提取.ico 轉換為.png 保存。
讀取安裝應用

- 剩下的代碼都是 wpf 中的動畫和自動定義控制項的代碼。
【效果圖預覽】
豎直菜單

2020/11/09
【新更新】
滾動增加動畫
【效果圖預覽】
豎直滾動動畫

豎直菜單隱藏

豎直菜單摺疊

豎直菜單切換

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

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

3. 源碼獲取及應用下載體驗
源码下载地址:SoftWareHelper

下载解压后体验:点击下载
作者投稿文章:
4. 站長建議
作者也是凭着一股热情,一直在更新该项目,大家有需要可以通过上面的链接进行下载、使用,觉得不错,不要忘了给个 star 哦:SoftWareHelper。

站長在接到作者投搞之前,也在博客園關注到了作者發布的第一篇文章,並下載項目進行了體驗,覺得其中水平的快捷菜單不錯,於是提取出來進行了修改(小部分想法已經實現,其餘待抽空完成):
- 菜單通過配置文件配置,因為作業系統可能裝了太多應用,不需要全部加載:已實現
- 支持 exe 拖拽(或者系統生成的快捷方式拖拽)添加:已實現
- 支持網址配置(點擊打開指定網址,類似網頁收藏快捷方式):已實現
- 支持 cmd 命令配置(比如系統應用 mstsc,遠程桌面配置目標 ip 及埠,一鍵打開連接等):已實現
- 提供界面配置菜單:未實現
- 顯示圖標與文字:未實現
- ...更多想法還在想
作者如果覺得上面的想法可以,不妨也考慮加上。
站长先不要脸的奉上基于作者开源项目的修改版,很简陋的一个版本:QuickApp

除了上面站長自己的魔改版想法外,還有下面的小建議,希望作者在原項目上能考慮:
- 保留原水平菜單的展示方式,最好桌面上、下、左、右都支持才好(可動態切換位置);
- 換膚目前只有 lignt 和 dark 兩種,後面可以適當擴展(用換背景色的方式應該可以);
大家還有什麼建議?歡迎在文章下方留言,或者點擊上面原作者博文留言,集思廣益,大家一起做出一個有意思的小工具出來!!!
感謝
謝謝網友投稿
- 博客园博主:驚鏵
歡迎大家向站長投稿文章,或推薦 wpf 項目或者控制項庫哦。
- 文中网友仓库地址
SoftWareHelper:https://github.com/yanjinhuagood/SoftWareHelper