详解WINCE的控制面板
生活随笔
收集整理的這篇文章主要介紹了
详解WINCE的控制面板
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
曾經在我的一篇《控制面板的創建》中介紹過WinCE控制面板的結構,不過由于那篇文章其目的只在于控制面板如何調用EXE程序,故對控制面板也僅是泛泛而談.不過在這篇文章中,我們將對WinCE的使用方法來個整體的詳解.
?? ??? ?
1.控制面板的結構
?? ??? ?控制面板其實也是個動態鏈接庫,區別只在于后綴名為.cpl,以及對外接口為CPlApplet().
?? ??? ?接口的原型為:
?? ??? ?LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
?? ??? ?在接口函數中我們需要實現特定幾個消息的響應,控制面板才能正常運作.為方便觀察,在這里直接貼出消息的響應結構:
?? ??? ?
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// The entry point to the Control Panel application.
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
extern "C"? LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
{
? switch (message)
? {
??? case CPL_INIT:
???? ??? ?// Perform global initializations, especially memory
???? ??? ?// allocations, here.
???? ??? ?// Return 1 for success or 0 for failure.
???? ??? ?// Control Panel does not load if failure is returned.
???? ??? ?return 1;
??? case CPL_GETCOUNT:
???? ??? ?// The number of actions supported by this Control
???? ??? ?// Panel application.
???? ??? ?return 1;
??? case CPL_NEWINQUIRE:
?? ??? ?{
?? ??? ? ??? ?// This message is sent once for each dialog box, as
?? ??? ? ??? ?// determined by the value returned from CPL_GETCOUNT.
?? ??? ? ??? ?// lParam1 is the 0-based index of the dialog box.
?? ??? ? ??? ?// lParam2 is a pointer to the NEWCPLINFO structure.
?? ??? ??? ??? ?return 0; //means CPLApplet succeed
?? ??? ??? ??? ?return 1;? // Nonzero value means CPlApplet failed.
?? ??? ??? ?}
??? case CPL_DBLCLK:
?? ??? ??? ?{
?? ??? ? ??? ?// The user has double-clicked the icon for the
?? ??? ? ??? ?// dialog box in lParam1 (zero-based).
?? ??? ??? ??? ?return 0;???? // CPlApplet succeed.
?? ??? ??? ??? ?return 1;???? // CPlApplet failed.
?? ??? ??? ?}
?? ??? ??? ?
??? case CPL_STOP:
?? ??? ??? ??? ?// Called once for each dialog box. Used for cleanup.
?? ??? ??? ??? ?
??? case CPL_EXIT:
?? ??? ??? ??? ?// Called only once for the application. Used for cleanup.
?? ??? ??? ??? ?
??? default:
???? ??? ?return 0;
? }
? return 1;? // CPlApplet failed.
}? // CPlApplet
?? ??? ?這幾個消息的作用分別是:
?? ??? ?CPL_INIT:初始化,可以在這分配內存等等.
?? ??? ?CPL_GETCOUNT:返回控制面板程序的個數.因為一個.cpl文件中,可能包含多個Applets.
?? ??? ?CPL_NEWINQUIRE:返回包含程序名和圖標信息的NEWCPLINFO結構
?? ??? ?CPL_DBLCLK:雙擊時響應
?? ??? ?CPL_STOP:單個組件退出時響應,用來清除資源內存等
?? ??? ?CPL_EXIT:退出整個cpl程序時響應
?? ??? ?這些消息的定義可以在cpl.h中找到
?? ??? ?
?? ??? ?
2.在explorer中使用
?? ??? ?如果定制的系統中帶有explorer UI,只要把編譯好的文件放進"\windows",然后再打開"控制面板"就可以看到.
?? ??? ?
?? ??? ?
3.如何調用.cpl
?? ??? ?就像PC機中.dll文件不能直接運行,需要借助rundll32.exe來運行一樣,WinCE下的.cpl也需要相應的程序來調用,這個程序就是:"ctlpnl.exe".
?? ??? ?比如我們需要調用系統自帶的cplmain.cpl的"電源管理",只要在開始菜單的運行中輸入:"ctlpnl.exe \windows\cplmain.cpl,5".在路徑后面緊跟的"5"只是因為"電源管理"在cplmain.cpl中輸入第五個Applet而已.
?? ??? ?由此我們不難得出在程序中運用ShellExecuteEx()函數調用控制面板的Applet的方法.以下這段代碼,效果和在命令行中輸入命令一樣,也是調用"電源管理".
?? ??? ?SHELLEXECUTEINFO info;?? ?
?? ??? ?TCHAR szControlPanelCmdLine[ 200 ];
??? swprintf( szControlPanelCmdLine, L"\\windows\\cplmain.cpl,5");
?? ??? ?info.cbSize = sizeof( info );
?? ??? ?info.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
?? ??? ?info.lpVerb = NULL;
?? ??? ?info.lpFile = TEXT("ctlpnl.exe");
?? ??? ?info.lpParameters = szControlPanelCmdLine;
?? ??? ?info.lpDirectory = NULL;
?? ??? ?info.nShow = SW_SHOW;
?? ??? ?info.hInstApp = NULL;
?? ??? ?ShellExecuteEx( &info );?? ?
?? ??? ?
?? ??? ?如果想調用cplmain.cpl的其它Applet,只要把數字改為相對應的即可.
?? ??? ?以下所列的第一項序號為0,接下的為1,其后的繼續遞增.
?? ??? ?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?? ? ?
??? 15?? ?CPL_Accessib?
?? ?
4.系統自帶控制面板的代碼
?? ??? ?微軟對控制面板的代碼是完全公開的,如果安裝的是PB4.2,代碼可以在"\PUBLIC\WCESHELLFE\OAK\CTLPNL"中找到.
?? ??? ?CTLPNL文件夾中有九個文件夾,分別對應不同的CPL文件:
?? ??? ?ADVBACKLIGHT:高級背光燈管理
?? ??? ?BTHPNL:藍牙
?? ??? ?CONNPNL:撥號網絡
?? ??? ?CONTROL:主控制臺,我們在explorer中看到的"控制面板"應該就是這個
?? ??? ?CPLMAIN:會生成cplmain.cpl,控制面板的大多數選項均源自于此
?? ??? ?CTLPNL:和CONTROL相關聯的
?? ??? ?DMPNL:沒使用過,不太清楚.不過查看rc文件應該是設置上網的.
?? ??? ?INTL2:區域和語言設置
?? ??? ?STGUI:存儲器管理
?? ??? ?
1.控制面板的結構
?? ??? ?控制面板其實也是個動態鏈接庫,區別只在于后綴名為.cpl,以及對外接口為CPlApplet().
?? ??? ?接口的原型為:
?? ??? ?LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
?? ??? ?在接口函數中我們需要實現特定幾個消息的響應,控制面板才能正常運作.為方便觀察,在這里直接貼出消息的響應結構:
?? ??? ?
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// The entry point to the Control Panel application.
// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
extern "C"? LONG CALLBACK CPlApplet(HWND hwndCPL,UINT message, LPARAM lParam1, LPARAM lParam2)
{
? switch (message)
? {
??? case CPL_INIT:
???? ??? ?// Perform global initializations, especially memory
???? ??? ?// allocations, here.
???? ??? ?// Return 1 for success or 0 for failure.
???? ??? ?// Control Panel does not load if failure is returned.
???? ??? ?return 1;
??? case CPL_GETCOUNT:
???? ??? ?// The number of actions supported by this Control
???? ??? ?// Panel application.
???? ??? ?return 1;
??? case CPL_NEWINQUIRE:
?? ??? ?{
?? ??? ? ??? ?// This message is sent once for each dialog box, as
?? ??? ? ??? ?// determined by the value returned from CPL_GETCOUNT.
?? ??? ? ??? ?// lParam1 is the 0-based index of the dialog box.
?? ??? ? ??? ?// lParam2 is a pointer to the NEWCPLINFO structure.
?? ??? ??? ??? ?return 0; //means CPLApplet succeed
?? ??? ??? ??? ?return 1;? // Nonzero value means CPlApplet failed.
?? ??? ??? ?}
??? case CPL_DBLCLK:
?? ??? ??? ?{
?? ??? ? ??? ?// The user has double-clicked the icon for the
?? ??? ? ??? ?// dialog box in lParam1 (zero-based).
?? ??? ??? ??? ?return 0;???? // CPlApplet succeed.
?? ??? ??? ??? ?return 1;???? // CPlApplet failed.
?? ??? ??? ?}
?? ??? ??? ?
??? case CPL_STOP:
?? ??? ??? ??? ?// Called once for each dialog box. Used for cleanup.
?? ??? ??? ??? ?
??? case CPL_EXIT:
?? ??? ??? ??? ?// Called only once for the application. Used for cleanup.
?? ??? ??? ??? ?
??? default:
???? ??? ?return 0;
? }
? return 1;? // CPlApplet failed.
}? // CPlApplet
?? ??? ?這幾個消息的作用分別是:
?? ??? ?CPL_INIT:初始化,可以在這分配內存等等.
?? ??? ?CPL_GETCOUNT:返回控制面板程序的個數.因為一個.cpl文件中,可能包含多個Applets.
?? ??? ?CPL_NEWINQUIRE:返回包含程序名和圖標信息的NEWCPLINFO結構
?? ??? ?CPL_DBLCLK:雙擊時響應
?? ??? ?CPL_STOP:單個組件退出時響應,用來清除資源內存等
?? ??? ?CPL_EXIT:退出整個cpl程序時響應
?? ??? ?這些消息的定義可以在cpl.h中找到
?? ??? ?
?? ??? ?
2.在explorer中使用
?? ??? ?如果定制的系統中帶有explorer UI,只要把編譯好的文件放進"\windows",然后再打開"控制面板"就可以看到.
?? ??? ?
?? ??? ?
3.如何調用.cpl
?? ??? ?就像PC機中.dll文件不能直接運行,需要借助rundll32.exe來運行一樣,WinCE下的.cpl也需要相應的程序來調用,這個程序就是:"ctlpnl.exe".
?? ??? ?比如我們需要調用系統自帶的cplmain.cpl的"電源管理",只要在開始菜單的運行中輸入:"ctlpnl.exe \windows\cplmain.cpl,5".在路徑后面緊跟的"5"只是因為"電源管理"在cplmain.cpl中輸入第五個Applet而已.
?? ??? ?由此我們不難得出在程序中運用ShellExecuteEx()函數調用控制面板的Applet的方法.以下這段代碼,效果和在命令行中輸入命令一樣,也是調用"電源管理".
?? ??? ?SHELLEXECUTEINFO info;?? ?
?? ??? ?TCHAR szControlPanelCmdLine[ 200 ];
??? swprintf( szControlPanelCmdLine, L"\\windows\\cplmain.cpl,5");
?? ??? ?info.cbSize = sizeof( info );
?? ??? ?info.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
?? ??? ?info.lpVerb = NULL;
?? ??? ?info.lpFile = TEXT("ctlpnl.exe");
?? ??? ?info.lpParameters = szControlPanelCmdLine;
?? ??? ?info.lpDirectory = NULL;
?? ??? ?info.nShow = SW_SHOW;
?? ??? ?info.hInstApp = NULL;
?? ??? ?ShellExecuteEx( &info );?? ?
?? ??? ?
?? ??? ?如果想調用cplmain.cpl的其它Applet,只要把數字改為相對應的即可.
?? ??? ?以下所列的第一項序號為0,接下的為1,其后的繼續遞增.
?? ??? ?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?? ? ?
??? 15?? ?CPL_Accessib?
?? ?
4.系統自帶控制面板的代碼
?? ??? ?微軟對控制面板的代碼是完全公開的,如果安裝的是PB4.2,代碼可以在"\PUBLIC\WCESHELLFE\OAK\CTLPNL"中找到.
?? ??? ?CTLPNL文件夾中有九個文件夾,分別對應不同的CPL文件:
?? ??? ?ADVBACKLIGHT:高級背光燈管理
?? ??? ?BTHPNL:藍牙
?? ??? ?CONNPNL:撥號網絡
?? ??? ?CONTROL:主控制臺,我們在explorer中看到的"控制面板"應該就是這個
?? ??? ?CPLMAIN:會生成cplmain.cpl,控制面板的大多數選項均源自于此
?? ??? ?CTLPNL:和CONTROL相關聯的
?? ??? ?DMPNL:沒使用過,不太清楚.不過查看rc文件應該是設置上網的.
?? ??? ?INTL2:區域和語言設置
?? ??? ?STGUI:存儲器管理
總結
以上是生活随笔為你收集整理的详解WINCE的控制面板的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 女游客登龙舟被网暴 龙舟协会回应后:网友
- 下一篇: 神舟十四号发射成功正与空间站对接:首次上