80

帖子

0

TA的资源

一粒金砂(初级)

21
 
引用 13 楼 gooogleman 的回复:
引用 12 楼 xqhrs232 的回复:
引用 9 楼 gooogleman 的回复:
C:\WINCE500\PUBLIC\WCESHELLFE\OAK\CTLPNL——在这下面吗?
我去看看。


对,就是它!研究好了,别忘了写个博客,让大家受益!


估计把
{L"CPL_Password",NULL, 1, IDI_PASSWD, IDS_PASSWD_NAME, IDS_PASSWD_DESC, IDS_PASSWD_TITLE,0, &PasswdTab, 0, 0, 0, 0 },
删除了就可以了。


哈哈,果然,把这个屏蔽之后这个密码设置就不见了。实际上程序没有删除,在哪里删除程序呢?
————————————————————————————————————————————————
谢谢各位。

回复

71

帖子

0

TA的资源

一粒金砂(初级)

22
 
————不过新问题来了,
删除之后系统打印出信息
CPL: Failed to load '\Windows\system.cpl'
CTLPNL: cmdline=\Windows\cplmain.cpl,3
--->>>CTLPNL: CPL='\Windows\cplmain.cpl' icon=3 tab=0
——看来要把这个也要删除才行,以及一些编号也要修改一下。
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

23
 
  1. //找到打印信息的地方,按照道理,这个函数应该被调用了多次,继续找
  2. ————————————————————————————————————————————————————————
  3. BOOL GetCPLAppletInfo(HWND hwndParent, LPTSTR pszPath, HIMAGELIST himlLarge, HIMAGELIST himlSmall)
  4. {
  5.     HINSTANCE    hinst = NULL;
  6.     APPLET_PROC    lpfnCPL;
  7.     int            i;
  8.     WORD cxMiniIcon = GetSystemMetrics(SM_CXSMICON);
  9.     WORD cyMiniIcon = GetSystemMetrics(SM_CYSMICON);

  10.     if( !(hinst = LoadLibrary(pszPath)) ||
  11.         !(lpfnCPL = (APPLET_PROC)GetProcAddress((HMODULE)hinst, c_szCplAppletFunc)) ) {
  12.             RETAILMSG(TRUE, (TEXT("CPL: Failed to load '%s'\r\n"), pszPath));//————打印出错信息
  13.             goto Error;
  14.     }

  15.     // Call CPL for Init
  16.     lpfnCPL(NULL, CPL_INIT, 0L, 0L);

  17.     for(i=0; i<(int)lpfnCPL(NULL, CPL_GETCOUNT, 0L, 0L); i++)
  18.     {
  19.         NEWCPLINFO    Newcpl;
  20.         HICON         hiconLG, hiconSM;

  21.         Newcpl.dwSize = 0L;
  22.         Newcpl.dwFlags = 0L;
  23.         if(lpfnCPL(NULL, CPL_NEWINQUIRE, i, (LONG)(LPCPLINFO)&Newcpl) == -1)
  24.         {
  25.             // This is expected & harmless--results from componentization
  26.             DEBUGMSG(DEBUG_NOISY, (TEXT("CPL: Failed CPL_NEWINQUIRE for DLL=%s applet %d\r\n"), pszPath, i));
  27.             continue;
  28.         }

  29.         if (Newcpl.dwSize != sizeof(NEWCPLINFO)) {
  30.             DEBUGMSG(ERROR_ZONE, (TEXT("CPL: Incompatible struct size from '%s'\r\n"), pszPath));
  31.             goto Error;
  32.         }

  33.         hiconLG = Newcpl.hIcon;
  34.         hiconSM = 0;

  35.         if (Newcpl.lData)             // so a small icon can be loaded (we do not have CopyImage())
  36.             hiconSM = (HICON)LoadImage(hinst, MAKEINTRESOURCE(Newcpl.lData),
  37.                                 IMAGE_ICON, cxMiniIcon, cyMiniIcon, LR_DEFAULTCOLOR);

  38.         if (! hiconSM || hiconLG == (HICON) 1)
  39.             hiconSM    = hiconLG;

  40.         if (!hiconLG)    {
  41.             DEBUGMSG(ERROR_ZONE, (TEXT("No Icon found for CPL '%s', Applet '%s'\r\n"),pszPath, Newcpl.szName));
  42.             continue;
  43.         }else if (hiconLG == (HICON) 1)     {
  44.             DEBUGMSG(DEBUG_NOISY, (TEXT("Icon=1. Continue...\r\n")));
  45.             continue;
  46.         }else {
  47.             if (ImageList_AddIcon(himlLarge, hiconLG) == -1 ||
  48.                 ImageList_AddIcon(himlSmall, hiconSM) == -1) {
  49.                     DEBUGMSG(ERROR_ZONE, (L"Error: Load icon for applet='%s' \r\n", Newcpl.szName));
  50.                     goto Error;
  51.             }
  52.         }

  53.         DestroyIcon(hiconLG);
  54.         DestroyIcon(hiconSM);

  55.         if (!GetMoreMem())
  56.             goto Error;

  57.         rgAppletsData[nCPL_files].nApplet = i;
  58.         lstrcpy(rgAppletsData[nCPL_files].szAppletName, Newcpl.szName);
  59.         lstrcpy(rgAppletsData[nCPL_files].szDesc, Newcpl.szInfo);
  60.         lstrcpy(rgAppletsData[nCPL_files].szDllName, pszPath);
  61.         nCPL_files++;
  62.         lpfnCPL(NULL, CPL_STOP, i, Newcpl.lData);

  63.         DEBUGMSG(DEBUG_NOISY, (TEXT("Found applet='%s' index=%d dllpath=%s \r\n"), Newcpl.szName,nCPL_files, pszPath));
  64.     }

  65.     lpfnCPL(NULL, CPL_EXIT, 0L, 0L);
  66.     if (hinst) FreeLibrary(hinst);
  67.     return TRUE;

  68. Error:
  69.     switch (GetLastError()) {
  70.         case ERROR_OUTOFMEMORY:
  71.         case ERROR_NOT_ENOUGH_MEMORY:
  72.             MessageBox(hwndParent, CELOADSZ(IDS_OUTOFMEMORY), CELOADSZ(IDS_TITLE), MB_OK|MB_ICONEXCLAMATION);
  73.             break;
  74.     }
  75.     return FALSE;
  76. }
