文章出处来自:http://armlinux.uueasy.com/read.php?tid=120#
WinCE中如何调用控制面板程序?
客户要求把触摸屏校准程序放到我的应用程序中,其实控制面板中有一个笔针程序就是干这个用的,但他们就是不想看到应用程序以外的窗口。没办法,客户的要求就是命令。我当然不想自己再写一个功能一样的程序,最好的办法是直接调用控制面板中的那个程序。
要是在Linux里,简单,直接system("/path/filename arg……")就好了,但请注意,这是在winCE中,就比较郁了。
首先要找一个类似system这样的函数(winCE里不支持system()),找到了一个——
要是在Linux里,简单,直接system("/path/filename arg……")就好了,但请注意,这是在winCE中,就比较郁了。
首先要找一个类似system这样的函数(winCE里不支持system()),找到了一个——
CreateProcess(
LPCWSTR lpszImageName ,
LPCWSTR lpszCmdLine ,
LPSECURITY_ATTRIBUTES lpsaProcess ,
LPSECURITY_ATTRIBUTES lpsaThread ,
BOOL fInheritHandles ,
DWORD fdwCreate ,
LPVOID lpvEnvironment ,
LPWSTR lpszCurDir ,
LPSTARTUPINFOW lpsiStartInfo ,
LPPROCESS_INFORMATION lppiProcInfo );
瞧这阵势估计就没几个人喜欢,你要读读MSDN才行。
关键是后面还有障碍:不知道“笔针”程序对应的文件名和目录!你以为查看URL可以解决?WinCE的控制面板没有URL,右键也不提供“属性”,这个系统又不是我做的,搜了一圈也没有,估计是被隐藏了,死活想不出查看路径的办法。只好上网搜一下,于是查找到以下有用信息:
WinCE系统中的控制面板和Windows系统中的控制面板原理是一样的,里面就是包含了一些应用程序。WinCE系统的控制面板由 Ctlpnl.exe,Control.exe和一些.cpl文件组成,其中Ctlpnl.exe和Control.exe用于控制控制面板的文件夹显示和架构,而.cpl文件和控制面板中的实际应用程序相对应。from http://ieoqmdce.blog.163.com/blog/static/389399542009913117425/
用脚本实现对WINCE控制面板功能的直接调用
控制面板其实也是个动态链接库,区别只在于后缀名为.cpl
如何调用.cpl
就像PC机中.dll文件不能直接运行,需要借助rundll32.exe来运行一样,WinCE下的.cpl也需要相应的程序来调用,这个程序就是:"ctlpnl.exe".
比如我们需要调用系统自带的cplmain.cpl的"电源管理",只要在开始菜单的运行中输入:"ctlpnl.exe /windows/cplmain.cpl,5".在路径后面紧跟的"5"只是因为"电源管理"在cplmain.cpl中输入第五个Applet而已.
在WINCE实际使用过程中可以使用脚本来做到一机多图中,如脚本RunWait("/Windows/ctlpnl.exe", "cplmain.cpl,6,1")就可直接调用控制面板并进入调整内存
RunWait("/Windows/ctlpnl.exe", "cplmain.cpl,9,1") /可以直接进入校准 (
RunWait("/Windows/ctlpnl.exe", "cplmain.cpl,10")进入调整音量 " ;
以下所列就是不同数字对应的功能
0 CPL_Comm 连接属性
1 CPL_Dialing 拨号属性
2 CPL_Keyboard 键盘属性
3 CPL_Password 密码属性 /
4 CPL_Owner 所有者
5 CPL_Power 电源属性
6 CPL_System 系统属性
7 CPL_Screen 显示属性
8 CPL_Mouse 鼠标属性
9 CPL_Stylus 笔针属性 (这里可以校准)
10 CPL_Sounds 音量属性
11 CPL_SIP" 输入面板
12 CPL_Remove 删除程序
13 CPL_DateTime 日期时间
14 CPL_Certs 证书
from http://bbs.manbu.cc/viewthread.php?tid=27484
于是在“运行”里试了一下ctlpnl.exe /windows/cplmain.cpl,5,果然可以!那办法就有了,只要在程序中需要的地方加入:
PROCESS_INFORMATION pi = {0};
CreateProcess(_T("//Windows//ctlpnl.exe"), _T(" cplmain.cpl,9,2"), NULL, NULL, NULL,
0, NULL, NULL, NULL, &pi);
问题就解决了
LPCWSTR lpszImageName ,
LPCWSTR lpszCmdLine ,
LPSECURITY_ATTRIBUTES lpsaProcess ,
LPSECURITY_ATTRIBUTES lpsaThread ,
BOOL fInheritHandles ,
DWORD fdwCreate ,
LPVOID lpvEnvironment ,
LPWSTR lpszCurDir ,
LPSTARTUPINFOW lpsiStartInfo ,
LPPROCESS_INFORMATION lppiProcInfo );
瞧这阵势估计就没几个人喜欢,你要读读MSDN才行。
关键是后面还有障碍:不知道“笔针”程序对应的文件名和目录!你以为查看URL可以解决?WinCE的控制面板没有URL,右键也不提供“属性”,这个系统又不是我做的,搜了一圈也没有,估计是被隐藏了,死活想不出查看路径的办法。只好上网搜一下,于是查找到以下有用信息:
WinCE系统中的控制面板和Windows系统中的控制面板原理是一样的,里面就是包含了一些应用程序。WinCE系统的控制面板由 Ctlpnl.exe,Control.exe和一些.cpl文件组成,其中Ctlpnl.exe和Control.exe用于控制控制面板的文件夹显示和架构,而.cpl文件和控制面板中的实际应用程序相对应。from http://ieoqmdce.blog.163.com/blog/static/389399542009913117425/
用脚本实现对WINCE控制面板功能的直接调用
控制面板其实也是个动态链接库,区别只在于后缀名为.cpl
如何调用.cpl
就像PC机中.dll文件不能直接运行,需要借助rundll32.exe来运行一样,WinCE下的.cpl也需要相应的程序来调用,这个程序就是:"ctlpnl.exe".
比如我们需要调用系统自带的cplmain.cpl的"电源管理",只要在开始菜单的运行中输入:"ctlpnl.exe /windows/cplmain.cpl,5".在路径后面紧跟的"5"只是因为"电源管理"在cplmain.cpl中输入第五个Applet而已.
在WINCE实际使用过程中可以使用脚本来做到一机多图中,如脚本RunWait("/Windows/ctlpnl.exe", "cplmain.cpl,6,1")就可直接调用控制面板并进入调整内存
RunWait("/Windows/ctlpnl.exe", "cplmain.cpl,9,1") /可以直接进入校准 (
RunWait("/Windows/ctlpnl.exe", "cplmain.cpl,10")进入调整音量 " ;
以下所列就是不同数字对应的功能
0 CPL_Comm 连接属性
1 CPL_Dialing 拨号属性
2 CPL_Keyboard 键盘属性
3 CPL_Password 密码属性 /
4 CPL_Owner 所有者
5 CPL_Power 电源属性
6 CPL_System 系统属性
7 CPL_Screen 显示属性
8 CPL_Mouse 鼠标属性
9 CPL_Stylus 笔针属性 (这里可以校准)
10 CPL_Sounds 音量属性
11 CPL_SIP" 输入面板
12 CPL_Remove 删除程序
13 CPL_DateTime 日期时间
14 CPL_Certs 证书
from http://bbs.manbu.cc/viewthread.php?tid=27484
于是在“运行”里试了一下ctlpnl.exe /windows/cplmain.cpl,5,果然可以!那办法就有了,只要在程序中需要的地方加入:
PROCESS_INFORMATION pi = {0};
CreateProcess(_T("//Windows//ctlpnl.exe"), _T(" cplmain.cpl,9,2"), NULL, NULL, NULL,
0, NULL, NULL, NULL, &pi);
问题就解决了