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:…

问题 A: 约瑟夫问题(普及第一关模拟)

题目描述 求解约瑟夫(Joseph)问题。有n个小孩围成一圈,给他们从1开始依次编号,从编号为1的小孩开始报数,数到第m个小孩出列,然后从出列的下一个小孩重新开始报数,数到第m个小孩又出列&#xff…

云南河道 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 的内存泄漏是一个反复出现的话题,人们始终希望对其复杂性和原因了解更多。并非所有的内存泄漏都显而易见。但是,一旦我们确定了其模式,就必须在内存使用率,内存中保存的对象和响应时间之间寻找关…

c++STL中的find()函数 有两种使用方法

cSTL中的find()函数 有两种使用方法 方法一: 开头引头文件:中的函数 其调用形式为 find(start,end,value) start搜寻的起点,end搜寻的终点,要寻找的value值; 如果没有找到,则返回end。函数的返…

关于C# Span的一些实践

Span这个东西出来很久了,居然因为5.0又火起来了。特别感谢RC兄弟提出这个话题。相关知识在大多数情况下,C#开发时,我们只使用托管内存。而实际上,C#为我们提供了三种类型的内存:堆栈内存 - 最快速的内存,能…

问题 C: 【例2-3】围圈报数

题目描述 有&#xff4e;(n<100)个人依次围成一圈&#xff0c;从第&#xff11;个人开始报数&#xff0c;数到第&#xff4d;个人出列&#xff0c;然后从出列的下一个人开始报数&#xff0c;数到第&#xff4d;个人又出列&#xff0c;…&#xff0c;如此反复到所有的人全部…

怎样用python批量处理文件夹_python批量处理文件或文件夹

本文实例为大家分享了python批量处理文件或文件夹的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 # -*- coding: utf-8 -*- import os,shutil import sys import numpy as np ##########批量删除不同文件夹下的同名文件夹############# def arrange_file(dir_path0…

leetcode-349-两个数组的交集

给定两个数组&#xff0c;编写一个函数来计算它们的交集。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2] 示例 2&#xff1a; 输入&#xff1a;nums1 [4,9,5], nums2 [9,4,9,8,4] 输出&#xff1a;[9,4] 说明&#xff1a; 输…

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

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

问题 B: 数塔问题

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

leetcode-345-翻转字符串中的元音字母

编写一个函数&#xff0c;以字符串作为输入&#xff0c;反转该字符串中的元音字母。 示例 1&#xff1a; 输入&#xff1a;“hello” 输出&#xff1a;“holle” 示例 2&#xff1a; 输入&#xff1a;“leetcode” 输出&#xff1a;“leotcede” 来源&#xff1a;力扣&…

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

python数据导入hive_Python操作HIve,将数据插入到Mysql

Python操作HIve&#xff0c;将数据插入到Mysql import sys from hive_service import ThriftHive from hive_service.ttypes import HiveServerException from thrift import Thrift from thrift.transport import TSocket from thrift.transport import TTransport from thrif…

问题 D: 二叉树求高度

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