其实这个程序很简单,我只是想在屏幕的正中央弄一个很小的点,作为玩CF那个准星,因为CF的狙击在不开镜的情况下是没有准星的(额……这个不算是挂吧^_^)。

刚开始的时候,我的思路是弄一个图片,就是一个点的图片,很小,放在正中央,然后把他始终放保持最前端就OK了。

我在窗体属性里把窗体位置改为屏幕居中,大小设为(5,5),运行,结果窗体的大小很大,具体不知道,好像最小值有限制,然后我就纠结了……于是我想到在里面放一个picture控件,然后把主窗体给弄透明了,然后再搞个鼠标穿透……步骤很简单,主要是把窗体弄透明,于是乎在网上找到了这么一句代码:

this.TransparencyKey = this.BackColor;//放在load事件里。

神奇的事情发生了,不仅窗体背景透明,而且直接就实现了鼠标穿透(picture控件没有穿透),太好了。然后就是保持最前的代码,很轻松的从网上找到了一句:

this.TopMost = true;//也放到load事件里。

一切是那么美好,我觉得这个小小的程序就完工了。

先打开cross,再打开CF开始测试,刚开始登录正常,选择大区正常,可是到了进入游戏就完蛋了……CF会将电脑分辨率自动改为800×600,蛋疼了,本来看着在屏幕中央的点瞬间转移到了右下角…………程序在运行以后不会自动检测分辨率的改变和自动改变点的位置…………然后疯狂的想方法……先用最笨的两个(非技术):

(1)在CF运行前将电脑分辨率手动改为800×600,然后运行cross,点在中间,然后CF打开,进入游戏……完美…………

(2)在CF后,把CF切出来(用alt+tab),然后运行cross,这样就可以不用手动该分辨率了……但是诞生了一个问题,这时的cross不再最前端了,被CF给盖住了。

相当纠结,CF好像在切出去,再切回来的时候会自动保持最前,这样cross就不起作用了,不过嘛,淡定。来个定时器,十秒钟设置一次最前端(心里窃喜)。OK,拖个timer控件,然后在Load事件里:

this.timer1.Interval = 10000;//设置间隔时间
        this.timer1.Start();//开始定时器

然后就双击timer控件,添加,this.TopMost = true;-----------完美解决!

但是吧……这两种解决方法对于我们技术人员来说太白痴了……要做就做个高档的,自动根据系统分辨率改变点的位置(^_^)

思路就是:利用刚刚的定时器,十秒检测一下系统分辨率,然后重启程序就OK,于是乎……百度中……………………………………

郁闷的是,分辨率的获取没有直接的方法,不过有直接的方法是获取系统桌面的大小,也OK,只要能检测到桌面的大小改变就行,首先定义一个变量:

private Rectangle rect = new Rectangle();

然后在Load里记录下运行时的大小:

rect = Screen.GetWorkingArea(this);//获取当前屏幕的大小储存到rect里。

 if(rect!=Screen.GetWorkingArea(this))//将当前屏幕大小与rect里比较,如果不相等,执行下面代码
            {
                Application.Restart();//程序重启
                rect = Screen.GetWorkingArea(this);//将新的屏幕大小放到rect里
          }

打开cross,打开CF,真是太完美了,程序保持最前端。选择服务器选择频道,选择房间,拎着狙击开始火拼(心里那叫一个美!!!),一开镜,我笑了……点的位置竟然比狙击的准星查了N多,在狙击准星的上方……这究竟是为什么捏…………心里那叫一个乱啊……突然,想到了刚刚找获取系统分辨率方法的时候注意到,貌似,系统默认屏幕大小是不算任务栏的,就是程序的中央其实就是出去任务栏剩下大小的中央,而CF是全屏,无所谓任务栏……我里个去………………蛋疼无比啊…………

