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

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

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

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

感謝

謝謝網友投稿

歡迎大家向站長投稿文章,或推薦 wpf 項目或者控制項庫哦。

Keep Exploring

延伸阅读

更多文章
同分类 / 同标签 2025/1/26

wpf 藉助自定義 xml 文件實現國際化

本文詳細居間了在wpf程式中使用自定義xml文件實現國際化的方法,包括安裝必備nuget包、動態獲取語言列表、動態切換語言、在代碼和xaml界面中使用翻譯字符串等內容,同時提供了源碼連結,幫助開發者輕鬆實現wpf應用的國際化。

继续阅读