T
Ich habe die Lösung gefunden und möchte das nicht vorenthalten:
// 1. Den Process ID bekommen, ohne den gehts net:
DWORD pid = NULL; // Speichert den Process ID
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 proc;
Process32First(snapshot, &proc);
CString s;
do{
s = proc.szExeFile;
if(s.Right(10) == "WINAMP.EXE") {
pid = proc.th32ProcessID;
break;
}
}while (TRUE == Process32Next(snapshot, &proc) );
ASSERT(pid != NULL);
CloseHandle(snapshot);
// Jetzt den Process zum lesen öffnen:
HANDLE hAmp = OpenProcess(PROCESS_VM_READ,false, pid);
//und lesen:
ReadProcessMemory( //Lesen
hAmp, // handle of the process whose memory is read
wp_sz, // address to start reading
tmp_buffer,// address of buffer to place read data
BUFF_SIZE-1,// number of bytes to read
NULL // address of number of bytes read
);
CloseHandle(hAmp);
Ich habe das gebraucht weil die WinAmp-API [link]http://www.winamp.com/nsdn/winamp2x/dev/sdk/api.jhtml[/link] den Namen von einem PlaylistItem nur als Pointer auf internen Speicher zurückgibt, also wäre es nur für Plugins(als DLL geladen) möglich. Daher für alle Interessierten, dieser Quelltext, ließt die ganze WinAMP PlayList aus, speichert sie in einem vector für char*
vector<char*>PlayList;
HWND hWinamp = FindWindow("Winamp v1.x",NULL);
ASSERT(hWinamp != NULL);
DWORD pid = NULL;
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 proc;
Process32First(snapshot, &proc);
CString s;
do{
s = proc.szExeFile;
if(s.Right(10) == "WINAMP.EXE"){
pid = proc.th32ProcessID;
break;
}
}while (TRUE == Process32Next(snapshot, &proc) );
ASSERT(pid != NULL);
CloseHandle(snapshot);
HANDLE hAmp = OpenProcess(PROCESS_VM_READ,false, pid);
int PlayListSize = SendMessage(hWinamp,WM_USER,0,124);
DWORD size;
char* sz;
#define BUFF_SIZE 80
char tmp_buffer[BUFF_SIZE];
for(int i=0;i<PlayListSize;i++)
{
char* wp_sz = (char*)SendMessage(hWinamp,WM_USER, i,212);
ReadProcessMemory( hAmp, wp_sz, tmp_buffer, BUFF_SIZE-1, NULL);
size = lstrlen(tmp_buffer);
sz = new char[size+1];
CopyMemory(sz, tmp_buffer, size+1);
PlayList.push_back(sz);
}
CloseHandle(hAmp);