先看几张图体会一下:

Spin-Wheel

落实鼠标在网页上兜圈马时记下转动圈数的小程序,每转一圈记录三回,同时倘诺顺时针方向的。

本文介绍使用C#制作显示器爱戴的艺术,那几个显示器爱抚就是效仿视窗系统自带的字幕屏保。

autohotkey官网

澳门金沙国际 1

题目浅析与贯彻

其一小程序的难关在于怎么样晓得鼠标完毕了一个转圈的动作,而且人工使用鼠标划圈时也不会是一个正式的圆,平常都是很不公理的。那一点上本人网上找了找发现浏览器的骨折势落成了。

还要我找了一个人已毕的手势识别,是通过总计五个点形成的角度来判定,我起来也认为那种方法不错。不过自己在实际贯彻的时候想到了另一个办法。

本身的已毕情势:把一个圆分为4个等分,也就是扇区:左上,左下,右上,右下。然后通过记录鼠标经过的点与前一个点坐标来判定是在哪个扇区,只要三个扇区都经过了就象征划了一个圆。那样做的话对鼠标轨迹须求不高,只要走的可行性对就行了。

澳门金沙国际 2

  屏幕珍贵程序的扩张名固然是”scr”,但实际上是一个可举办的”exe”文件。但他又是一个相比独特的”exe”文件。下边就来探索一下,用C#是什么样编写屏幕尊崇

autohotkey官方文档

澳门金沙国际 3

如何总结扇区

那就是说来看望哪些晓得是在哪个扇区呢?因为鼠标在刚初步时只是在某一个点上,唯有移动了一段距离后才通晓在哪。大家看一下底下的图:
澳门金沙国际 4

那几个中我标识了10个点,大家得以窥见鼠标在经过那10个点表明就是画了一个圈,对吗。然后我们看那个点有啥规律?

澳门金沙国际 ,例如,如若大家鼠标是从P1起先运动的,然后移动到P2,再到P3,能够发现x轴是进一步大的,同时y轴也是更进一步大。也就是说大家只要将鼠标移动的轨道记录下来,然后逐个点举办分析,只要顺应地点规律的就足以知道为在【右上扇区】。

同理,我们再看P3->P6,则发现x轴是尤为小,而y轴是越发大的,表达是【右下扇区】,后边七个扇区以此类推。

的整套经过。

法定文档普通话版

澳门金沙国际 5

下一场考虑顺时针问题

上边说了各类扇区的持筹握算办法,然则那么些只要不考虑时针方向是不创立的,下面的统计方法必须是顺时针才行。即使是逆时针则要扭转计算,所以一旦鼠标逆时针转到,那么也会臆度扇区,只不过总结的扇区就不是上下一心想要的结果啦。

在此我的缓解办法是,在总结了扇区后举办三回检查,如果发现前一个扇区不是连连的就印证时针方向错了,重新开头记录轨道。如故以下边这么些图为例子:

当P1-P3发端运动后,表明在【右上扇区】,然后判断前一个扇区是还是不是有经过,如若没有通过认证当前扇区可能是发端扇区,然后判断后一个扇区是不是有经过,假如没有通过验证确实是首扇区,是例行的轨迹。反之则阐明鼠标转反了。

其余的扇区以此类推。

  一.本文中介绍的主次设计及运行环境

具体步骤

  1. 下载并安装autohotkey。

  2. 在您觉得合适的地点鼠标右键-新建-autohotkey
    script(脚本);或者成立一个其余文件,再把后缀改成ahk也得以

  3. 一个新建的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.
    

    不用管那个

  4. 【澳门金沙国际】应用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键,更详尽的看这个。倘若不必要其他职能了,直接保存并关闭,跳到第
    步。

  5. 参预修改回车的效应。键盘左边的Capslock(锁定大小写)键使用频率相对照旧不高的,而回车键的任务又有点坑,改之。直接复制那段那两行。

    $CapsLock::Enter
    
    LAlt & Capslock::SetCapsLockState, % GetKeyState("CapsLock", "T") ? "Off" : "On"
    

    诸如此类,左边的Capslock键就成了回车,未来小量的大写字母用shift+字母,即使有大气的大写字母的输入,用alt+Capslock
    ,跟从前Capslock是千篇一律的。

  6. autohotkey也足以用神速键启动软件,例如

    !o::
       Run, C:\Program Files\Everything\Everything.exe
    Return
    

    现在alt+o就是启动everything的神速键了。同样的,借使想用ctrl代替alt,就把!
    换成^ 。其他的+ 代表shift,#
    代表windows键,更详实的看这个。倘使想启动其余的软件,就把上面的门道换成你想启动的不行软件的路径机就可以了。

  7. 保存,关闭

  8. 在编写好的文书点击鼠标右键,选拔编译脚本,也说不定是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组件的职位就更换了,带来的视

澳门金沙国际 6

觉效果,就是字符不断运动。

  当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″目录中去。至此这么些字符屏保

就已毕了从编写到计划的任何办事了。

相关文章