懒人工具:低配高效的桌面小球工具

2023-10-27 22:20

本文主要是介绍懒人工具:低配高效的桌面小球工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

很经常操作电脑,点点点的好麻烦,有时候命令行可以做的更好,但是总不能一言不合打开命令行敲代码吧?

保存为bat,vbs之类的脚本工具是可以有,但是太占用面积了,找起来也麻烦;

是不是觉得有些杀dou毒bi软件的加速球萌萌的?

今天来做个桌面小球工具,可以添加很多命令行快捷方式,但是并不占用你的桌面图标,使用也相对方便;

/***************** 分割线  ***********************/

1:预期效果图:


2:开始:

2.1使用VS新建一个标准的窗体工程;这个不赘述;

2.2修改主窗体的属性:

窗体FormBoradStyle为无.去掉窗体的边框,因为不需要,多出边框的话计算坐标也麻烦;

设置窗口TopMost=True始终在前,ShowInTaskbar不显示任务栏;

添加NotifyIcon通知栏控件,用于隐藏小球后恢复显示,可见属性Visible=false,图标自选;

添加一个ProgressBar控件,用来显示加速球的半缸子水状态,初始值可以指定为40%方便查看,后期可以加入实时计算机内存使用率;

控件的大小,布局并不重要,因为要用代码来重新设置尺寸和布局;


2.3添加窗体的Paint事件,绘制窗体只显示一个圆形:

        /// <summary>/// 小圆点直径/// </summary>private const int ZhiJing = 50;
        private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e){this.Width = ZhiJing;this.Height = ZhiJing;progressBar1.Location = new Point(0, 0);progressBar1.Width = ZhiJing;progressBar1.Height = ZhiJing;GraphicsPath myPath = new GraphicsPath();myPath.AddPie(0, 0, ZhiJing, ZhiJing, 0, 360);this.Region = new Region(myPath);}

以上代码完成最简单的小球的显示.小球从左到右显示为半绿半灰的图形;


水平方向的进度条不好看,将它改为竖直方向的进度条.没有旋转控件的方法,所以要重写ProgressBar控件的一个方法;

选择进度条status,跳转到定义,修改ProcessBar为VerticalProgressBar,这时候会提示你,没有这个类.按提示"在新文件添加类VerticalProgressBar",新建类,添加以下代码:

    internal class VerticalProgressBar : ProgressBar{protected override CreateParams CreateParams{get{CreateParams cp = base.CreateParams;cp.Style |= 0x04;return cp;}}}

最后,在Form*.Designer.cs修改进度条的定义和初始化两个地方都是VerticalProgressBar.进度条就是竖直方向的了;


2.4添加窗体拖动效果:

小球的外观已经完成,那么继续实现拖动;