这个程序做了那么久,实在是…………于是乎就想到了偷懒…………手动更改picture控件的位置,然后到达使他在中央的目的……于是乎,不断的进出CF,不断的调节picture控件的位置,真是的蛋疼无比……最后终于成功了!!!!但是出现了一个前所未有的问题,当我把那个点放到屏幕中间后,进入CF游戏,一个鼠标在那个点上停留……只要点击鼠标的任意一个键,系统就将焦点给cross,CF就切出来了……晕死………………原来CF一直是吧鼠标放在屏幕中央,然后隐藏图标……太阴险了!!!!!我无奈的想起了鼠标穿透,我之前一直不想用鼠标穿透是因为他要调用Windows API,不是用.net库。我不是很理解,所以就不想用,不过现在,只能复制粘贴了……唉……

  private const uint WS_EX_LAYERED = 0x80000;
        private const int WS_EX_TRANSPARENT = 0x20;
        private const int GWL_STYLE = (-16);
        private const int GWL_EXSTYLE = (-20);
        private const int LWA_ALPHA = 0x2;
        [DllImport("user32", EntryPoint = "SetWindowLong")]
        private static extern uint SetWindowLong(
        IntPtr hwnd,
        int nIndex,
        uint dwNewLong
        );
        [DllImport("user32", EntryPoint = "GetWindowLong")]
        private static extern uint GetWindowLong(
        IntPtr hwnd,
        int nIndex
        );

[DllImport("user32", EntryPoint = "SetLayeredWindowAttributes")]
        private static extern int SetLayeredWindowAttributes(
        IntPtr hwnd,
        int crKey,
        int bAlpha,
        int dwFlags
        );
        
        /// <summary>
        /// 使窗口有鼠标穿透功能
        /// </summary>
        public void CanPenetrate()
        {
            uint intExTemp = GetWindowLong(this.Handle, GWL_EXSTYLE);
            uint oldGWLEx = SetWindowLong(this.Handle, GWL_EXSTYLE, WS_EX_TRANSPARENT | WS_EX_LAYERED);
            SetLayeredWindowAttributes(this.Handle, 0, 200, LWA_ALPHA);
        }

然后在Load里调用CanPenetrate();

接下来的出现的一幕让我很是无奈,窗体和控件都实现了鼠标穿透,可是………………窗体的透明消失了…………尴尬………………点点后面一大块白色的背景!!!

我把this.TransparencyKey = this.BackColor;放在CanPenetrate()后,结果穿透效果消失,我把穿透代码放前面,而透明效果消失……纠结…………想了下,也许两个代码都是用来设置窗体显示效果的,不能重叠,只能显示一个……!@#¥%……&唉……让我情何以堪啊……做了这么久…………

不行,不能放弃,于是乎就想解决刚刚的问题,就是窗体大小的最小值问题,哈哈,功夫不负有心人,被我找到了,只需要在Load里加:

Size newSize = new Size(5, 5);
            this.MaximumSize = this.MinimumSize = newSize;
      this.Size = newSize;

成功!删除picture控件,将窗体背景颜色改成自己喜欢的颜色,然后就可以把窗体透明的代码去掉了…………

打开cross,打开CF,选择服务器,频道,进入游戏,抱着狙击,开镜!顿时间内牛满面………………我一晚上的努力终于没有白费……!!!!!

额……最后想了下………这个软件够白痴的,几乎用不到,除非是玩瞬……但是呢……俺学到了不少知识呢,太高兴了,胡哈哈哈哈哈!!!!

