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隐藏当前窗体
  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两种,后面可以适当扩展(用换背景色的方式应该可以);

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

感谢

谢谢网友投稿

  • 博客园博主:驚鏵

欢迎大家向站长投稿文章,或推荐WPF项目或者控件库哦。

资源分享

谢谢您的支持,需要任何资源,只需要在公众号后台回复对应数字即可,注:只回复【数字】中的数字:

  • 【01】dotnet

  • 【02】java

  • 【03】android

  • 【04】C++

  • 【05】qt

  • 【06】react

想要的资源本号没有资源链接失效,请【公众号后台留言】或【加我微信】。另:大部分资源可在我的网站搜索哦:https://dotnet9.com

微信中外链无法访问,可点击下方阅读原文查看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306721.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

accdb原有的数据怎么清除_VBA中利用数组对数据批量处理的方法

大家好,今日继续和大家分享VBA编程中常用的常用"积木"过程代码。这些内容大多是我的经验和记录,来源于我多年的经验。今日分享的是NO.225-NO.226,内容是:NO. 225:数组的赋值和回填工作表NO. 226:…

云南河道 kml文件_处理能力提升 4 倍 ,大疆智图 4 天完成 5 公里河道建模

马陵河是江苏省宿迁市老城区一条重要排涝河道,1974 年人工开挖而成,全长 5.2 km,汇水面积 11.6 km,居住人口 13.85 万人。河道水质长期处于黑臭状态,严重影响周边居民日常生活,被称为宿迁的“龙须沟”。宿迁…

linq 查询的结果会开辟新的内存吗?

一:背景 1. 讲故事昨天群里有位朋友问:linq 查询的结果会开辟新的内存吗?如果开了,那是对原序列集里面元素的深拷贝还是仅仅拷贝其引用?其实这个问题我觉得问的挺好,很多初学 C# 的朋友或多或少都有这样的疑…

问题 B: 十进制到二进制的转换