复制代码
 
 
 

回复

58

帖子

0

TA的资源

一粒金砂(初级)

24
 
  1. //———OK,找到了——这个控制面板图标还有什么CPL文件?!——
  2. //------------------ Find CPL applets ----------------

  3. LRESULT GetCPLFiles(HWND hwndParent, HWND hwndLV)
  4. {
  5.     HANDLE h;
  6.     WIN32_FIND_DATA fd;
  7.     TCHAR sz[MAX_PATH];

  8.     // create the large and small image lists for the list view control
  9.     himlSmall = ImageList_Create(16, 16, ILC_MASK, 12, 0);
  10.     himlLarge = ImageList_Create(32, 32, ILC_MASK, 12, 0);

  11.     DEBUGMSG(DEBUG_NOISY, (TEXT("- Searching For CPLs -\r\n")));

  12.     h = FindFirstFile(L"\\Windows\\*.cpl", &fd);//
  13.     if (h != INVALID_HANDLE_VALUE) {
  14.         do {
  15.             // update requires complete path
  16.             lstrcpy(sz, L"\\Windows\");
  17.             lstrcat(sz, fd.cFileName);
  18.             DEBUGMSG(DEBUG_NOISY, (TEXT("Found RAM CPL file='%s' \r\n"),sz));
  19.             GetCPLAppletInfo(hwndParent, sz, himlLarge, himlSmall);
  20.         } while (FindNextFile(h, &fd));//
  21.         FindClose(h);
  22.     }
  23.     himlLargeOld = ListView_SetImageList(hwndLV, himlLarge, LVSIL_NORMAL);
  24.     himlSmallOld = ListView_SetImageList(hwndLV, himlSmall, LVSIL_SMALL);
  25.     return TRUE;
  26. }
复制代码

 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

25
 
cplmain.cpl的文件格式类似DLL,不能改,看来要找到相关代码才行哦。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

26
 
C:\WINCE500\PUBLIC\WCESHELLFE\OAK\CTLPNL\CPLMAIN\cplmain.rc有密码设置的相关信息
————————————————————————————————————————————
//@CESYSGEN IF CPLMAIN_PASSWORD
//
// Password strings
//
STRINGTABLE DISCARDABLE
BEGIN
    IDS_PASSWD_NAME             "Password"
    IDS_PASSWD_DESC             "Change owner's password and set security options."
    IDS_PASSWD_TITLE            "Password Properties"
    IDS_PASSWD_TAB              "Password Settings"
    IDS_PASSWDERR_TITLE         "Passwords Do Not Match"
    IDS_PASSWDERR_NOTMATCH      "Passwords do not match. Please retype identical passwords in both boxes."
END
//@CESYSGEN ENDIF

不过对出现的问题没有帮助。
——————————————————这个东西它是怎么编号的。是在哪里控制密码组件的加载的呢?
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

27
 
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:存储器管理
——————————————————————————————————————————————————————
在网上找到这个东西,ctlpnl.exe 应该也开源了,看来可以解决问题了。
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(初级)

28
 
  1. C:\WINCE500\PUBLIC\WCESHELLFE\OAK\CTLPNL\CTLPNL\cpl.cpp
  2. 有如下一些信息
  3. ——————————
  4. #define NUMINDICES        2
  5. typedef struct
  6. {
  7.         LPCTSTR pszDll;                // old dll/cpl name
  8.         int        rgNewIndex[NUMINDICES];
  9. // index into CPLMAIN of applet that used to be index 0,1 etc in pszDll (old DLL)
  10. }
  11. OLDCMDLINE_CONV;

  12. // -1 == invalid entry
  13. OLDCMDLINE_CONV rgCompat[] =
  14. {
  15.         //L"network",        0, -1,                // network
  16.         L"comm",         0,  1,                // communications, dialing
  17.         L"main",         2, -1,                // keyboard
  18.         L"passwrd",        3,  4,                // password, owner 现在把这两个都屏蔽掉试试
  19.         L"power",        5, -1,                // power. [Jshell uses 1 as applet id, which is bogus!]
  20.         L"system",  6, -1,                // system, remove-pgms(which we dont have yet)
  21.         L"screen",        7, 9,                // display, stylus
  22.         L"sounds",  10,-1,                // sounds
  23.         L"sipcpl",  11,-1,                // SIP
  24.         L"clock",   13,-1,                // SIP
  25. };
复制代码
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

29
 
删除了,但是还是这样。
————————————————
这个是和硬件无关,的加载失败无所谓。暂时不管了。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

30
 
支持提供资源的
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

31
 
看不懂
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

32
 
不知道哦,没弄过
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

33
 
牛人,學習了.
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

34
 
接分
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

35
 
dddd
 
 
 

回复

62

帖子

0

TA的资源

一粒金砂(初级)

36
 
good
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

37
 
路过。
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

38
 
注册表有没有也要去掉的呢
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

39
 
应该要去掉注册表里相应的项
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

40
 
引用 28 楼 gooogleman 的回复:
删除了,但是还是这样。
————————————————
这个是和硬件无关,的加载失败无所谓。暂时不管了。


后来发现这样直接屏蔽会产生一些意想不到的错误。比如点这个会响应那个。估计是数组错位是不行的。后来我使用另外一个代替密码,虽然有两个一样的图标,但是至少不会出现
错位了。哈哈。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【回帖赢京东卡】说说无线技术那些事儿
即日起—2月28日,参与回帖讨论都有机会赢取【30元京东卡】

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表