C#_CF玩瞬时给你一个点--cross相关推荐

  1. 原生Android平板,Remix OS 深入动手玩,这是一个改变 Android 平板使用体验的好系统...

    原标题:Remix OS 深入动手玩,这是一个改变 Android 平板使用体验的好系统 大家都知道,现在市场上出货的很多 Android 平板电脑,里面所搭载的系统很多都是原生的,即使有经过优化幅度 ...

  2. 闲鱼把各种玩法做成了一个平台:哆啦A梦

    简介:哆啦A梦的口袋里,都有哪些好玩的? 作者:闲鱼技术-齐悟 玩法平台背景 在闲鱼内我们把供给用户的闲鱼红包.支付宝红包.包邮券.宝卡等统称为用户权益.是闲鱼用户运营的重要策略,在拉新.留存.促活. ...

  3. 2个td合成一个td_18个月16个爆款,合成类玩法的下一个机会在哪?

    18个月16个爆款! 近日,编者体验了近18个月爆款小程序榜单之中的游戏,体验之后编者发现,在这200多款游戏中,有16款都应用了合成类玩法,而且部分游戏是数次登榜,比如枪火工厂.全民养鲲.世界争霸等 ...

  4. 微信小程序:一起玩连线,一个算法来搞定

    微信小程序:一起玩连线 游戏玩法 将相同颜色的结点连接在一起,连线之间不能交叉. 算法思想 转换为多个源点到达对应终点的路径问题,且路径之间不相交.按照dfs方式寻找两个结点路径,一条路径探索完之后, ...

  5. 玩转f#的一个实例——解拼图游戏

    起因 起因是这样的:前一阵逛抖音,买了个预售的拼图游戏.据说是国内团队开发的,非常有趣.大概长这样: 拼图设计上故意空出三个空位,拼图的格子上印有1-12月的月份,1-31号的日期,以及周一到周日的星 ...

  6. 玩怪物猎人P3发现一个BUG可以金钱无数(非老金)

    最近,过了而立之年的我,却迷上了PSP游戏<怪物猎人P3>,那杀怪时的紧张与刺激,像是回到了上大学时玩<英雄无敌>.<帝国时代I>和<星际争霸>那种感觉 ...

  7. 玩NBA2K14多出一个盘符,里头和游戏所在盘符内容相同

    最近玩NBA2K14这款游戏发现了一个问题,就是退出游戏后发现我的电脑(计算机)里头多出一个H盘.我的电脑本来只有C盘.D盘.E盘.F盘.G盘.这多出来的盘符里头的内容竟然和原游戏所在的F盘内容相同. ...

  8. 6种不露脸的自媒体账号玩法,每一个变现都很强

    今天来给你们分享一下:不想露脸怎么做视频? 这也是很多自媒体新手的想法,不想自己露脸拍摄,那要怎么做呢?耐心看完这期内容,记得点赞收藏起来. 不露脸可以分为: (1)人物出镜:除了脸部,其它身体部位出 ...

  9. 以前的写的一次关于对迅雷玩客云的一个分享PPT

    当时太年轻了.哈哈哈哈. 今天突然看CDN,想起来了. 文档:玩客云.note 链接:http://note.youdao.com/noteshare?id=c0f223dc6e6a817da2f3c ...

最新文章

  1. B - Modular Inverse
  2. c#实现多线程代码例子
  3. json从立地到成佛
  4. 【Fanvas技术解密】HTML5 canvas实现脏区重绘
  5. leetcode214. 最短回文串(kmp)
  6. opencv支持python3吗_Python3.4+opencv3
  7. CentOS经常使用文件操作命令[百度博客搬家]
  8. 自然语言处理实践Task3
  9. 模板 - 数论 - (新)
  10. 值得所有设计师拥有的国内外“设计导航网站”
  11. laravel--模型中各种属性详解
  12. codeblocks13.12汉化
  13. 新手如何学习FPGA技术
  14. 汇编 DOS系统功能调用
  15. 信号处理基本概念:单位脉冲响应和单位阶跃响应
  16. C++最小/最大(min;max;minmax;min_element;max_element;minmax_element)
  17. java打卡返现项目,激励打卡APP你能够返现多少,其中的猫腻你有了解多少
  18. 万向和肖风的区块链版图
  19. I'm up to my ears
  20. 微信api调用限制:45009 reach max api daily quota limit

热门文章

  1. 为什么那么多会声会影的注册机都有毒?
  2. 梵语和藏语_【语言学】梵语与藏语的比较小论
  3. 全套GMS地下水数值模拟
  4. java jchardet_使用 jchardet 获得文件编码 -javacode
  5. 分享会笔记_关于安慰
  6. 【C++探索之旅】第一部分第六课:控制流程,随心所至
  7. 如何在Windows下搭建Qt安卓开发环境?
  8. 服务器宕机的快速解决方法
  9. 服务器tomcat版本修改密码,tomcat 9.0配置管理员用户名和密码
  10. 智能优化算法结果每次不一样的解决方法