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目录下即可。将文件夹属性的这个勾勾去掉,就可以修改扩展名。