手写或者用界面设计器给窗体和进度条(其实只要窗体最上方的,用户可见的进度条就可以)添加三个鼠标事件:

        /// <summary>/// 小圆点拖动效果参数/// </summary>bool isMouseDown = false;Point mouseOffset;
        private void Form1_MouseDown(object sender, MouseEventArgs e){int xOffset;int yOffset;if (e.Button == MouseButtons.Left){this.Cursor = Cursors.Hand;xOffset = -e.X;yOffset = -e.Y;mouseOffset = new Point(xOffset, yOffset);isMouseDown = true;}}private void Form1_MouseMove(object sender, MouseEventArgs e){if (isMouseDown){//获取鼠标的位置Point mousePos = Control.MousePosition;mousePos.Offset(mouseOffset.X, mouseOffset.Y);Location = mousePos;}}private void Form1_MouseUp(object sender, MouseEventArgs e){isMouseDown = false;this.Cursor = Cursors.Default;}


这三个事件实现了鼠标拖动窗体的效果;

2.5添加窗体贴边隐藏效果:

给鼠标放开事件添加代码:

        private void Form1_MouseUp(object sender, MouseEventArgs e){isMouseDown = false;this.Cursor = Cursors.Default;//贴边隐藏判断int x0 = this.Location.X;int y0 = this.Location.Y;int x1 = x0 + this.Width;int y1 = y0 + this.Height;bool xOver = (x0 < 0) || (x1 > Screen.GetWorkingArea(this.Location).Width);bool yOver = (y0 < 0) || (y1 > Screen.GetWorkingArea(this.Location).Height);if (xOver || yOver){this.Visible = false;notifyIcon1.Visible = true;}}
含义是松开鼠标后,若窗体的如果超出工作区(有效的桌面范围).则隐藏窗体,此处还可以给notifyIcon1设置标题,气泡等效果;
而隐藏小球后,怎么显示小球呢?

给NotifyIcon控件设置单击事件:

        private void notifyIcon1_MouseClick(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){this.Visible = true;notifyIcon1.Visible = false;int newX = 1000;int newY = 200;this.Location = new Point(newX, newY);this.Activate();}}

左键单击小图标,显示窗体,隐藏小图标;


2.6:添加右键菜单效果:

现在一个小球的外观已经完成,但是内容还未添加.

在设计页面,给窗体添加一个ContextMenuStrip控件,

窗体的ContextMenuStrip属性设置为这个控件,然后编辑这个控件分别赋给单击事件即可.

若果要小图标也有右键菜单,也给它的ContextMenuStrip属性赋菜单对象;

3:实现命令行执行代码:

很多命令需要执行命令行,所以按需要完成一些命令行的方法;

3.1实现一个固定命令的,不返回内容的命令行:

        private void ExecuteNoReply(string cmd){try{using (Process p = new Process()){p.StartInfo.FileName = "cmd.exe";p.StartInfo.UseShellExecute = false;    //是否使用操作系统shell启动p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息p.StartInfo.RedirectStandardError = true;//重定向标准错误输出p.StartInfo.CreateNoWindow = true;//不显示程序窗口p.Start();//启动程序p.StandardInput.WriteLine(cmd);p.StandardInput.AutoFlush = true;p.StandardInput.WriteLine("exit");p.WaitForExit();}}catch (Exception ex){string err = string.Format("执行命令:[{0}]发生异常,信息:[{1}]", cmd, ex.Message);MessageBox.Show(err, "错误信息");}}

3.2实现一个固定命令的,返回文本命令结果的命令行:

//参考我的另一个文章:winform和命令行交互

3.3实现一个手动输入命令的,返回命令结果的命令行:

//参考我的另一个文章:winform和命令行交互

4:使用命令行完成功能:

举出一些常用的功能的命令行用法:

打开设备管理器:

ExecuteNoReply("start devmgmt.msc");


打开桌面文件夹:

string dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
ExecuteNoReply("start explorer.exe /e," + dir);

打开网络适配器:

ExecuteNoReply("explorer.exe ::{7007ACC7-3202-11D1-AAD2-00805FC1270E}");

打开记事本:

ExecuteNoReply("start notepad.exe");

5:添加实时CPU和内存使用率显示:

添加一个线程,并在显示页面时候启动,关闭页面时关闭;

        private void FormMain_Load(object sender, EventArgs e){PerformanceCounter pcCpuLoad = new PerformanceCounter("Processor", "% Processor Time", "_Total");newThread = new Thread(ThreadForCpuView);newThread.Start(pcCpuLoad);}
        Thread newThread;delegate void SetLabelTextDele(float cpu,float neicun);private void ThreadForCpuView(object pfc){PerformanceCounter pcCpuLoad = (PerformanceCounter)(pfc);SetLabelTextDele setTextDele = new SetLabelTextDele(SetLabelText);while (true){Thread.Sleep(1000);float cpuLoad = pcCpuLoad.NextValue();MEMORY_INFO MemInfo;MemInfo = new MEMORY_INFO();GlobalMemoryStatus(ref MemInfo);float neicunLoad = MemInfo.dwMemoryLoad;this.Invoke(setTextDele, new object[] { cpuLoad, neicunLoad });//}}private void SetLabelText(float cpu,float neicun){//cpustatus.Value = (int)cpu;//CPU使用率进度条,0-100neicunstatus.Value = (int)neicun;//内存使用率进度条,0-100}[DllImport("kernel32")]public static extern void GetSystemDirectory(StringBuilder SysDir, int count);[DllImport("kernel32")]public static extern void GetSystemInfo(ref CPU_INFO cpuinfo);[DllImport("kernel32")]public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo);[DllImport("kernel32")]public static extern void GetSystemTime(ref SYSTEMTIME_INFO stinfo);//定义CPU的信息结构    [StructLayout(LayoutKind.Sequential)]public struct CPU_INFO{public uint dwOemId;public uint dwPageSize;public uint lpMinimumApplicationAddress;public uint lpMaximumApplicationAddress;public uint dwActiveProcessorMask;public uint dwNumberOfProcessors;public uint dwProcessorType;public uint dwAllocationGranularity;public uint dwProcessorLevel;public uint dwProcessorRevision;}//定义内存的信息结构    [StructLayout(LayoutKind.Sequential)]public struct MEMORY_INFO{public uint dwLength;public uint dwMemoryLoad;public uint dwTotalPhys;public uint dwAvailPhys;public uint dwTotalPageFile;public uint dwAvailPageFile;public uint dwTotalVirtual;public uint dwAvailVirtual;}//定义系统时间的信息结构    [StructLayout(LayoutKind.Sequential)]public struct SYSTEMTIME_INFO{public ushort wYear;public ushort wMonth;public ushort wDayOfWeek;public ushort wDay;public ushort wHour;public ushort wMinute;public ushort wSecond;public ushort wMilliseconds;}
        private void FormMain_FormClosing(object sender, FormClosingEventArgs e){if (newThread != null){newThread.Abort();newThread = null;}}
CPU和内存使用率可以交替显示,也可以只显示一种,也可以再加一个竖直进度条显示;
6扩展菜单选项:

每次编程实现代码是不必要的,很多功能能输入不同,但是对输入的处理是一致的,我们可以用XML文件来实现命令扩展,一次编译后,只需修改xml即可扩展菜单上的功能;

新建XML文件:

<?xml version="1.0"?>
<AppConfig><command name="任务管理器" value="start taskmgr.exe" /><command name="百度搜索" value="start www.baidu.com" />
</AppConfig>
对于Commamd节点,有两个属性name和value,前一个作为菜单文字,后一个作为单击事件的执行输入;

在页面加载时,执行读xml文件函数,往菜单栏中添加菜单项:

        private void ReadList(string dir){if(false == File.Exists(dir)){return;}try{XmlDocument xmlDoc = new XmlDocument();xmlDoc.Load(dir);  //加载你的XML文件XmlNode xmlno = xmlDoc.GetElementsByTagName("AppConfig")[0];//找到AppConfig元素//逐个读出foreach (XmlNode xmlvalno in xmlno.ChildNodes){string value="",name="";try{value = xmlvalno.Attributes["value"].Value;name = xmlvalno.Attributes["name"].Value;}catch{//某个节点出错,读下一个节点continue;}//name和value属性都存在,添加到上下文菜单栏this.XmlCmdList.DropDownItems.Add(name, null, (o, e1) =>{ExecuteNoReply(value);});//}}catch{MessageBox.Show("从XML文件取命令出错");}}





/***********************  结尾 ********************/

因为没有常规窗体的关闭按钮,所以建议在右键菜单加入关闭程序的

Application.Exit()代码;

有一个注意的地方是,程序退出是,如果小图标还在,是不会自动消失的.




这篇关于懒人工具:低配高效的桌面小球工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/u014291153/article/details/78999927
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/288795

相关文章

SQLite3命令行工具最佳实践指南

《SQLite3命令行工具最佳实践指南》SQLite3是轻量级嵌入式数据库,无需服务器支持,具备ACID事务与跨平台特性,适用于小型项目和学习,sqlite3.exe作为命令行工具,支持SQL执行、数... 目录1. SQLite3简介和特点2. sqlite3.exe使用概述2.1 sqlite3.exe

C++高效内存池实现减少动态分配开销的解决方案

《C++高效内存池实现减少动态分配开销的解决方案》C++动态内存分配存在系统调用开销、碎片化和锁竞争等性能问题,内存池通过预分配、分块管理和缓存复用解决这些问题,下面就来了解一下... 目录一、C++内存分配的性能挑战二、内存池技术的核心原理三、主流内存池实现:TCMalloc与Jemalloc1. TCM

基于Python实现一个Windows Tree命令工具

《基于Python实现一个WindowsTree命令工具》今天想要在Windows平台的CMD命令终端窗口中使用像Linux下的tree命令,打印一下目录结构层级树,然而还真有tree命令,但是发现... 目录引言实现代码使用说明可用选项示例用法功能特点添加到环境变量方法一:创建批处理文件并添加到PATH1

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python构建一个高效词汇表

《基于Python构建一个高效词汇表》在自然语言处理(NLP)领域,构建高效的词汇表是文本预处理的关键步骤,本文将解析一个使用Python实现的n-gram词频统计工具,感兴趣的可以了解下... 目录一、项目背景与目标1.1 技术需求1.2 核心技术栈二、核心代码解析2.1 数据处理函数2.2 数据处理流程

CnPlugin是PL/SQL Developer工具插件使用教程

《CnPlugin是PL/SQLDeveloper工具插件使用教程》:本文主要介绍CnPlugin是PL/SQLDeveloper工具插件使用教程,具有很好的参考价值,希望对大家有所帮助,如有错... 目录PL/SQL Developer工具插件使用安装拷贝文件配置总结PL/SQL Developer工具插

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与

Python使用Tkinter打造一个完整的桌面应用

《Python使用Tkinter打造一个完整的桌面应用》在Python生态中,Tkinter就像一把瑞士军刀,它没有花哨的特效,却能快速搭建出实用的图形界面,作为Python自带的标准库,无需安装即可... 目录一、界面搭建:像搭积木一样组合控件二、菜单系统:给应用装上“控制中枢”三、事件驱动:让界面“活”