如何在程序中调用Windows Mobile系统自带的控制面板项呢?经常在论坛或者邮件组看到这样的问题, 比如我们也许在自己的程序中需要添加一个“移除程序”功能,或者需要用户设置一下闹钟,或者需要修改一下其他的系统设置,这时候也许直接调用系统自带的控制面板,要比自己修改注册表自己设计消息存储方式自己设计UI要简单的多。
下面这个类就实现了这一功能:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
1
class
ControlApplet
2
{
3
publicstaticvoidShowApplet(AppletTypeapplet)
4

{
5
ProcessStartInfostartInfo=newProcessStartInfo();
6
startInfo.FileName=@"\Windows\ctlpnl.exe";
7
startInfo.Arguments=String.Format("cplmain.cpl,{0}",(byte)applet);
8
Process.Start(startInfo);
9
}
10
11
publicstaticvoidShowApplet(AppletTypeapplet,bytetabIndex)
12

{
13
ProcessStartInfostartInfo=newProcessStartInfo();
14
startInfo.FileName=@"\Windows\ctlpnl.exe";
15
startInfo.Arguments=String.Format("cplmain.cpl,{0},{1}",(byte)applet,tabIndex);
16
Process.Start(startInfo);
17
}
18
19
publicenumAppletType
20

{
21
Contrast,
22
Password,
23
OwnerInformation,
24
Power,
25
Memory,
26
About,
27
Backlight,
28
AlignScreen,
29
InputMethod,
30
SoundsReminders,
31
RemovePrograms,
32
Menus,
33
Buttons,
34
TodaySettings,
35
PCConnections,
36
ModemConnections,
37
Clock,
38
NetworkConnections,
39
RegionalSettings
40
}
41
42
ConstantFields#regionConstantFields
43
publicconstbyteCPAPPLET_OWNERINFO_IDENTIFICATION=0;
44
publicconstbyteCPAPPLET_OWNERINFO_NOTES=1;
45
46
publicconstbyteCPAPPLET_MEMORY_MAIN=0;
47
publicconstbyteCPAPPLET_MEMORY_RUNNINGPROGRAMS=1;
48
49
publicconstbyteCPAPPLET_ABOUT_VERSION=0;
50
publicconstbyteCPAPPLET_ABOUT_DEVICEID=1;
51
publicconstbyteCPAPPLET_ABOUT_COPYRIGHTS=2;
52
53
publicconstbyteCPAPPLET_BACKLIGHT_BATTERY=0;
54
publicconstbyteCPAPPLET_BACKLIGHT_EXTERNAL=1;
55
56
publicconstbyteCPAPPLET_INPUT_INPUTMEHTOD=0;
57
publicconstbyteCPAPPLET_INPUT_WORDCOMPLETION=1;
58
publicconstbyteCPAPPLET_INPUT_OPTIONS=2;
59
60
publicconstbyteCPAPPLET_SNDANDREMINDERS_VOLUME=0;
61
publicconstbyteCPAPPLET_SNDANDREMINDERS_SOUNDS=1;
62
publicconstbyteCPAPPLET_SNDANDREMINDERS_REMINDERS=2;
63
64
publicconstbyteCPAPPLET_MENUS_STARTMENU=0;
65
publicconstbyteCPAPPLET_MENUS_NEWMENU=1;
66
67
publicconstbyteCPAPPLET_BUTTONS_PROGRAMBUTTONS=0;
68
publicconstbyteCPAPPLET_BUTTONS_UPDOWNCONTROL=1;
69
70
publicconstbyteCPAPPLET_MODEM_CONNECTIONS=0;
71
publicconstbyteCPAPPLET_MODEM_DIALING=1;
72
73
publicconstbyteCPAPPLET_CLOCK_TIME=0;
74
publicconstbyteCPAPPLET_CLOCK_ALARMS=1;
75
76
publicconstbyteCPAPPLET_RS_REGION=0;
77
publicconstbyteCPAPPLET_RS_NUMBER=1;
78
publicconstbyteCPAPPLET_RS_CURRENCY=2;
79
publicconstbyteCPAPPLET_RS_TIME=3;
80
publicconstbyteCPAPPLET_RS_DATE=4;
81
#endregion
82
}
class
ControlApplet2

{3
publicstaticvoidShowApplet(AppletTypeapplet)4


{5
ProcessStartInfostartInfo=newProcessStartInfo();6
startInfo.FileName=@"\Windows\ctlpnl.exe";7
startInfo.Arguments=String.Format("cplmain.cpl,{0}",(byte)applet);8
Process.Start(startInfo);9
}10

11
publicstaticvoidShowApplet(AppletTypeapplet,bytetabIndex)12


{13
ProcessStartInfostartInfo=newProcessStartInfo();14
startInfo.FileName=@"\Windows\ctlpnl.exe";15
startInfo.Arguments=String.Format("cplmain.cpl,{0},{1}",(byte)applet,tabIndex);16
Process.Start(startInfo);17
}18

19
publicenumAppletType20


{21
Contrast,22
Password,23
OwnerInformation,24
Power,25
Memory,26
About,27
Backlight,28
AlignScreen,29
InputMethod,30
SoundsReminders,31
RemovePrograms,32
Menus,33
Buttons,34
TodaySettings,35
PCConnections,36
ModemConnections,37
Clock,38
NetworkConnections,39
RegionalSettings40
}41

42

ConstantFields#regionConstantFields43
publicconstbyteCPAPPLET_OWNERINFO_IDENTIFICATION=0;44
publicconstbyteCPAPPLET_OWNERINFO_NOTES=1;45

46
publicconstbyteCPAPPLET_MEMORY_MAIN=0;47
publicconstbyteCPAPPLET_MEMORY_RUNNINGPROGRAMS=1;48

49
publicconstbyteCPAPPLET_ABOUT_VERSION=0;50
publicconstbyteCPAPPLET_ABOUT_DEVICEID=1;51
publicconstbyteCPAPPLET_ABOUT_COPYRIGHTS=2;52

53
publicconstbyteCPAPPLET_BACKLIGHT_BATTERY=0;54
publicconstbyteCPAPPLET_BACKLIGHT_EXTERNAL=1;55

56
publicconstbyteCPAPPLET_INPUT_INPUTMEHTOD=0;57
publicconstbyteCPAPPLET_INPUT_WORDCOMPLETION=1;58
publicconstbyteCPAPPLET_INPUT_OPTIONS=2;59

60
publicconstbyteCPAPPLET_SNDANDREMINDERS_VOLUME=0;61
publicconstbyteCPAPPLET_SNDANDREMINDERS_SOUNDS=1;62
publicconstbyteCPAPPLET_SNDANDREMINDERS_REMINDERS=2;63

64
publicconstbyteCPAPPLET_MENUS_STARTMENU=0;65
publicconstbyteCPAPPLET_MENUS_NEWMENU=1;66

67
publicconstbyteCPAPPLET_BUTTONS_PROGRAMBUTTONS=0;68
publicconstbyteCPAPPLET_BUTTONS_UPDOWNCONTROL=1;69

70
publicconstbyteCPAPPLET_MODEM_CONNECTIONS=0;71
publicconstbyteCPAPPLET_MODEM_DIALING=1;72

73
publicconstbyteCPAPPLET_CLOCK_TIME=0;74
publicconstbyteCPAPPLET_CLOCK_ALARMS=1;75

76
publicconstbyteCPAPPLET_RS_REGION=0;77
publicconstbyteCPAPPLET_RS_NUMBER=1;78
publicconstbyteCPAPPLET_RS_CURRENCY=2;79
publicconstbyteCPAPPLET_RS_TIME=3;80
publicconstbyteCPAPPLET_RS_DATE=4;81
#endregion82
}
简单来说就是启动ctlpnl.exe,并传入相应的参数即可,注意第一个参数是表示控制台的哪一项,第二个参数(如果有的话)是表示控制台项目的具体哪个标签页,它为空时默认为第一个标签页。使用的时候如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
ControlApplet.ShowApplet(ControlApplet.AppletType.Clock);
效果:

<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
ControlApplet.ShowApplet(ControlApplet.AppletType.Clock,
ControlApplet.CPAPPLET_CLOCK_ALARMS);
ControlApplet.CPAPPLET_CLOCK_ALARMS);
效果:

完整示例在这里下载:
http://files.cnblogs.com/fox23/ControlPanelSample.rar
Enjoy!
相关资料:
本文介绍了一种在WindowsMobile程序中调用系统控制面板的方法,通过启动ctlpnl.exe并传入特定参数来实现不同控制面板项的功能,如闹钟设置、移除程序等。
3613

被折叠的 条评论
为什么被折叠?



