先看几张图体会一下:
Spin-Wheel
落实鼠标在网页上兜圈马时记下转动圈数的小程序,每转一圈记录三回,同时倘诺顺时针方向的。
本文介绍使用C#制作显示器爱戴的艺术,那几个显示器爱抚就是效仿视窗系统自带的字幕屏保。
autohotkey官网
题目浅析与贯彻
其一小程序的难关在于怎么样晓得鼠标完毕了一个转圈的动作,而且人工使用鼠标划圈时也不会是一个正式的圆,平常都是很不公理的。那一点上本人网上找了找发现浏览器的骨折势落成了。
还要我找了一个人已毕的手势识别,是通过总计五个点形成的角度来判定,我起来也认为那种方法不错。不过自己在实际贯彻的时候想到了另一个办法。
本身的已毕情势:把一个圆分为4个等分,也就是扇区:左上,左下,右上,右下。然后通过记录鼠标经过的点与前一个点坐标来判定是在哪个扇区,只要三个扇区都经过了就象征划了一个圆。那样做的话对鼠标轨迹须求不高,只要走的可行性对就行了。
屏幕珍贵程序的扩张名固然是”scr”,但实际上是一个可举办的”exe”文件。但他又是一个相比独特的”exe”文件。下边就来探索一下,用C#是什么样编写屏幕尊崇
autohotkey官方文档
如何总结扇区
那就是说来看望哪些晓得是在哪个扇区呢?因为鼠标在刚初步时只是在某一个点上,唯有移动了一段距离后才通晓在哪。大家看一下底下的图:
那几个中我标识了10个点,大家得以窥见鼠标在经过那10个点表明就是画了一个圈,对吗。然后我们看那个点有啥规律?
澳门金沙国际 ,例如,如若大家鼠标是从P1起先运动的,然后移动到P2,再到P3,能够发现x轴是进一步大的,同时y轴也是更进一步大。也就是说大家只要将鼠标移动的轨道记录下来,然后逐个点举办分析,只要顺应地点规律的就足以知道为在【右上扇区】。
同理,我们再看P3->P6,则发现x轴是尤为小,而y轴是越发大的,表达是【右下扇区】,后边七个扇区以此类推。
的整套经过。
法定文档普通话版
下一场考虑顺时针问题
上边说了各类扇区的持筹握算办法,然则那么些只要不考虑时针方向是不创立的,下面的统计方法必须是顺时针才行。即使是逆时针则要扭转计算,所以一旦鼠标逆时针转到,那么也会臆度扇区,只不过总结的扇区就不是上下一心想要的结果啦。
在此我的缓解办法是,在总结了扇区后举办三回检查,如果发现前一个扇区不是连连的就印证时针方向错了,重新开头记录轨道。如故以下边这么些图为例子:
当P1-P3发端运动后,表明在【右上扇区】,然后判断前一个扇区是还是不是有经过,如若没有通过认证当前扇区可能是发端扇区,然后判断后一个扇区是不是有经过,假如没有通过验证确实是首扇区,是例行的轨迹。反之则阐明鼠标转反了。
其余的扇区以此类推。
一.本文中介绍的主次设计及运行环境
具体步骤
-
下载并安装autohotkey。
-
在您觉得合适的地点鼠标右键-新建-autohotkey
script(脚本);或者成立一个其余文件,再把后缀改成ahk也得以 -
一个新建的ahk文档里面会有那么些事物
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. ; #Warn ; Enable warnings to assist with detecting common errors. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
不用管那个
-
【澳门金沙国际】应用js在网页上记下鼠标划圈的小程序,回车和起步程序。在底下输入
!j:: Send, {Down} Return !l:: Send, {Right} Return !h:: Send, {Left} Return !k:: Send, {Up} Return
这几句话是把↑改成了alt+k;↓为alt+j;←为alt+h;→为alt+l。如若想用ctrl代替alt,就把
!
换成^
。其他的+
代表shift,#
代表windows键,更详尽的看这个。倘若不必要其他职能了,直接保存并关闭,跳到第
步。 -
参预修改回车的效应。键盘左边的Capslock(锁定大小写)键使用频率相对照旧不高的,而回车键的任务又有点坑,改之。直接复制那段那两行。
$CapsLock::Enter LAlt & Capslock::SetCapsLockState, % GetKeyState("CapsLock", "T") ? "Off" : "On"
诸如此类,左边的Capslock键就成了回车,未来小量的大写字母用shift+字母,即使有大气的大写字母的输入,用
alt+Capslock
,跟从前Capslock是千篇一律的。 -
autohotkey也足以用神速键启动软件,例如
!o:: Run, C:\Program Files\Everything\Everything.exe Return
现在
alt+o
就是启动everything的神速键了。同样的,借使想用ctrl代替alt,就把!
换成^
。其他的+
代表shift,#
代表windows键,更详实的看这个。倘使想启动其余的软件,就把上面的门道换成你想启动的不行软件的路径机就可以了。 -
保存,关闭
-
在编写好的文书点击鼠标右键,选拔编译脚本,也说不定是Compile
script,也说不定是Compile脚本,都是一样的。编译之后就会扭转一个.exe
的文本,把那些文件放到开机启动文件夹中(C:\ProgramData\Microsoft\Windows\Start
Menu\Programs\StartUp),每便开机就足以自动启动了。
实际上很佩服自己就那样默默忍受了不少居多年。其实那几个事物在网上小小的一搜,5分钟就能搞定。
最终发一下代码
代码我丢到github上了,
(1).微软视窗2000 服务器版
可是大家大家都在想,现在没时间,我还要做xxxx事呢,反正多点两下鼠标而已。
(2)..Net Framework SDK 正式版
是呀,点两下关节脱位快的一秒都不用,一般人那四个操功能2秒左右。
二.C#编写字幕屏幕保程序的关键步骤以及解决方法:
唯独,我依旧认为痛心。
(1).设定程序的窗体符合显示器保养的渴求:
由于屏幕爱抚程序就是一个可执行程序,所以在编写屏幕爱抚程序的时候,首先按照可执行程序来统筹。但显示器敬服有自己的特征。譬如:屏幕爱护都是满载
以上是废话,上边才是内容:
整个显示器的,并且没有无边。显示器敬服运行的时候,不可以显得职分栏。在先后设计中完结那个特点,关键就在于对窗体的一点性能的设定上。下边是对窗体属性的
把上面的内容复制到记事本里面,然后保留到桌面,文件名写00.reg
(那里肯定若是reg类型的才行,像.reg.txt
那种的是特其余)
设定,就可以满意显示器爱护的渴求,具体如下:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer]
"NoInternetOpenWith"=dword:00000001
"NoFileAssociate"=dword:00000001
this.Name = “ScreenSaver” ;
//窗体运行后无疆界
this.FormBorderStyle = FormBorderStyle.None ;
//程序运行后不突显在职责栏上
this.ShowInTaskbar = false ;
//窗体运行后,最大化,充满整个显示屏
双击桌面上的00.reg
,点确定,到升迁成功导入。
(2).使得字符在显示器上不断移动:
不世之功告成,忽然间觉得舒服了好多。
完成字符在显示器上像字符屏保一样不停运动,是经过一个定时器来形成的。不断移动的字符,其实就是一个Label组件。当设定好Label组件要显示的字符后,
加一张效果图:
也就设定了在显示器上要运动的字符。定时器每隔一段时间,都把Label组件的横坐标减去一个定值,那样在定时器的驱动下,Label组件的职位就更换了,带来的视
觉效果,就是字符不断运动。
当Label组件的义务已经移动到显示器的外侧以后,那是就有把Label组件的横坐标回复到初叶值(即:屏幕的最右面),然后判断Label组件的纵坐标是还是不是位于屏
幕的顶部,假诺在顶部,则把纵坐标的职务重置在中段;若是在中间,则重置在尾部;如若在底层,则重置在顶部。经过了这个判断,字符不仅可以达成从右往左
举手投足,仍能转移字符进入屏幕的任务。从而也添加了显示器保护的内容。其实要兑现那些判断,首先还非得知道显示器的行事区域,因为唯有先明了显示屏的办事区域
,在可以落到实处对Label组件的横坐标和纵坐标的设定工作。下边就是完结此步骤地现实代码:
//得到总计机屏幕的干活区域
Rectangle ssWorkArea = Screen.GetWorkingArea ( this ) ;
lblMarquee.Location = new Point ( ssWorkArea.Width – iDistance ,
lblMarquee.Location.Y ) ;
//突显标签
lblMarquee.Visible = true ;
// 增添2个象素点,你可以由此改动speed的值来改变标签的运动速度
iDistance += speed ;
// 若是标签已经走出屏幕,则把标签的职分重一贯到显示屏的左边
if ( lblMarquee.Location.X <= -( lblMarquee.Width ) )
{
//Reset the distance to 0.
iDistance = 0 ;
//判断标签的岗位是或不是在顶部,即便在,则重平昔到中间
if ( lblMarquee.Location.Y == 0)
lblMarquee.Location = new Point ( lblMarquee.Location.X , (
ssWorkArea.Height / 2 ) ) ;
//判断标签的岗位是否在中段,要是在,则重一贯到尾部
else if ( lblMarquee.Location.Y == ssWorkArea.Height / 2 )
lblMarquee.Location = new Point ( lblMarquee.Location.X ,
ssWorkArea.Height – lblMarquee.Height ) ;
//重平昔到顶部
else
lblMarquee.Location = new Point ( lblMarquee.Location.X , 0 ) ;
}
(3).检测键盘、鼠标状态,确定退出屏幕爱戴程序:
在屏幕尊崇运行的时候,当键盘被按动,或者鼠标移动,显示器珍贵都会关闭。在实际的次第设计中,检测键盘是或不是被按动,通过”KeyDown”事件就足以看清。在
先后中,判断鼠标是不是移动的思路是透过二个全局变量记录下,程序刚刚运行的时候的鼠标的任务(即:X和Y),当鼠标移动的时候,判断移动后的地方和笔录的
职位是还是不是有出入,假诺有出入,就倒闭屏保。上面代码成效就是检测鼠标移动,并终止显示器爱惜,具体如下:
// 把鼠标刚刚初始移动的职责给记录下来
if ( ixStart == 0 && iyStart == 0 )
{
ixStart = e.X ;
iyStart = e.Y ;
return ;
}
//判断自屏幕爱惜程序运行后,鼠标的岗位是否改变
else if ( e.X != ixStart || e.Y != iyStart )
{
Cursor .Show ( ) ;
timerSaver.Enabled = false ;
Application .Exit ( ) ;
};
其中”ixStar”和”iyStart”就是记录程序运行的时候,鼠标的苗子地点。
(4).对Windows对显示器尊敬设定参数的响应:
当显示屏爱护投入到Windows系统后,你就足以透过Windows系统来设定屏幕珍爱的性能了,由于大家创造的那么些屏幕体贴,没有可供设置的选项,但也要对
Windows的”设置”按钮举行响应。而要完成那种响应,所用的学问就是在Windows系统中按动”设置”按钮,对屏幕爱慕举办设定时,其实也就对屏保程序传递”/c”字
符。而要设定口令,则会传送”/a”字符,据此,可以取得代码:
if (args [ 0 ].Substring ( 0 , 2 ).Equals ( “/c” ) )
{
MessageBox.Show(“此显示屏尊敬并未可供设置的选项!”,”用C#创制显示屏尊崇” ,
MessageBoxButtons.OK ,MessageBoxIcon.Information ) ;
Application.Exit ( ) ;
}
else if ( args [ 0 ] == “/a” )
{
MessageBox.Show(“此显示器保护没有可供设定口令的选项!”,”用C#制造屏幕珍惜”
,
MessageBoxButtons.OK ,MessageBoxIcon.Information ) ;
Application.Exit ( ) ;
}
三.总结:
由于显示屏珍爱都是Windows程序,所以编译的时候,要暴发Windows程序,编译的一声令下如下:
csc /t:winexe screen.cs
在科学编译”Screen.cs”后,可以博得”Screen.exe”文件,把”Screen.exe”改名为”Screen.scr”,并拷贝到Windows的”System32″目录中去。至此这么些字符屏保
就已毕了从编写到计划的任何办事了。