这个问题我们来用栈来实现 首先,我们先定义一个栈的结构体(栈的结构体与链表的结构体不可同,栈的结构体第二项是用int定义栈的顶端; 而链表的第二项,是用struct定义一个指针) struct stack{int data[10005];int top;…

javascript内存泄漏调试工具mac_node.js 内存泄漏的秘密

一直以来,跟踪 Node.js 的内存泄漏是一个反复出现的话题,人们始终希望对其复杂性和原因了解更多。并非所有的内存泄漏都显而易见。但是,一旦我们确定了其模式,就必须在内存使用率,内存中保存的对象和响应时间之间寻找关…

Leansoft再发招贤令:面试官徐磊有话讲 | IDCF

(图片来源于网络)2020是Leansoft成立的第五年,凭借专业的服务及实施能力,逐渐成长为国内唯一的端到端专业DevOps实施服务公司。Leansoft是一家怎样的公司呢?准确地说,我们其实是国内唯一一家提供端到端的De…

问题 B: 数塔问题

题目描述 有如下所示的数塔&#xff0c;要求从顶层走到底层&#xff0c;若每一步只能走到相邻的结点&#xff0c;则经过的结点的数字之和最大是多少&#xff1f; 输入 第一行是一个整数N(1 < N < 20)&#xff0c;表示数塔的高度&#xff0c;接下来用N个数字表示数塔&a…

e盾服务端源码_gRPC服务注册发现及负载均衡的实现方案与源码解析

今天聊一下gRPC的服务发现和负载均衡原理相关的话题&#xff0c;不同于Nginx、Lvs或者F5这些服务端的负载均衡策略&#xff0c;gRPC采用的是客户端实现的负载均衡。什么意思呢&#xff0c;对于使用服务端负载均衡的系统&#xff0c;客户端会首先访问负载均衡的域名/IP&#xff…

堆问题(最小堆变最大堆,堆删除,中序遍历)

2-6 设最小堆&#xff08;小根堆&#xff09;的层序遍历结果为 {8, 38, 25, 58, 52, 82, 70, 60}。用线性时间复杂度的算法将该堆调整为最大堆&#xff08;大根堆&#xff09;&#xff0c;然后连续执行两次删除最大元素操作&#xff08;DeleteMax&#xff09;。则该树的中序遍历…

推荐一款.NET Core开源爬虫神器:DotnetSpider

没有爬虫就没有互联网&#xff01;爬虫的意义在于采集大批量数据&#xff0c;然后基于此进行加工/分析&#xff0c;做更有意义的事情。谷歌&#xff0c;百度&#xff0c;今日头条&#xff0c;天眼查都离不开爬虫。去开源中国和Github查询C#的爬虫项目&#xff0c;仅有几个非常简…

Excel学习使用教程

1.Excel的保存与加密 加密&#xff1a; 我设置的密码&#xff1a;517485

问题 D: 二叉树求高度

题目描述 已知一棵二叉树用邻接表结构存储&#xff0c;求这棵树的高度。例&#xff1a;如图二叉树的数据文件的数据格式如下: 输入 第一行n为二叉树的结点个树&#xff0c;n≤100&#xff1b;以下第一列数据是各结点的值&#xff0c;第二列数据是左儿子结点编号&#xff0c;第…

.Net Core in Docker - 使用阿里云Codepipeline及阿里云容器镜像服务实现持续集成(CI)...

前面已经介绍过了 .Net Core In Docker 在容器内编译并发布的内容。但是每次通过 SSH 链接到服务器敲命令&#xff0c;运行脚本也是挺麻烦的一件事。程序员是最懒的&#xff0c;能让电脑解决的问题绝不手动解决&#xff0c;如果当我们push一次代码后自动build代码&#xff0c;自…

mysql 序列_MySql中序列的应用和总结

Mysql中的序列主要用于主键&#xff0c;主键是递增的字段&#xff0c;不可重复。Mysql与Oracle不同的是&#xff0c;它不支持原生态的sequence&#xff0c;需要用表和函数的组合来实现类似序列的功能。1.首先创建序列的主表/*2.其次创建如下三个函数&#xff0c;它们的功能分别…

汉诺塔问题详细解析zufeoj

汉诺塔&#xff08;Tower of Hanoi&#xff09;&#xff0c;又称河内塔&#xff0c;是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重…

靠刷算法题,真的可以刷进大厂吗?

我一直不知道我在大家心目中的定位是什么&#xff0c;但我内心其实是把自己定义为一个『工具人』的。可能是因为我自己本身就是程序员&#xff0c;所以更能理解程序员的不易吧。所以&#xff0c;我尽量不写水文&#xff0c;只分享干货。就是希望大家看了能够有所收获&#xff0…

java 判断object类型_Java 类继承机制

封装、继承、多态是面向对象的三大特征&#xff0c;“继承”最主要的目的是为了实现代码的可复用性。通过父类与子类的继承关系&#xff0c;子类继承了父类的成员函数和成员变量&#xff0c;提高了代码的重复利用率。同时&#xff0c;子类也可以扩展自己特有的成员&#xff0c;…

一个情怀引发的生产事故(续)

接上一篇博文&#xff0c;用Roslyn动态编译C#语句片段&#xff0c;情怀了一把&#xff0c;但内存会飙升&#xff0c;执行速度也奇慢&#xff0c;这条路走不通&#xff0c;回归正道&#xff0c;说起脚本&#xff0c;Lua是常用的手段之一&#xff0c;那就看看NLua怎么样&#xff…

c++的unique函数

在STL中unique函数是一个去重函数&#xff0c; unique的功能是去除相邻的重复元素(只保留一个),其实它并不真正把重复的元素删除&#xff0c;是把重复的元素移到后面去了&#xff0c;然后依然保存到了原数组中&#xff0c;然后 返回去重后最后一个元素的地址&#xff0c;因为un…

用户登录查全表好还是用用户名好_外贸人/货代人不要为海运难过了:请看如何查运价和调配舱位解决缺箱!...

最近很多外贸人/货代人都被海运伤透了心&#xff0c;不仅价格上涨&#xff0c;还经常没舱位或缺柜子&#xff01;整个人的心态都不好了。其实呢运价上涨这个大环境趋势&#xff0c;我们也无法改变。但是没舱位和缺柜子是属于流动性的&#xff0c;只要不死盯一家船公司还是可以解…