int LoadContactListModule2(void) { HookEvent(ME_SYSTEM_MODULESLOADED, ContactListModulesLoaded); HookEvent(ME_PROTO_ACCLISTCHANGED, ContactListAccountsChanged); HookEvent(ME_DB_CONTACT_SETTINGCHANGED, ContactSettingChanged); HookEvent(ME_DB_CONTACT_ADDED, ContactAdded); HookEvent(ME_DB_CONTACT_DELETED, ContactDeleted); HookEvent(ME_PROTO_ACK, ProtocolAck); hContactDoubleClicked = CreateHookableEvent(ME_CLIST_DOUBLECLICKED); hContactIconChangedEvent = CreateHookableEvent(ME_CLIST_CONTACTICONCHANGED); LoadCluiServices(); CreateServiceFunction(MS_CLIST_CONTACTDOUBLECLICKED, ContactDoubleClicked); CreateServiceFunction(MS_CLIST_CONTACTFILESDROPPED, ContactFilesDropped); CreateServiceFunction(MS_CLIST_GETSTATUSMODEDESCRIPTION, GetStatusModeDescription); CreateServiceFunction(MS_CLIST_GETCONTACTDISPLAYNAME, GetContactDisplayName); CreateServiceFunction(MS_CLIST_INVALIDATEDISPLAYNAME, InvalidateDisplayName); CreateServiceFunction(MS_CLIST_CONTACTSCOMPARE, CompareContacts); CreateServiceFunction(MS_CLIST_CONTACTCHANGEGROUP, ContactChangeGroup); CreateServiceFunction(MS_CLIST_SHOWHIDE, ShowHideStub); CreateServiceFunction(MS_CLIST_SETHIDEOFFLINE, SetHideOfflineStub); CreateServiceFunction(MS_CLIST_DOCKINGPROCESSMESSAGE, Docking_ProcessWindowMessageStub); CreateServiceFunction(MS_CLIST_DOCKINGISDOCKED, Docking_IsDocked); CreateServiceFunction(MS_CLIST_HOTKEYSPROCESSMESSAGE, HotkeysProcessMessageStub); CreateServiceFunction(MS_CLIST_GETCONTACTICON, GetContactIcon); InitCListEvents(); InitGroupServices(); cli.pfnInitTray(); hCListImages = ImageList_Create(16, 16, ILC_MASK | ILC_COLOR32, 13, 0); HookEvent(ME_SKIN_ICONSCHANGED, CListIconsChanged); CreateServiceFunction(MS_CLIST_GETICONSIMAGELIST, GetIconsImageList); ImageList_AddIcon_NotShared(hCListImages, MAKEINTRESOURCE(IDI_BLANK)); //now all core skin icons are loaded via icon lib. so lets release them for (int i=0; i < SIZEOF(statusModeList); i++) ImageList_AddIcon_IconLibLoaded(hCListImages, skinIconStatusList[i]); //see IMAGE_GROUP... in clist.h if you add more images above here ImageList_AddIcon_IconLibLoaded(hCListImages, SKINICON_OTHER_GROUPOPEN); ImageList_AddIcon_IconLibLoaded(hCListImages, SKINICON_OTHER_GROUPSHUT); return 0; }
int LoadContactListModule(void) { /* HANDLE hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDFIRST, 0, 0); while (hContact!=NULL) { DBWriteContactSettingString(hContact, "CList", "StatusMsg", ""); hContact = (HANDLE) CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0); } */ HookEvent(ME_SYSTEM_SHUTDOWN,ContactListShutdownProc); HookEvent(ME_SYSTEM_MODULESLOADED,ContactListModulesLoaded); HookEvent(ME_OPT_INITIALISE,CListOptInit); HookEvent(ME_OPT_INITIALISE,SkinOptInit); hSettingChanged=HookEvent(ME_DB_CONTACT_SETTINGCHANGED,ContactSettingChanged); HookEvent(ME_DB_CONTACT_ADDED,ContactAdded); HookEvent(ME_DB_CONTACT_DELETED,ContactDeleted); hProtoAckHook=(HANDLE)HookEvent(ME_PROTO_ACK,ProtocolAck); hContactDoubleClicked=CreateHookableEvent(ME_CLIST_DOUBLECLICKED); hStatusModeChangeEvent=CreateHookableEvent(ME_CLIST_STATUSMODECHANGE); hContactIconChangedEvent=CreateHookableEvent(ME_CLIST_CONTACTICONCHANGED); CreateServiceFunction(MS_CLIST_CONTACTDOUBLECLICKED,ContactDoubleClicked); CreateServiceFunction(MS_CLIST_CONTACTFILESDROPPED,ContactFilesDropped); CreateServiceFunction(MS_CLIST_SETSTATUSMODE,SetStatusMode); CreateServiceFunction(MS_CLIST_GETSTATUSMODE,GetStatusMode); CreateServiceFunction(MS_CLIST_GETSTATUSMODEDESCRIPTION,GetStatusModeDescription); CreateServiceFunction(MS_CLIST_GETCONTACTDISPLAYNAME,GetContactDisplayName); CreateServiceFunction(MS_CLIST_INVALIDATEDISPLAYNAME,InvalidateDisplayName); CreateServiceFunction(MS_CLIST_TRAYICONPROCESSMESSAGE,TrayIconProcessMessage); CreateServiceFunction(MS_CLIST_PAUSEAUTOHIDE,TrayIconPauseAutoHide); CreateServiceFunction(MS_CLIST_CONTACTSCOMPARE,CompareContacts); CreateServiceFunction(MS_CLIST_CONTACTCHANGEGROUP,ContactChangeGroup); CreateServiceFunction(MS_CLIST_SHOWHIDE,ShowHide); CreateServiceFunction(MS_CLIST_SETHIDEOFFLINE,SetHideOffline); CreateServiceFunction(MS_CLIST_TOGGLEHIDEOFFLINE,ToggleHideOffline); CreateServiceFunction(MS_CLIST_DOCKINGPROCESSMESSAGE,Docking_ProcessWindowMessage); CreateServiceFunction(MS_CLIST_DOCKINGISDOCKED,Docking_IsDocked); CreateServiceFunction(MS_CLIST_HOTKEYSPROCESSMESSAGE,HotkeysProcessMessage); CreateServiceFunction(MS_CLIST_GETCONTACTICON,GetContactIcon); MySetProcessWorkingSetSize=(BOOL (WINAPI*)(HANDLE,SIZE_T,SIZE_T))GetProcAddress(GetModuleHandle(TEXT("kernel32")),"SetProcessWorkingSetSize"); hCListImages = ImageList_Create(16, 16, ILC_MASK|ILC_COLOR32, 32, 0); InitDisplayNameCache(&lContactsCache); InitCListEvents(); InitCustomMenus(); InitGroupServices(); InitTray(); { CLISTMENUITEM mi; ZeroMemory(&mi,sizeof(mi)); mi.cbSize=sizeof(mi); CreateServiceFunction("CList/DeleteContactCommand",MenuItem_DeleteContact); mi.position=2000070000; mi.flags=0; mi.hIcon=LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_DELETE)); mi.pszContactOwner=NULL; //on every contact mi.pszName=Translate("De&lete"); mi.pszService="CList/DeleteContactCommand"; CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi); CreateServiceFunction("CList/AddToListContactCommand",MenuItem_AddContactToList); mi.position=-2050000000; mi.flags=CMIF_NOTONLIST; mi.hIcon=LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_ADDCONTACT)); mi.pszName=Translate("&Add permanently to list"); mi.pszService="CList/AddToListContactCommand"; CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi); } HookEvent(ME_SKIN_ICONSCHANGED,CListIconsChanged); CreateServiceFunction(MS_CLIST_GETICONSIMAGELIST,GetIconsImageList); ImageList_AddIcon(hCListImages, LoadIcon(GetModuleHandle(NULL),MAKEINTRESOURCE(IDI_BLANK))); { int i; for(i=0;i<sizeof(statusModeList)/sizeof(statusModeList[0]);i++) ImageList_AddIcon(hCListImages, LoadSkinnedIcon(skinIconStatusList[i])); } //see IMAGE_GROUP... in clist.h if you add more images above here ImageList_AddIcon(hCListImages, LoadSkinnedIcon(SKINICON_OTHER_GROUPOPEN)); ImageList_AddIcon(hCListImages, LoadSkinnedIcon(SKINICON_OTHER_GROUPSHUT)); //InitGroupMenus(); return 0; }