WPF開發的實用小工具 - 快捷懸浮選單

WPF開發的實用小工具 - 快捷懸浮選單

本文由網友投稿,Dotnet9站長整理。站長覺得這小工具很實用,站長家裡、公司也在嘗試使用了。

最後更新 2020/11/29 下午10:50
闫金华(闫驚鏵)
預計閱讀 6 分鐘
分類
WPF
專題
WPF開源專案
標籤
.NET C# WPF WPF開源專案 開源

本文由網友投稿,Dotnet9 站長整理。站長覺得這小工具很實用,站長家裡、公司也在嘗試使用了。

文章目錄:

  1. 這工具有什麼用?
  2. 本文
  3. 原始碼取得與應用下載體驗
  4. 站長的建議

1. 這工具有什麼用?

問:作業系統安裝的應用程式在哪裡啟動?

答:

  1. 左下角的作業系統開始選單;
  2. 作業系統工作列;
  3. 作業系統桌面捷徑

回答正確,給 10 分!

大家主要在這三個地方找應用程式,大家有想過,把這些應用程式的捷徑集中到一處嗎?想要什麼應用程式,滑鼠只要簡單一滾動,看到目標應用程式一點就啟動了,看看下面的操作是不是你想要的?

快速查找應用程式並啟動

快速查找應用程式並啟動

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

水平選單

水平選單

2. 本文

前言

看最近(站長註:部落格園 WPF 版塊)比較冷清,我來暖暖場。

2020-10-29

【新更新】

  1. 新增系統托盤。

  2. 新增更換面板。

  3. 透明度切換。

【環境】

Visual Studio 2019,dotNet Framework 4.0 SDK

本專案採用 MVVM 模式,簡單介紹功能程式碼:

  1. 取得主監視器上工作區域的尺寸。

  2. 並設定當前主視窗高度,設定視窗的 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);
  1. 移動視窗只允許 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
  1. 在 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 隱藏當前視窗

Tab + Alt 隱藏當前視窗

  1. 在視窗載入完成去登錄檔讀取安裝的應用程式(還有系統桌面),取得應用程式路徑後提取 .ICO 轉換為 .PNG 儲存。

讀取安裝的應用程式

讀取安裝的應用程式

  1. 剩下的程式碼都是 wpf 中的動畫和自訂控制項的程式碼。

【效果圖預覽】

垂直選單

垂直選單

2020/11/09

【新更新】

滾動增加動畫

【效果圖預覽】

垂直滾動動畫

垂直滾動動畫

垂直選單隱藏

垂直選單隱藏

垂直選單摺疊

垂直選單摺疊

垂直選單切換

垂直選單切換

2020/11/19

【新更新】

  1. 新增 drag 移動。

操作使用說明:在主頁面右鍵後會出現虛線邊框然後就可以修改當前應用程式的位置,但是並沒有做儲存。下次啟動後還是會預設排序。

  1. 修改查找已存在參考不會找到解除安裝。

【效果圖預覽】

修改 bug

2020/11/20

【新更新】

  1. 新增移除應用程式。
  2. 編輯時不顯示按鈕。
  3. 編輯時不走動畫。

【效果圖預覽】

可刪除

3. 原始碼取得與應用下載體驗

原始碼下載位址:SoftWareHelper

SoftWareHelper

下載解壓縮後體驗:點擊下載

作者投稿文章:

4. 站長的建議

作者也是憑著一股熱情,一直在更新該專案,大家有需要可以透過上面的連結進行下載、使用,覺得不錯,不要忘了給個 star 哦:SoftWareHelper

SoftWareHelper 倉庫

站長在接到作者投稿之前,也在部落格園關注到了作者發佈的第一篇文章,並下載專案進行了體驗,覺得其中水平的快捷選單不錯,於是提取出來進行了修改(小部分想法已經實現,其餘待抽空完成):

  • 選單透過設定檔設定,因為作業系統可能裝了太多應用程式,不需要全部載入:已實現
  • 支援 exe 拖曳(或者系統產生的捷徑拖曳)新增:已實現
  • 支援網址設定(點擊開啟指定網址,類似網頁收藏捷徑):已實現
  • 支援 cmd 命令設定(例如系統應用 mstsc,遠端桌面設定目標 IP 及連接埠,一鍵開啟連線等):已實現
  • 提供介面設定選單:未實現
  • 顯示圖示與文字:未實現
  • ....更多想法還在想

作者如果覺得上面的想法可以,不妨也考慮加上。

站長先不要臉的奉上基於作者開源專案的修改版,很簡陋的一個版本:QuickApp

QuickApp

除了上面站長自己的魔改版想法外,還有下面的小建議,希望作者在原專案上能考慮:

  • 保留原水平選單的展示方式,最好桌面上、下、左、右都支援才好(可動態切換位置);
  • 更換面板目前只有 light 和 dark 兩種,後面可以適當擴展(用換背景色的方式應該可以);

大家還有什麼建議?歡迎在文章下方留言,或者點擊上面原作者博文留言,集思廣益,大家一起做出一個有意思的小工具出來!!!

感謝

謝謝網友投稿

歡迎大家向站長投稿文章,或推薦 WPF 專案或控制項庫哦。

繼續探索

延伸閱讀

更多文章
同分類 / 同標籤 2025/1/26

WPF 藉助自訂 XML 檔案實現國際化

本文詳細介紹了在WPF程式中使用自訂XML檔案實現國際化的方法,包括安裝必備NuGet套件、動態獲取語言清單、動態切換語言、在程式碼和XAML介面中使用翻譯字串等內容,同時提供了原始碼連結,幫助開發者輕鬆實現WPF應用程式的國際化。

繼續閱讀