1
Разработка / Development / Re: Как узнать текущую песню?
« on: August 09, 2012, 11:54:09 »
В общем вот реализация на C++:
Code: [Select]
#include <Windows.h>
#include <stdio.h>
#define AIMP2_RemoteClass L"AIMP2_RemoteInfo"
#define AIMP2_RemoteClassSize 2048
#pragma pack(push, 1)
typedef struct _AIMP2FileInfo
{
DWORD cbSizeOf;
//
BOOL nActive;
DWORD nBitRate;
DWORD nChannels;
DWORD nDuration;
INT64 nFileSize;
DWORD nRating;
DWORD nSampleRate;
DWORD nTrackID;
//
DWORD nAlbumLen;
DWORD nArtistLen;
DWORD nDateLen;
DWORD nFileNameLen;
DWORD nGenreLen;
DWORD nTitleLen;
//
PWCHAR sAlbum;
PWCHAR sArtist;
PWCHAR sDate;
PWCHAR sFileName;
PWCHAR sGenre;
PWCHAR sTitle;
} AIMP2FileInfo, *PAIMP2FileInfo;
#pragma pack(pop)
int __cdecl
wmain()
{
HANDLE hAIMP;
PAIMP2FileInfo aimpFileInfo;
LPWSTR pBuff;
hAIMP = OpenFileMapping(FILE_MAP_READ, FALSE, AIMP2_RemoteClass);
if ( !hAIMP )
{
wprintf(L"error %d\r\n", GetLastError());
return 1;
}
aimpFileInfo = (PAIMP2FileInfo)MapViewOfFile(hAIMP, FILE_MAP_READ, 0, 0, AIMP2_RemoteClassSize);
if ( aimpFileInfo )
{
WCHAR buff[256];
#define WRITE_TO_BUFF(x) \
memcpy(buff, pBuff, (x) * 2); \
buff[x] = '\0'; \
pBuff += (x);
// В pBuff вся остальная информация, разбивайте её испольуя поля nAlbumLen (и т.п.)
// из структуры aimpFileInfo
pBuff = (LPWSTR)((PBYTE)aimpFileInfo + aimpFileInfo->cbSizeOf);
wprintf(L"%d Hz, %d kbps, %d chans\r\n", aimpFileInfo->nSampleRate, aimpFileInfo->nBitRate, aimpFileInfo->nChannels);
wprintf(L"%d seconds, %d bytes\r\n", aimpFileInfo->nDuration / 1000, aimpFileInfo->nFileSize);
WRITE_TO_BUFF(aimpFileInfo->nAlbumLen)
wprintf(L"Album: %s\r\n", buff);
WRITE_TO_BUFF(aimpFileInfo->nArtistLen)
wprintf(L"Artist: %s\r\n", buff);
WRITE_TO_BUFF(aimpFileInfo->nDateLen)
wprintf(L"Date: %s\r\n", buff);
WRITE_TO_BUFF(aimpFileInfo->nFileNameLen)
wprintf(L"File name: %s\r\n", buff);
WRITE_TO_BUFF(aimpFileInfo->nGenreLen)
wprintf(L"Genre: %s\r\n", buff);
WRITE_TO_BUFF(aimpFileInfo->nTitleLen)
wprintf(L"Title: %s\r\n", buff);
UnmapViewOfFile(aimpFileInfo);
}
CloseHandle(hAIMP);
system("pause");
return 0;
}