前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >WPF开发的实用小工具 - 快捷悬浮菜单

WPF开发的实用小工具 - 快捷悬浮菜单

作者头像
独立观察员
发布2022-12-06 18:30:54
1.3K0
发布2022-12-06 18:30:54
举报
文章被收录于专栏:独立观察员博客

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 到最右侧。
代码语言:javascript
复制
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。
代码语言:javascript
复制
#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键切换时隐藏当前窗体。
代码语言:javascript
复制
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隐藏当前窗体

  1. 在窗体加载完成去注册表读取安装的应用(还有系统桌面),获取应用路径后提取.ICO转换为.PNG保存。

读取安装应用

  1. 剩下的代码都是wpf中的动画和自动定义控件的代码。
【效果图预览】

竖直菜单

2020/11/09

【新更新】

滚动增加动画

【效果图预览】

竖直滚动动画

竖直菜单隐藏

竖直菜单折叠

竖直菜单切换

2020/11/19

【新更新】
  1. 新增drag移动。

操作使用说明:在主页面右键后会出现虚线边框然后就可以修改当前应用的位置,但是并没有做保存。下次启动后还是会默认排序。

  1. 修改查找已存在引用不会找到卸载。
【效果图预览】

修改bug

2020/11/20

【新更新】
  1. 新增移除应用。
  2. 编辑时不显示按钮。
  3. 编辑时不走动画。
【效果图预览】

可删除

3. 源码获取及应用下载体验

源码下载地址:SoftWareHelper

SoftWareHelper

下载解压后体验:点击下载

作者投稿文章:

  • Wpf 开发的实用小工具(附源码)持续更新
  • Wpf 开发的实用小工具(附源码)持续更新(二)拖动应用
  • Wpf 开发的实用小工具(附源码)持续更新(三)移除应用

4. 站长建议

作者也是凭着一股热情,一直在更新该项目,大家有需要可以通过上面的链接进行下载、使用,觉得不错,不要忘了给个star哦:SoftWareHelper。

SoftWareHelper仓库

站长在接到作者投搞之前,也在博客园关注到了作者发布的第一篇文章,并下载项目进行了体验,觉得其中水平的快捷菜单不错,于是提取出来进行了修改(小部分想法已经实现,其余待抽空完成):

  • 菜单通过配置文件配置,因为操作系统可能装了太多应用,不需要全部加载:已实现
  • 支持exe拖拽(或者系统生成的快捷方式拖拽)添加:已实现
  • 支持网址配置(点击打开指定网址,类似网页收藏快捷方式):已实现
  • 支持cmd命令配置(比如系统应用mstsc,远程桌面配置目标IP及端口,一键打开连接等):已实现
  • 提供界面配置菜单:未实现
  • 显示图标与文字:未实现
  • ....更多想法还在想

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

站长先不要脸的奉上基于作者开源项目的修改版,很简陋的一个版本:QuickApp

QuickApp

除了上面站长自己的魔改版想法外,还有下面的小建议,希望作者在原项目上能考虑:

  • 保留原水平菜单的展示方式,最好桌面上、下、左、右都支持才好(可动态切换位置);
  • 换肤目前只有lignt和dark两种,后面可以适当扩展(用换背景色的方式应该可以);

大家还有什么建议?欢迎在文章下方留言,或者点击上面原作者博文留言,集思广益,大家一起做出一个有意思的小工具出来!!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 独立观察员博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • WPF开发的实用小工具 - 快捷悬浮菜单
    • 1. 这工具有什么用?
      • 2.正文
        • 前言
        • 2020-10-29
        • 2020/11/09
        • 2020/11/19
        • 2020/11/20
      • 3. 源码获取及应用下载体验
        • 4. 站长建议
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档