19,498
社区成员
发帖
与我相关
我的任务
分享
C:\WINCE500\PUBLIC\WCESHELLFE\OAK\CTLPNL\CTLPNL\cpl.cpp
有如下一些信息
——————————
#define NUMINDICES 2
typedef struct
{
LPCTSTR pszDll; // old dll/cpl name
int rgNewIndex[NUMINDICES];
// index into CPLMAIN of applet that used to be index 0,1 etc in pszDll (old DLL)
}
OLDCMDLINE_CONV;
// -1 == invalid entry
OLDCMDLINE_CONV rgCompat[] =
{
//L"network", 0, -1, // network
L"comm", 0, 1, // communications, dialing
L"main", 2, -1, // keyboard
L"passwrd", 3, 4, // password, owner 现在把这两个都屏蔽掉试试
L"power", 5, -1, // power. [Jshell uses 1 as applet id, which is bogus!]
L"system", 6, -1, // system, remove-pgms(which we dont have yet)
L"screen", 7, 9, // display, stylus
L"sounds", 10,-1, // sounds
L"sipcpl", 11,-1, // SIP
L"clock", 13,-1, // SIP
};
//———OK,找到了——这个控制面板图标还有什么CPL文件?!——
//------------------ Find CPL applets ----------------
LRESULT GetCPLFiles(HWND hwndParent, HWND hwndLV)
{
HANDLE h;
WIN32_FIND_DATA fd;
TCHAR sz[MAX_PATH];
// create the large and small image lists for the list view control
himlSmall = ImageList_Create(16, 16, ILC_MASK, 12, 0);
himlLarge = ImageList_Create(32, 32, ILC_MASK, 12, 0);
DEBUGMSG(DEBUG_NOISY, (TEXT("- Searching For CPLs -\r\n")));
h = FindFirstFile(L"\\Windows\\*.cpl", &fd);//
if (h != INVALID_HANDLE_VALUE) {
do {
// update requires complete path
lstrcpy(sz, L"\\Windows\\");
lstrcat(sz, fd.cFileName);
DEBUGMSG(DEBUG_NOISY, (TEXT("Found RAM CPL file='%s' \r\n"),sz));
GetCPLAppletInfo(hwndParent, sz, himlLarge, himlSmall);
} while (FindNextFile(h, &fd));//
FindClose(h);
}
himlLargeOld = ListView_SetImageList(hwndLV, himlLarge, LVSIL_NORMAL);
himlSmallOld = ListView_SetImageList(hwndLV, himlSmall, LVSIL_SMALL);
return TRUE;
}
//找到打印信息的地方,按照道理,这个函数应该被调用了多次,继续找
————————————————————————————————————————————————————————
BOOL GetCPLAppletInfo(HWND hwndParent, LPTSTR pszPath, HIMAGELIST himlLarge, HIMAGELIST himlSmall)
{
HINSTANCE hinst = NULL;
APPLET_PROC lpfnCPL;
int i;
WORD cxMiniIcon = GetSystemMetrics(SM_CXSMICON);
WORD cyMiniIcon = GetSystemMetrics(SM_CYSMICON);
if( !(hinst = LoadLibrary(pszPath)) ||
!(lpfnCPL = (APPLET_PROC)GetProcAddress((HMODULE)hinst, c_szCplAppletFunc)) ) {
RETAILMSG(TRUE, (TEXT("CPL: Failed to load '%s'\r\n"), pszPath));//————打印出错信息
goto Error;
}
// Call CPL for Init
lpfnCPL(NULL, CPL_INIT, 0L, 0L);
for(i=0; i<(int)lpfnCPL(NULL, CPL_GETCOUNT, 0L, 0L); i++)
{
NEWCPLINFO Newcpl;
HICON hiconLG, hiconSM;
Newcpl.dwSize = 0L;
Newcpl.dwFlags = 0L;
if(lpfnCPL(NULL, CPL_NEWINQUIRE, i, (LONG)(LPCPLINFO)&Newcpl) == -1)
{
// This is expected & harmless--results from componentization
DEBUGMSG(DEBUG_NOISY, (TEXT("CPL: Failed CPL_NEWINQUIRE for DLL=%s applet %d\r\n"), pszPath, i));
continue;
}
if (Newcpl.dwSize != sizeof(NEWCPLINFO)) {
DEBUGMSG(ERROR_ZONE, (TEXT("CPL: Incompatible struct size from '%s'\r\n"), pszPath));
goto Error;
}
hiconLG = Newcpl.hIcon;
hiconSM = 0;
if (Newcpl.lData) // so a small icon can be loaded (we do not have CopyImage())
hiconSM = (HICON)LoadImage(hinst, MAKEINTRESOURCE(Newcpl.lData),
IMAGE_ICON, cxMiniIcon, cyMiniIcon, LR_DEFAULTCOLOR);
if (! hiconSM || hiconLG == (HICON) 1)
hiconSM = hiconLG;
if (!hiconLG) {
DEBUGMSG(ERROR_ZONE, (TEXT("No Icon found for CPL '%s', Applet '%s'\r\n"),pszPath, Newcpl.szName));
continue;
}else if (hiconLG == (HICON) 1) {
DEBUGMSG(DEBUG_NOISY, (TEXT("Icon=1. Continue...\r\n")));
continue;
}else {
if (ImageList_AddIcon(himlLarge, hiconLG) == -1 ||
ImageList_AddIcon(himlSmall, hiconSM) == -1) {
DEBUGMSG(ERROR_ZONE, (L"Error: Load icon for applet='%s' \r\n", Newcpl.szName));
goto Error;
}
}
DestroyIcon(hiconLG);
DestroyIcon(hiconSM);
if (!GetMoreMem())
goto Error;
rgAppletsData[nCPL_files].nApplet = i;
lstrcpy(rgAppletsData[nCPL_files].szAppletName, Newcpl.szName);
lstrcpy(rgAppletsData[nCPL_files].szDesc, Newcpl.szInfo);
lstrcpy(rgAppletsData[nCPL_files].szDllName, pszPath);
nCPL_files++;
lpfnCPL(NULL, CPL_STOP, i, Newcpl.lData);
DEBUGMSG(DEBUG_NOISY, (TEXT("Found applet='%s' index=%d dllpath=%s \r\n"), Newcpl.szName,nCPL_files, pszPath));
}
lpfnCPL(NULL, CPL_EXIT, 0L, 0L);
if (hinst) FreeLibrary(hinst);
return TRUE;
Error:
switch (GetLastError()) {
case ERROR_OUTOFMEMORY:
case ERROR_NOT_ENOUGH_MEMORY:
MessageBox(hwndParent, CELOADSZ(IDS_OUTOFMEMORY), CELOADSZ(IDS_TITLE), MB_OK|MB_ICONEXCLAMATION);
break;
}
return FALSE;
}