Exemple #1
0
static int MainInit(WPARAM, LPARAM)
{
	// TopToolbar support
	HookEvent(ME_TTB_MODULELOADED, InitTopToolbarButton);

	InitFrames();
	return 0;
}
Exemple #2
0
static int MainInit(WPARAM wparam,LPARAM lparam)
{
	// initialize icons
	InitIcons();

	// TopToolbar support
	HookEvent(ME_TTB_MODULELOADED, InitTopToolbarButton);

	InitFrames();
	return 0;
}
// Hook called after init
static int MainInit(WPARAM wparam,LPARAM lparam) 
{
	InitProtocolData();

	// Add options to menu
	CLISTMENUITEM mi = { sizeof(mi) };
	mi.popupPosition = 500050000;
	mi.flags = CMIF_ROOTPOPUP | CMIF_TCHAR;
	mi.icolibItem = LoadSkinnedIconHandle(SKINICON_OTHER_USERDETAILS);
	mi.ptszName = LPGENT("My Details");
	HANDLE hMenuRoot = Menu_AddMainMenuItem(&mi);

	mi.flags = CMIF_CHILDPOPUP | CMIF_TCHAR;
	mi.ptszPopupName = (TCHAR *)hMenuRoot;
	mi.popupPosition = 0;
	mi.icolibItem = NULL;

	if (protocols->CanSetAvatars()) {
		mi.position = 100001;
		mi.ptszName = LPGENT("Set My Avatar...");
		CreateServiceFunction("MENU_" MS_MYDETAILS_SETMYAVATARUI, Menu_SetMyAvatarUI);
		mi.pszService = "MENU_" MS_MYDETAILS_SETMYAVATARUI;
		Menu_AddMainMenuItem(&mi);
	}

	mi.position = 100002;
	mi.ptszName = LPGENT("Set My Nickname...");
	CreateServiceFunction("MENU_" MS_MYDETAILS_SETMYNICKNAMEUI, Menu_SetMyNicknameUI);
	mi.pszService = "MENU_" MS_MYDETAILS_SETMYNICKNAMEUI;
	Menu_AddMainMenuItem(&mi);

	mi.position = 100003;
	mi.ptszName = LPGENT("Set My Status Message...");
	CreateServiceFunction("MENU_" MS_MYDETAILS_SETMYSTATUSMESSAGEUI, Menu_SetMyStatusMessageUI);
	mi.pszService = "MENU_" MS_MYDETAILS_SETMYSTATUSMESSAGEUI;
	Menu_AddMainMenuItem(&mi);

	// Set protocols to show frame
	mi.position = 200001;
	mi.ptszName = LPGENT("Show next account");
	mi.pszService = MS_MYDETAILS_SHOWNEXTPROTOCOL;
	Menu_AddMainMenuItem(&mi);

	InitFrames();

	if ( Skin_GetIcon("LISTENING_TO_ICON") == NULL)
		Icon_Register(hInst, LPGEN("Contact List"), iconList, 1);

	Icon_Register(hInst, LPGEN("My Details"), iconList+1, SIZEOF(iconList)-1);
	return 0;
}
Exemple #4
0
// Hook called after init
static int MainInit(WPARAM, LPARAM)
{
	g_bAvsExist = ServiceExists(MS_AV_GETMYAVATAR) != 0;
	g_bFramesExist = ServiceExists(MS_CLIST_FRAMES_ADDFRAME) != 0;

	InitProtocolData();

	// Add options to menu
	CLISTMENUITEM mi = { sizeof(mi) };
	mi.popupPosition = 500050000;
	mi.flags = CMIF_ROOTPOPUP | CMIF_TCHAR;
	mi.icolibItem = LoadSkinnedIconHandle(SKINICON_OTHER_USERDETAILS);
	mi.ptszName = LPGENT("My details");
	HANDLE hMenuRoot = Menu_AddMainMenuItem(&mi);

	mi.flags = CMIF_CHILDPOPUP | CMIF_TCHAR;
	mi.ptszPopupName = (TCHAR *)hMenuRoot;
	mi.popupPosition = 0;
	mi.icolibItem = NULL;

	if (protocols->CanSetAvatars()) {
		mi.position = 100001;
		mi.ptszName = LPGENT("Set my avatar...");
		CreateServiceFunction("MENU_" MS_MYDETAILS_SETMYAVATARUI, Menu_SetMyAvatarUI);
		mi.pszService = "MENU_" MS_MYDETAILS_SETMYAVATARUI;
		Menu_AddMainMenuItem(&mi);
	}

	mi.position = 100002;
	mi.ptszName = LPGENT("Set my nickname...");
	CreateServiceFunction("MENU_" MS_MYDETAILS_SETMYNICKNAMEUI, Menu_SetMyNicknameUI);
	mi.pszService = "MENU_" MS_MYDETAILS_SETMYNICKNAMEUI;
	Menu_AddMainMenuItem(&mi);

	mi.position = 100003;
	mi.ptszName = LPGENT("Set my status message...");
	CreateServiceFunction("MENU_" MS_MYDETAILS_SETMYSTATUSMESSAGEUI, Menu_SetMyStatusMessageUI);
	mi.pszService = "MENU_" MS_MYDETAILS_SETMYSTATUSMESSAGEUI;
	Menu_AddMainMenuItem(&mi);

	// Set protocols to show frame
	mi.position = 200001;
	mi.ptszName = LPGENT("Show next account");
	mi.pszService = MS_MYDETAILS_SHOWNEXTPROTOCOL;
	Menu_AddMainMenuItem(&mi);

	InitFrames();
	return 0;
}
void wxStackWalker::ProcessFrames(size_t skip)
{
    wxStackFrame frames[MAX_FRAMES];

    if (!ms_symbols || !m_depth)
        return;

    // we have 3 more "intermediate" frames which the calling code doesn't know
    // about, account for them
    skip += 3;

    // call addr2line only once since this call may be very slow
    // (it has to load in memory the entire EXE of this app which may be quite
    //  big, especially if it contains debug info and is compiled statically!)
    int towalk = InitFrames(frames, m_depth - skip, &ms_addresses[skip], &ms_symbols[skip]);

    // now do user-defined operations on each frame
    for ( int n = 0; n < towalk - (int)skip; n++ )
        OnStackFrame(frames[n]);
}
Exemple #6
0
result MultiFrame::Init(
    const   int     &device_id,
    const   int     &temporal_radius,
    const   int     &width, 
    const   int     &height,
    const   int     &src_pitch,
    const   int     &dst_pitch,
    const   float   &h,
    const   int     &sample_expand,
    const   int     &linear,
    const   int     &correction,
    const   int     &balanced) {

    if (device_id >= g_device_count) return FILTER_ERROR;

    result status = FILTER_OK;

    device_id_          = device_id;
    temporal_radius_    = temporal_radius;
    width_              = width;    
    height_             = height;    
    src_pitch_          = src_pitch;
    dst_pitch_          = dst_pitch;
    region_width_       = width;
    region_height_      = 8;
    h_                  = 1.f/h;
    cq_                 = g_devices[device_id_].cq();

    if (width_ == 0 || height_ == 0 || src_pitch_ == 0 || dst_pitch_ == 0 || h == 0 ) 
        return FILTER_INVALID_PARAMETER;

    alpha_set_size_ = GetAlphaSetSize(temporal_radius, sample_expand);

    status = InitBuffers(sample_expand);
    if (status != FILTER_OK) return status;
    status = InitKernels(sample_expand, linear, correction, balanced);
    if (status != FILTER_OK) return status;
    status = InitFrames();

    return status;                        
}
void wxStackWalker::ProcessFrames(size_t skip)
{
    wxStackFrame frames[MAX_FRAMES];

    if (!ms_symbols || !m_depth)
        return;

    // we are another level down from Walk(), so adjust the number of stack
    // frames to skip accordingly
    skip += 1;

    // call addr2line only once since this call may be very slow
    // (it has to load in memory the entire EXE of this app which may be quite
    //  big, especially if it contains debug info and is compiled statically!)
    int numFrames = InitFrames(frames, m_depth - skip,
                               &ms_addresses[skip], &ms_symbols[skip]);

    // now do user-defined operations on each frame
    for ( int n = 0; n < numFrames; n++ )
        OnStackFrame(frames[n]);
}
// Called when all the modules are loaded
static INT_PTR ModulesLoaded(WPARAM wParam, LPARAM lParam) 
{
	// add our modules to the KnownModules list
	CallService("DBEditorpp/RegisterSingleModule", (WPARAM) MODULE_NAME, 0);

	if (ServiceExists(MS_MC_GETPROTOCOLNAME))
		metacontacts_proto = (char *) CallService(MS_MC_GETPROTOCOLNAME, 0, 0);

    // updater plugin support
    if(ServiceExists(MS_UPDATE_REGISTER))
	{
		Update upd = {0};
		char szCurrentVersion[30];

		upd.cbSize = sizeof(upd);
		upd.szComponentName = pluginInfo.shortName;

		upd.szUpdateURL = UPDATER_AUTOREGISTER;

		upd.szBetaVersionURL = "http://pescuma.org/miranda/voiceservice_version.txt";
		upd.szBetaChangelogURL = "http://pescuma.org/miranda/voiceservice#Changelog";
		upd.pbBetaVersionPrefix = (BYTE *)"Voice Service ";
		upd.cpbBetaVersionPrefix = strlen((char *)upd.pbBetaVersionPrefix);
#ifdef UNICODE
		upd.szBetaUpdateURL = "http://pescuma.org/miranda/voiceserviceW.zip";
#else
		upd.szBetaUpdateURL = "http://pescuma.org/miranda/voiceservice.zip";
#endif

		upd.pbVersion = (BYTE *)CreateVersionStringPlugin((PLUGININFO*) &pluginInfo, szCurrentVersion);
		upd.cpbVersion = strlen((char *)upd.pbVersion);

        CallService(MS_UPDATE_REGISTER, 0, (LPARAM)&upd);
	}

	// Init icons
	{
		IcoLib_Register(mainIcons[0], _T("Voice Calls"), _T("Main"), IDI_MAIN);
		IcoLib_Register(mainIcons[1], _T("Voice Calls"), _T("Dialpad"), IDI_DIALPAD);
		IcoLib_Register(mainIcons[2], _T("Voice Calls"), _T("Secure Overlay"), IDI_SECURE);

		int i;
		for(i = 0; i < MAX_REGS(stateNames); i++)
			IcoLib_Register(stateIcons[i], _T("Voice Calls"), stateNames[i], IDI_TALKING + i);

		for(i = 0; i < MAX_REGS(actionNames); i++)
			IcoLib_Register(actionIcons[i], _T("Voice Calls"), actionNames[i], IDI_ACTION_CALL + i);

		hHooks.push_back( HookEvent(ME_SKIN2_ICONSCHANGED, IconsChanged) );
	}

	// Init fonts
	{
		FontIDT fi = {0};
		fi.cbSize = sizeof(fi);
		lstrcpyn(fi.group, TranslateT("Voice Calls"), MAX_REGS(fi.group));
		strncpy(fi.dbSettingsGroup, MODULE_NAME, MAX_REGS(fi.dbSettingsGroup));

		for (int i = 0; i < NUM_FONTS; i++)
		{
			fi.order = i;
			lstrcpyn(fi.name, stateNames[i], MAX_REGS(fi.name));
			strncpy(fi.prefix, stateIcons[i], MAX_REGS(fi.prefix));

			CallService(MS_FONT_REGISTERT, (WPARAM) &fi, 0);
		}

		ReloadFont(0,0);
		hHooks.push_back( HookEvent(ME_FONT_RELOAD, ReloadFont) );
	}

	// Init bkg color
	{
		ColourIDT ci = {0};
		ci.cbSize = sizeof(ci);
		lstrcpyn(ci.group, TranslateT("Voice Calls"), MAX_REGS(ci.group));
		lstrcpyn(ci.name, TranslateT("Background"), MAX_REGS(ci.name));
		strncpy(ci.dbSettingsGroup, MODULE_NAME, MAX_REGS(ci.dbSettingsGroup));
		strncpy(ci.setting, "BkgColor", MAX_REGS(ci.setting));
		ci.defcolour = GetSysColor(COLOR_BTNFACE);

		CallService(MS_COLOUR_REGISTERT, (WPARAM) &ci, 0);

		ReloadColor(0,0);
		hHooks.push_back( HookEvent(ME_COLOUR_RELOAD, ReloadColor) );
	}

	// Init history
	if (ServiceExists(MS_HISTORYEVENTS_REGISTER))
	{
		char *templates[] = {
			"Talking\nCall from %number% has started\n%number%\tOther side of the call",
			"Ringing\nCall from %number% is ringing\n%number%\tOther side of the call",
			"Calling\nCalling %number%\n%number%\tOther side of the call",
			"On Hold\nCall from %number% is on hold\n%number%\tOther side of the call",
			"Ended\nCall from %number% has ended\n%number%\tOther side of the call",
			"Busy\n%number% is busy\n%number%\tOther side of the call",
		};

		HISTORY_EVENT_HANDLER heh = {0};
		heh.cbSize = sizeof(heh);
		heh.module = MODULE_NAME;
		heh.name = "VoiceCall";
		heh.description = "Voice calls";
		heh.eventType = EVENTTYPE_VOICE_CALL;
		heh.defaultIconName = "vca_call";
		heh.supports = HISTORYEVENTS_FORMAT_TCHAR;
		heh.flags = HISTORYEVENTS_FLAG_SHOW_IM_SRMM 
					| HISTORYEVENTS_FLAG_USE_SENT_FLAG
					| HISTORYEVENTS_REGISTERED_IN_ICOLIB;
		heh.templates = templates;
		heh.numTemplates = MAX_REGS(templates);
		CallService(MS_HISTORYEVENTS_REGISTER, (WPARAM) &heh, 0);
	}

	InitOptions();
	InitFrames();

	// Add menu items
	CLISTMENUITEM mi = {0};
	mi.cbSize = sizeof(mi);
	mi.position = -2000020000;
	mi.flags = CMIF_TCHAR;

	HICON icons[MAX_REGS(actionIcons)];
	for(int i = 0; i < MAX_REGS(actionIcons); ++i)
		icons[i] = IcoLib_LoadIcon(actionIcons[i]);

	CreateServiceFunction(MS_VOICESERVICE_CM_CALL, Service_Call);
	mi.ptszName = actionNames[ACTION_CALL];
	mi.hIcon = icons[ACTION_CALL];
	mi.pszService = MS_VOICESERVICE_CM_CALL;
	hCMCall = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM) &mi);

	CreateServiceFunction(MS_VOICESERVICE_CM_ANSWER, CMAnswer);
	mi.position++;
	mi.ptszName = actionNames[ACTION_ANSWER];
	mi.hIcon = icons[ACTION_ANSWER];
	mi.pszService = MS_VOICESERVICE_CM_ANSWER;
	hCMAnswer = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM) &mi);

	CreateServiceFunction(MS_VOICESERVICE_CM_HOLD, CMHold);
	mi.position++;
	mi.position++;
	mi.ptszName = actionNames[ACTION_HOLD];
	mi.hIcon = icons[ACTION_HOLD];
	mi.pszService = MS_VOICESERVICE_CM_HOLD;
	hCMHold = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM) &mi);

	CreateServiceFunction(MS_VOICESERVICE_CM_DROP, CMDrop);
	mi.position++;
	mi.ptszName = actionNames[ACTION_DROP];
	mi.hIcon = icons[ACTION_DROP];
	mi.pszService = MS_VOICESERVICE_CM_DROP;
	hCMDrop = (HANDLE) CallService(MS_CLIST_ADDCONTACTMENUITEM, 0, (LPARAM) &mi);

	for(i = 0; i < MAX_REGS(actionIcons); ++i)
		IcoLib_ReleaseIcon(icons[i]);

	hHooks.push_back( HookEvent(ME_CLIST_PREBUILDCONTACTMENU, PreBuildContactMenu) );

	// Util services
	CreateServiceFunction(MS_VOICESERVICE_CALL, Service_Call);
	CreateServiceFunction(MS_VOICESERVICE_CAN_CALL, Service_CanCall);

	// Sounds
	SKINSOUNDDESCEX ssd = {0};
	ssd.cbSize = sizeof(ssd);
	ssd.pszSection = "Voice Calls";

	{
		for(int i = 0; i < MAX_REGS(sounds); ++i)
		{
			ssd.pszName = sounds[i].name;
			ssd.pszDescription = sounds[i].description;
			CallService(MS_SKIN_ADDNEWSOUND, 0, (LPARAM)&ssd);
		}
	}

	SetTimer(NULL, 0, 1000, ClearOldVoiceCalls);

	// Accounts
	int numAccounts;
	PROTOACCOUNT **accounts;
	ProtoEnumAccounts(&numAccounts, &accounts);
	for(i = 0; i < numAccounts; ++i)
		AddAccount(accounts[i]);

	hHooks.push_back( HookEvent(ME_PROTO_ACCLISTCHANGED, AccListChanged) );

	return 0;
}
Exemple #9
0
// Hook called after init
static int MainInit(WPARAM wparam,LPARAM lparam) 
{	
	if ( mir_skins_getInterface(&mski) != 0 )
	{
		MessageBox(NULL, _T("MyDetails needs Skins plugin in order to work"), _T("MyDetails"), MB_OK | MB_ICONERROR);
		return 0;
	}
		
	if (CallService(MS_SKIN2_GETICON, 0, (LPARAM) "LISTENING_TO_ICON") == NULL) 
	{
		SKINICONDESC sid = {0};
		sid.cbSize = sizeof(SKINICONDESC);
		sid.ptszSection = "Contact List";
		sid.ptszDescription = "Listening to";
		sid.pszName = "LISTENING_TO_ICON";
		sid.hDefaultIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_LISTENINGTO));
		CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
	}
	
	{
		SKINICONDESC sid = {0};
		sid.cbSize = sizeof(SKINICONDESC);
		sid.ptszSection = "My Details";
		sid.ptszDescription = "Email";
		sid.pszName = "MYDETAILS_EMAIL";
		sid.hDefaultIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_EMAIL));
		CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
	}

	{
		SKINICONDESC sid = {0};
		sid.cbSize = sizeof(SKINICONDESC);
		sid.ptszSection = "My Details";
		sid.ptszDescription = "Previous protocol";
		sid.pszName = "MYDETAILS_PREV_PROTOCOL";
		sid.hDefaultIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_LEFT_ARROW));
		CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
	}
	
	{
		SKINICONDESC sid = {0};
		sid.cbSize = sizeof(SKINICONDESC);
		sid.ptszSection = "My Details";
		sid.ptszDescription = "Next protocol";
		sid.pszName = "MYDETAILS_NEXT_PROTOCOL";
		sid.hDefaultIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_RIGHT_ARROW));
		CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
	}

	{
		ColourID cid = {0};
		cid.cbSize = sizeof(ColourID);
		lstrcpynA(cid.group, "My Details", sizeof(cid.group));
		lstrcpynA(cid.name, "Background", sizeof(cid.name));
		lstrcpynA(cid.dbSettingsGroup, MODULE_NAME, sizeof(cid.dbSettingsGroup));
		lstrcpynA(cid.setting, "BackgroundColor", sizeof(cid.setting));
		cid.defcolour = GetSysColor(COLOR_BTNFACE);

		CallService(MS_COLOUR_REGISTER, (WPARAM) &cid, 0);

		ColorChanged(0,0);

		hColorChangedHook = HookEvent(ME_COLOUR_RELOAD, ColorChanged);
	}
	
	dialog = new SkinDialog("MyDetails", "My Details", MODULE_NAME);
	if (!dialog->isValid())
	{
		MessageBox(NULL, _T("MyDetails could not create dialog. Check if default skin is installed"), _T("MyDetails"), MB_OK | MB_ICONERROR);
		return 0;
	}

	dialog->addImageField("avatar", "Avatar");
	dialog->addTextField("nickname", "Nickname");
	dialog->addTextField("protocol", "Protocol");
	dialog->addIconField("email_icon", "Unread Email Count Icon");
	dialog->addTextField("email", "Unread Email Count");
	dialog->addIconField("status_icon", "Status Icon");
	dialog->addTextField("status_name", "Status");
	dialog->addTextField("status_msg", "Status Message");
	dialog->addIconField("listening_icon", "Listening To Icon");
	dialog->addTextField("listening", "Listening To");
	dialog->addIconField("next_proto", "Next Protocol");
	dialog->addIconField("prev_proto", "Previous Protocol");
	dialog->setSkinChangedCallback(SkinChanged, NULL);
	dialog->finishedConfiguring();


	InitProtocolData();

	// Add options to menu
	CLISTMENUITEM mi;

	if (protocols->CanSetAvatars())
	{
		ZeroMemory(&mi,sizeof(mi));
		mi.cbSize = sizeof(mi);
		mi.flags = 0;
		mi.popupPosition = 500050000;
		mi.pszPopupName = Translate("My Details");
		mi.position = 100001;
		mi.pszName = Translate("Set My Avatar...");
		CreateServiceFunction("MENU_" MS_MYDETAILS_SETMYAVATARUI, Menu_SetMyAvatarUI);
		mi.pszService = "MENU_" MS_MYDETAILS_SETMYAVATARUI;

		CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi);
	}

	ZeroMemory(&mi,sizeof(mi));
	mi.cbSize = sizeof(mi);
	mi.flags = 0;
	mi.popupPosition = 500050000;
	mi.pszPopupName = Translate("My Details");
	mi.position = 100002;
	mi.pszName = Translate("Set My Nickname...");
	CreateServiceFunction("MENU_" MS_MYDETAILS_SETMYNICKNAMEUI, Menu_SetMyNicknameUI);
	mi.pszService = "MENU_" MS_MYDETAILS_SETMYNICKNAMEUI;

	CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi);

	ZeroMemory(&mi,sizeof(mi));
	mi.cbSize = sizeof(mi);
	mi.flags = 0;
	mi.popupPosition = 500050000;
	mi.pszPopupName = Translate("My Details");
	mi.position = 100003;
	mi.pszName = Translate("Set My Status Message...");
	CreateServiceFunction("MENU_" MS_MYDETAILS_SETMYSTATUSMESSAGEUI, Menu_SetMyStatusMessageUI);
	mi.pszService = "MENU_" MS_MYDETAILS_SETMYSTATUSMESSAGEUI;

	CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi);

	// Set protocols to show frame
	ZeroMemory(&mi,sizeof(mi));
	mi.cbSize = sizeof(mi);
	mi.flags = 0;
	mi.popupPosition = 500050000;
	mi.pszPopupName = Translate("My Details");
	mi.position = 200001;
	mi.pszName = Translate("Show next protocol");
	mi.pszService = MS_MYDETAILS_SHOWNEXTPROTOCOL;

	CallService(MS_CLIST_ADDMAINMENUITEM,0,(LPARAM)&mi);

	InitFrames();

    // updater plugin support
    if(ServiceExists(MS_UPDATE_REGISTER))
	{
		Update upd = {0};
		char szCurrentVersion[30];

		upd.cbSize = sizeof(upd);
		upd.szComponentName = pluginInfo.shortName;

		upd.szUpdateURL = UPDATER_AUTOREGISTER;

		upd.szBetaVersionURL = "http://svn.berlios.de/svnroot/repos/mgoodies/trunk/mydetails/Docs/mydetails_version.txt";
		upd.szBetaChangelogURL = "http://svn.berlios.de/svnroot/repos/mgoodies/trunk/mydetails/Docs/mydetails_changelog.txt";
		upd.pbBetaVersionPrefix = (BYTE *)"My Details ";
		upd.cpbBetaVersionPrefix = strlen((char *)upd.pbBetaVersionPrefix);
		upd.szBetaUpdateURL = "http://pescuma.googlecode.com/files/mydetails.%VERSION%.zip";

		upd.pbVersion = (BYTE *)CreateVersionStringPlugin((PLUGININFO*) &pluginInfo, szCurrentVersion);
		upd.cpbVersion = strlen((char *)upd.pbVersion);

        CallService(MS_UPDATE_REGISTER, 0, (LPARAM)&upd);
	}

    return 0;
}