文章来源: http://www.cnblogs.com/dearsj001/archive/2010/07/30/InvisibleApplicationOnWM.html
有时候,我们需要在Windows Mobile上做一些invisible的应用程序,使得用户无法察觉。这几天找了一些资料,请教了Jake等一些朋友,下面就做一个简单的总结。
1. 如何逃脱“任务管理器”?
大家知道,在Windows Mobile上做自己的应用程序,会在“设置->系统->内存->运行的程序”中显示出来。在Windows Mobile 6.1以后,则由“设置->系统->任务管理器”代替了。如下图1所示:
图1
有什么方法,能够使得应用程序不显示在应用程序列表中呢?下面提供两种方法,一种是偷懒的方法,另一种是正规的方法。
A. Form设计方法
这是一种比较偷懒的方法,为什么这么说?因为我们仅仅需要在visual studio开发环境中,对Form设计进行简单的编辑,就可以实现我们的需求。闲话少说,直接上图。如图2所示,在Form设计窗口中,选中Form,查看其Properties,就可以发现有“Text”一项,这项功能是充当Form的标题,如果我们把其中的文字“Form1”去掉,在对应的设计窗口中,我们就可以发现,Form1已经不见了。
图2
Deploy程序到模拟器中,我们就无法在任务管理器中发现Demo的影子了。如下图3所示。
图3
在任务管理器中是找不到我们应用程序的信息了,还有一个问题:如何让程序运行于后台,在应用程序启动的时候,不让Form显示出来?
这个可以通过Form的Activated事件来解决,即在该事件中,把Form隐藏掉。如下图4所示,在Form的事件中,添加Activated事件响应函数如下:
private void Form1_Activated(object sender, EventArgs e)
{
this.Hide();
}
图4
B. 利用Service.exe
和.NET Framework一样,.NET CF不提供托管类来创建Windows Services。在CodePlex上,PeterNowak,创建了一个轻量级的dll动态库,通过它,我们就可以利用托管代码来创建Windows Mobile上的Services了。具体大家可以参考文章:Managed Services for Windows Mobile。在程序运行时,我们无法在“Running Programs”中找到应用程序信息,如图5所示:
图5
把Cellular Emulator和模拟器连接以后,在模拟器上给Cellular Emulator拨打电话,如图6所示:
图6
利用File Explorer,在设备的“My Device”下,我们找到了phonelog.txt文件,打开该文件,我们就可以查到刚才拨打电话的信息,如图7和图8所示。
图7
图8
2. 开机自启动
如何让我们的应用程序在设备开机的时候,自动加载运行呢?在codeproject上,MVP Joel Ivory Johnson写了一篇文章《Automatically Starting Your Application on Windows Mobile》,在“A program launches at device power up”这一节中我们可以找到需要的答案。
文章提供了两种方法:
A.在设备的\Windows\StartUp文件夹中,放置应用程序的快捷方式。
B.将应用程序拷贝到设备的\Windows文件夹,然后修改注册表,在HKEY_LOCAL_MACHINE\Init中加入新的内容,如下图9所示:
图9
这样,在设备重启时,应用程序就会自启动了。
参考链接: