如何在程序中调用Windows Mobile系统自带的控制面板项呢?经常在论坛或者邮件组看到这样的问题, 比如我们也许在自己的程序中需要添加一个“移除程序”功能,或者需要用户设置一下闹钟,或者需要修改一下其他的系统设置,这时候也许直接调用系统自带的控制面板,要比自己修改注册表自己设计消息存储方式自己设计UI要简单的多。
下面这个类就实现了这一功能:
1
class
ControlApplet
2 {
3 public static void ShowApplet(AppletType applet)
4 {
5 ProcessStartInfo startInfo = new ProcessStartInfo();
6 startInfo.FileName = @"\Windows\ctlpnl.exe";
7 startInfo.Arguments = String.Format("cplmain.cpl,{0}", (byte)applet);
8 Process.Start(startInfo);
9 }
10
11 public static void ShowApplet(AppletType applet, byte tabIndex)
12 {
13 ProcessStartInfo startInfo = new ProcessStartInfo();
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 public enum AppletType
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 Constant Fields#region Constant Fields
43 public const byte CPAPPLET_OWNERINFO_IDENTIFICATION = 0;
44 public const byte CPAPPLET_OWNERINFO_NOTES = 1;
45
46 public const byte CPAPPLET_MEMORY_MAIN = 0;
47 public const byte CPAPPLET_MEMORY_RUNNINGPROGRAMS = 1;
48
49 public const byte CPAPPLET_ABOUT_VERSION = 0;
50 public const byte CPAPPLET_ABOUT_DEVICEID = 1;
51 public const byte CPAPPLET_ABOUT_COPYRIGHTS = 2;
52
53 public const byte CPAPPLET_BACKLIGHT_BATTERY = 0;
54 public const byte CPAPPLET_BACKLIGHT_EXTERNAL = 1;
55
56 public const byte CPAPPLET_INPUT_INPUTMEHTOD = 0;
57 public const byte CPAPPLET_INPUT_WORDCOMPLETION = 1;
58 public const byte CPAPPLET_INPUT_OPTIONS = 2;
59
60 public const byte CPAPPLET_SNDANDREMINDERS_VOLUME = 0;
61 public const byte CPAPPLET_SNDANDREMINDERS_SOUNDS = 1;
62 public const byte CPAPPLET_SNDANDREMINDERS_REMINDERS = 2;
63
64 public const byte CPAPPLET_MENUS_STARTMENU = 0;
65 public const byte CPAPPLET_MENUS_NEWMENU = 1;
66
67 public const byte CPAPPLET_BUTTONS_PROGRAMBUTTONS = 0;
68 public const byte CPAPPLET_BUTTONS_UPDOWNCONTROL = 1;
69
70 public const byte CPAPPLET_MODEM_CONNECTIONS = 0;
71 public const byte CPAPPLET_MODEM_DIALING = 1;
72
73 public const byte CPAPPLET_CLOCK_TIME = 0;
74 public const byte CPAPPLET_CLOCK_ALARMS = 1;
75
76 public const byte CPAPPLET_RS_REGION = 0;
77 public const byte CPAPPLET_RS_NUMBER = 1;
78 public const byte CPAPPLET_RS_CURRENCY = 2;
79 public const byte CPAPPLET_RS_TIME = 3;
80 public const byte CPAPPLET_RS_DATE = 4;
81 #endregion
82 }
2 {
3 public static void ShowApplet(AppletType applet)
4 {
5 ProcessStartInfo startInfo = new ProcessStartInfo();
6 startInfo.FileName = @"\Windows\ctlpnl.exe";
7 startInfo.Arguments = String.Format("cplmain.cpl,{0}", (byte)applet);
8 Process.Start(startInfo);
9 }
10
11 public static void ShowApplet(AppletType applet, byte tabIndex)
12 {
13 ProcessStartInfo startInfo = new ProcessStartInfo();
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 public enum AppletType
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 Constant Fields#region Constant Fields
43 public const byte CPAPPLET_OWNERINFO_IDENTIFICATION = 0;
44 public const byte CPAPPLET_OWNERINFO_NOTES = 1;
45
46 public const byte CPAPPLET_MEMORY_MAIN = 0;
47 public const byte CPAPPLET_MEMORY_RUNNINGPROGRAMS = 1;
48
49 public const byte CPAPPLET_ABOUT_VERSION = 0;
50 public const byte CPAPPLET_ABOUT_DEVICEID = 1;
51 public const byte CPAPPLET_ABOUT_COPYRIGHTS = 2;
52
53 public const byte CPAPPLET_BACKLIGHT_BATTERY = 0;
54 public const byte CPAPPLET_BACKLIGHT_EXTERNAL = 1;
55
56 public const byte CPAPPLET_INPUT_INPUTMEHTOD = 0;
57 public const byte CPAPPLET_INPUT_WORDCOMPLETION = 1;
58 public const byte CPAPPLET_INPUT_OPTIONS = 2;
59
60 public const byte CPAPPLET_SNDANDREMINDERS_VOLUME = 0;
61 public const byte CPAPPLET_SNDANDREMINDERS_SOUNDS = 1;
62 public const byte CPAPPLET_SNDANDREMINDERS_REMINDERS = 2;
63
64 public const byte CPAPPLET_MENUS_STARTMENU = 0;
65 public const byte CPAPPLET_MENUS_NEWMENU = 1;
66
67 public const byte CPAPPLET_BUTTONS_PROGRAMBUTTONS = 0;
68 public const byte CPAPPLET_BUTTONS_UPDOWNCONTROL = 1;
69
70 public const byte CPAPPLET_MODEM_CONNECTIONS = 0;
71 public const byte CPAPPLET_MODEM_DIALING = 1;
72
73 public const byte CPAPPLET_CLOCK_TIME = 0;
74 public const byte CPAPPLET_CLOCK_ALARMS = 1;
75
76 public const byte CPAPPLET_RS_REGION = 0;
77 public const byte CPAPPLET_RS_NUMBER = 1;
78 public const byte CPAPPLET_RS_CURRENCY = 2;
79 public const byte CPAPPLET_RS_TIME = 3;
80 public const byte CPAPPLET_RS_DATE = 4;
81 #endregion
82 }
简单来说就是启动ctlpnl.exe,并传入相应的参数即可,注意第一个参数是表示控制台的哪一项,第二个参数(如果有的话)是表示控制台项目的具体哪个标签页,它为空时默认为第一个标签页。使用的时候如下:
ControlApplet.ShowApplet(ControlApplet.AppletType.Clock);
效果:
ControlApplet.ShowApplet(ControlApplet.AppletType.Clock,
ControlApplet.CPAPPLET_CLOCK_ALARMS);
ControlApplet.CPAPPLET_CLOCK_ALARMS);
效果:
完整示例在这里下载:
http://files.cnblogs.com/fox23/ControlPanelSample.rar
Enjoy!
相关资料: