⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mlplugin.cpp

📁 这是一个用于歌词下载、上传、匹配的源代码
💻 CPP
字号:
#include "MlPlugin.h"
#include <shlobj.h>

HINSTANCE		g_hInstance = NULL;
HMODULE			g_hModMiniLyrics = NULL;
CMLService		g_MLService;
HWND			g_hwndPlayer = NULL;
PlayerServiceEntry g_PlayerEntry;
char			g_szWorkingFolder[MAX_PATH];

IPlayer		*g_pPlayer = NULL;

// PURPOSE   : Get full task save file name by task name.
//
// PARAMETER: 
//      szPath is the path that returned: format is like : "c:\\antivirus\\"
BOOL GetProgramPath(TCHAR szPath[], HINSTANCE hInstance/* = NULL*/)
{
	__try
	{
		int nLen;

		nLen = GetModuleFileName(hInstance, szPath, MAX_PATH);
		nLen --;
		while (nLen >= 0 && szPath[nLen] != '\\')
			nLen --;
		if (nLen < 0)
			return FALSE;

		szPath[nLen + 1] = '\0';
	}
	__except (EXCEPTION_EXECUTE_HANDLER)
	{
		return FALSE;
	}

	return TRUE;
}

BOOL WritePrivateProfileInt(
							LPCTSTR lpAppName,  // section name
							LPCTSTR lpKeyName,  // key name
							int nValue,			// int to add
							LPCTSTR lpFileName  // initialization file
							)
{
	TCHAR	szBuffer[16];

	wsprintf(szBuffer, "%d", nValue);
	return WritePrivateProfileString(lpAppName, lpKeyName, szBuffer, lpFileName);
}

BOOL InitMiniLyricsPlugin(HINSTANCE hInst, IPlayer *pPlayer)
{
	char	szMiniLyricsDll[MAX_PATH];
	char	szPlayerIni[MAX_PATH];
	BOOL	bNoPrompt;
	char	szMsg[256];
	FUNMiniLyricsInitEntryPoint	funMLInitEntryPoint;

	g_hInstance = hInst;
	g_pPlayer = pPlayer;

	g_PlayerEntry.uVersion = ML_PLAYER_IF_VERSION;
	g_PlayerEntry.uSize = sizeof(g_PlayerEntry);
	g_PlayerEntry.funPlayerService = PlayerImpService;

	GetProgramPath(szPlayerIni, g_hInstance);
	strcat(szPlayerIni, "MLPlugin.ini");

	bNoPrompt = GetPrivateProfileInt("MiniLyrics", "NoPrompt", FALSE, szPlayerIni);

	GetPrivateProfileString("MiniLyrics", "WorkingFolder", "", g_szWorkingFolder, MAX_PATH, szPlayerIni);
	if (g_szWorkingFolder[0] == '\0')
		GetProgramPath(g_szWorkingFolder, g_hInstance);
	DirStringFormat(g_szWorkingFolder);

	//
	// 是否需要提示?
	strcpy(szMiniLyricsDll, g_szWorkingFolder);
	strcat(szMiniLyricsDll, "MiniLyrics.dll");
	if (!IsFileExist(szMiniLyricsDll))
	{
		strcpy(szMsg, "Can't Find MiniLyrics.dll, Please Install MiniLyrics Again!");
		goto INIT_FAILED;
	}

	g_hModMiniLyrics = LoadLibrary(szMiniLyricsDll);
	if (!g_hModMiniLyrics)
	{
		wsprintf(szMsg, "Load MiniLyrics dynamic library: %s FAILED!", szMiniLyricsDll);
		goto INIT_FAILED;
	}

	funMLInitEntryPoint = (FUNMiniLyricsInitEntryPoint)GetProcAddress(g_hModMiniLyrics, "MiniLyricsInitEntryPoint");
	assert(funMLInitEntryPoint);
	if (funMLInitEntryPoint)
	{
		MLServiceEntry	*pMLService;

		pMLService = funMLInitEntryPoint(&g_PlayerEntry);
		if (!pMLService)
			return FALSE;

		if (!g_MLService.SetEntryPoint(pMLService))
			return FALSE;
	}
	else
	{
		strcpy(szMsg, "Get Minilyrics.dll entry point FAILED!");
		goto INIT_FAILED;
	}

	// Initialize minilyrics's all module
	if (!g_MLService.Init(g_hModMiniLyrics))
		return FALSE;

	return TRUE;

INIT_FAILED:
	if (!bNoPrompt)
	{
		// 提示给用户
		MessageBox(g_hwndPlayer, szMsg, "MiniLyrics", MB_OK);
		WritePrivateProfileInt("MiniLyrics", "NoPrompt", TRUE, szPlayerIni);
	}
	return FALSE;
}

// 安全的字符串拷贝,如果超出长度范围,则进行截断
char *strcpy_safe(char *strDestination, int nLenMax, const char *strSource)
{
	char	*cp = strDestination;
	char	*cpEnd = strDestination + nLenMax - 1;

	for (; cp < cpEnd && *strSource; cp++, strSource++)
	{
		*cp = *strSource;
	}

	*cp = '\0';

	return(strDestination);
}


// PURPOSE: to judege whether the specified file or path exist
//
// PARAMETERS:
//      szFileName - the file or path
//
BOOL IsFileExist(LPCTSTR szFileName)
{
	return (GetFileAttributes(szFileName) != -1);
}

// COMMENT:
//		将目录字符串格式化为末尾带'\\'的
void DirStringFormat(LPTSTR	szDir)
{
	int		nLen;

	nLen = strlen(szDir);
	if (nLen > 0)
	{
		if (szDir[nLen - 1] != '\\')
		{
			szDir[nLen] = '\\';
			szDir[nLen + 1] = '\0';
		}
	}
}

long PlayerImpService(int nCommand, MLPARAM Param1, MLPARAM Param2)
{
	if (!g_pPlayer)
		return -1;
	switch(nCommand)
	{
	case cmdPlay:
		g_pPlayer->Play();
		break;
	case cmdPause:
		g_pPlayer->Pause();
		break;
	case cmdPlayPause:
		g_pPlayer->PlayPause();
		break;
	case cmdStop:
		g_pPlayer->Stop();
		break;
	case cmdPrev:
		g_pPlayer->Prev();
		break;
	case cmdNext:
		g_pPlayer->Next();
		break;
	case cmdSeek:	// param1, seek pos, ms
		g_pPlayer->SeekTo(Param1);
		break;
	case cmdGetPos:	// param1, long * pos, ms
		{
			return g_pPlayer->GetPlayPos();
		}
		break;
	case cmdGetMediaLength:	// param1, long * length, ms
		{
			return g_pPlayer->GetMediaLength();
		}
		break;
	case cmdGetSourceMedia:	// param1, const char *buffer, param2, buffer length
		{
			char	*szBuffer;
			szBuffer = (char *)Param1;
			g_pPlayer->GetSourceMedia(szBuffer, Param2);
		}
		break;
	case cmdGetArtist:		// param1, const char *buffer, param2, buffer length
		{
			char	*szBuffer;
			szBuffer = (char *)Param1;
			g_pPlayer->GetArtist(szBuffer, Param2);
		}
		break;
	case cmdGetFullTitle:		// param1, const char *buffer, param2, buffer length
		{
			char	*szBuffer;
			szBuffer = (char *)Param1;
			g_pPlayer->GetFullTitle(szBuffer, Param2);
		}
		break;
	case cmdGetTitle:		// param1, const char *buffer, param2, buffer length
		{
			char	*szBuffer;
			szBuffer = (char *)Param1;
			g_pPlayer->GetTitle(szBuffer, Param2);
		}
		break;
	case cmdGetAlbum:		// param1, const char *buffer, param2, buffer length
		{
			char	*szBuffer;
			szBuffer = (char *)Param1;
			g_pPlayer->GetAlbum(szBuffer, Param2);
		}
		break;
	case cmdGetPlayerState:	// param1, long * player state,1-stop, 2-play, 3-pause
		{
			return g_pPlayer->GetPlayerState();
		}
		break;
	case cmdGetPlayerName:	// param1, const char *buffer, param2, buffer length
		{
			char	*szBuffer;
			szBuffer = (char *)Param1;
			g_pPlayer->GetPlayerName(szBuffer, Param2);
		}
		break;
	case cmdInit:			// init the player interface
		g_pPlayer->Init();
		break;
	case cmdQuit:			// quit the player interface
		g_pPlayer->Quit();
		break;
	// for winamp2
	case cmdGetCurSkinPath:	// param1, const char *buffer, param2, buffer length
		{
			char	*szBuffer;
			szBuffer = (char *)Param1;
			g_pPlayer->GetCurSkinPath(szBuffer, Param2);
		}
		break;
	case cmdGetProxy:	// param1, const char *buffer, param2, buffer length
		{
			char	*szBuffer;
			szBuffer = (char *)Param1;
			g_pPlayer->GetProxy(szBuffer, Param2);
		}
		break;
	case cmdGetMainWnd:
		return (long)g_pPlayer->GetMainWnd();
	case cmdHasVideo:
		return (long)g_pPlayer->HasVideo();
	case cmdGetPlayerPlugInstance:
		return (long)g_hInstance;
	case cmdCodePageChanged:
		g_pPlayer->OnCodePageChanged(DWORD(Param1));
		break;
	case cmdGetPluginParentWnd:
		return (long)g_pPlayer->GetPluginParentWnd((RECT*)Param1);
	case notifySkinCreated:
		g_pPlayer->OnNotifySkinCreated();
		return 1;
	case cmdSetTimeUpdateFreq:
		// set play time postion's update frequency
		// 0: slow, 1 : normal: 2: fast
		g_pPlayer->SetTimeUpdateFreq(Param1);
	default:
		// unknonw command
		{
			TCHAR	szMsg[256];
			wsprintf(szMsg, "Unprocessed player control message: %d", nCommand);
			g_MLService.Log(szMsg);
			return -1;
		}
		break;
	}

	return 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -