百度空间 | 百度首页 
 
查看文章
 
XNA技术(C#) 打造黑客帝国屏保(中)
2009年05月16日 星期六 22:14

XNA技术(C#) 打造黑客帝国屏保(中)
www.chengchen.net

      在上一节中,我们使用OllyDBG分析了屏幕保护程序的原理,其实就是一个EXE文件根据不同的参数来执行预览或者配置之类的。
      在介绍XNA技术之前,我们先来使用WPF技术制造一个简单的屏保练手。第一是因为WPF和XNA一样也是基于DirectX技术,第二是因为从最简单的屏保做起,不容易被打击信心。然后由浅入深,打造动画屏保。
      请在VS2008 + SP1 编程环境下执行本程序DEMO。
首先在项目工程中新建一个WPF程序。

然后在设计器中打开Windows1.xaml并在属性窗口中修改如下设置

WindowStyle None 去掉窗体边框    
Background Black 屏保的背景一般为黑色(当然目前貌似最流行的就是很多彩色泡泡那种屏保,其实WPF非常方便设置不同控件的透明度,实现这种屏保对WPF来说易如反掌)    
Cursor None 屏保没有鼠标显示    
Topmost 打勾 肯定是在屏幕最上方    
WindowState Maximized 全屏显示

      在屏保中一旦移动鼠标或者按下键盘,屏保程序就会退出。那么我们在MouseMove和KeyDown事件中处理:
private void Window_KeyDown(object sender, KeyEventArgs e)
{
    this.Close();
}

      值得注意的是,首次运行程序时会自动触发一次MouseMove事件,因此我们要忽略这一次事件。加个标志判断:
private bool m_BFirstRun = true;
private void Window_MouseMove(object sender, MouseEventArgs e)
{
    if (!m_BFirstRun)
    {
         this.Close();
    }
    m_BFirstRun = false;
}

      然后我们增加一个设置窗体,在项目中新加一个叫做Settingdialog.xaml的窗体。

      我们的目的就是随便配置一个字符串到屏保上显示。这里太简单就不说了,大家可以直接下载源代码查看。

      最后我们来设置参数,这里要小心,WPF的参数设置和传统的项目不太一样,大家是不是找不到Main()函数呢? 呵呵,其实DONET偷偷的进行了一次封装,有兴趣的可以使用Reflect分析,我直接告诉大家怎么做就行了。
打开App.xaml.cs文件,在这个文件中重写Onstartup方法,根据StartupEventArgs就可以获得启动参数。
        Window1 win = new Window1();
        Settingdialog dialog = new Settingdialog();
        protected override void OnStartup(StartupEventArgs e)
        {
            if (e.Args.Length > 0)
            {
                string param = e.Args[0].ToLower();
                if (param == "/s" || param =="s")
                {
                    win.Show();
                }
                else if (param == "/p" || param == "p")
                {
                    Application.Current.Shutdown();
                }
                else if (param.IndexOf("/c") == 0 || param == "c")
                {
                    dialog.Show();
                }
                else
                {
                    Application.Current.Shutdown();
                }
            }
            else
            {
                dialog.Show();
            }
        }
别得意的太早,一旦运行这个程序,你会发现程序会出现两个窗体。我们还得将App.xaml中的StartupUrl=”Window1.xaml” 去掉。

      这样才算大功告成了。如果想要这个自定义的文字动起来,当然可以加一个计时器什么的,或者使用XAML脚本动画都是可以轻松实现的。(类似于Flash,别那么老土,现在早进入WPF的时代了。据内部消息称VS2010自身的窗体设计器将使用WPF构架。)但是这些都不是本文的重点,别忘了动画方面更为强大的XNA技术。
      XNA是基于DirectX的3D游戏开发环境,是Microsoft的下一代游戏开发平台,致力于帮助开发者更快的开发游戏,可以跨 Xbox 360 、PC和Zone平台。
      最最重要的是XNA是基于DONET的,也就是说我们可以使用熟悉的C#开发强大的DirectX游戏了。一个简单的屏保,当然不在话下。
      目前最新版本的XNA是3.0版本,其官方网站为http://www.xna.com/ 可以在http://www.microsoft.com/downloads/details.aspx?FamilyId=7D70D6ED-1EDD-4852-9883-9A33C0AD8FEE&displaylang=en 下载到3.0版本。
安装完毕后就可以在VS2008的新建项目中看见XNA Game Studio3.0了。

      当然这些还不够,赶快到音像店购买一套《黑客帝国》光盘,仔细观察他们酷酷的数据流界面^_^
Are you ready? 再下一节中,我将详细介绍XNA的动画细节技术,不过最近很忙,一旦有时间,我就来写文章。敬请期待。

      点击此处下载本节WPF超简单屏保源代码。一定要记得将编译出来的EXE文件扩展名修改为SCR。如果想在屏保属性页中预览,改名后直接拷贝到SYSTEM32目录下即可。将文件夹属性的这个勾勾去掉,就可以修改扩展名。


类别:奇思妙想 | 添加到搜藏 | 浏览() | 评论 (2)
 
最近读者:
 
网友评论:
1
2009年05月21日 星期四 15:23 | 回复
 
2
2009年05月30日 星期六 22:07 | 回复
等待继续更新……
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu