Omdat we wel genoeg hadden van buggy Grimbo zijn Ericston en ik een projectje begonnen met het ultieme doel om de naam van het nummer dat je in winamp speelt in je MSN naam te zetten.
Deze natuurlijk onmisbare functionaliteit implementeren leek ons eerst een klusje van enkele uurtjes. Het huidige spelende nummer uit winamp halen bleek dan ook geen enkel probleem. Tot we de uitstekende (NOT) documentatie van microsoft over de MSN API tegenkwamen. over de interface werd wel het een en ander uitgelegd, maar met Visual Basic voorbeelden
.
Na enige inspectie bleek er wel een get_FriendlyName methode te zijn, maar geen put_FriendlyName... Toch is het mogelijk want met deze library kun je in ieder geval in visual basic je FriendlyName veranderen. Eric en ik hebben echt van alles geprobeerd, maar we zijn nu echt ten einde raad. Tijd om er eens een frisse blik over te laten gaan
dit hebben we tot nu toe:
Hier is de API die wij gebruikt hebben te downloaden (dat bevat de .h files).
Het voorbeeld hebben we gedeeltelijk uit dit topic.
Om een duistere reden, ondanks de CoUninitialize() call, blijft het programma ook nog hangen in het geheugen.
source + header files (zipped)
Deze natuurlijk onmisbare functionaliteit implementeren leek ons eerst een klusje van enkele uurtjes. Het huidige spelende nummer uit winamp halen bleek dan ook geen enkel probleem. Tot we de uitstekende (NOT) documentatie van microsoft over de MSN API tegenkwamen. over de interface werd wel het een en ander uitgelegd, maar met Visual Basic voorbeelden
Na enige inspectie bleek er wel een get_FriendlyName methode te zijn, maar geen put_FriendlyName... Toch is het mogelijk want met deze library kun je in ieder geval in visual basic je FriendlyName veranderen. Eric en ik hebben echt van alles geprobeerd, maar we zijn nu echt ten einde raad. Tijd om er eens een frisse blik over te laten gaan
dit hebben we tot nu toe:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| // wat includes vanaf msdn download site
#include "msgrua.h"
#include "msgruaid.h"
int main()// dit is ons entry point
{
HRESULT hr;
IMessenger* pIM;
BSTR bName;
char cName[64];
// CLSID: B69003B3-C55E-4B48-836C-BC5946FC3B28
static const GUID CLSID_Messenger =
{ 0xB69003B3, 0xC55E, 0x4B48, { 0x83, 0x6C, 0xBC, 0x59, 0x46, 0xFC, 0x3B, 0x28 } };
// IID: D50C3186-0F89-48F8-B204-3604629DEE10
static const GUID IID_IMessenger =
{ 0xD50C3186, 0x0F89, 0x48F8, { 0xB2, 0x04, 0x36, 0x04, 0x62, 0x9D, 0xEE, 0x10 } };
CoInitialize(NULL);// noodzakelijk, zie ook CoUninitialize();
hr = CoCreateInstance ( CLSID_Messenger, // CLSID of coclass
NULL, // not used - aggregation
CLSCTX_INPROC_SERVER, // type of server
IID_IMessenger, // IID of interface
(void**) &pIM ); // Pointer to our interface pointer
if ( SUCCEEDED ( hr ) ) {
// alles werkt...
if ( SUCCEEDED ( pIM->get_MyFriendlyName(&bName) ) ) { // Naam ophalen uit msn.
wcstombs (cName,bName,64);
MessageBox(NULL,cName,0,0);
} else {
MessageBox(NULL,"MSN uit?",0,0);// MSN ws uit.
}
// Nu hier nog iets zoals put_MyFriendlyName()...
} else {
// Couldn't create the COM object. hr holds the error code.
MessageBox(NULL,"Gaat iets totaal fout...",0,0);
// Meestal als CoInitialize()
// niet aangeroepen wordt.
}
CoUninitialize(); // ook noodzakelijk maar doet ms
// iets fout waardoor er com references
// open blijven we niks meer doen en
// we lekker een memory leak maken
return 0; // doei
} |
Hier is de API die wij gebruikt hebben te downloaden (dat bevat de .h files).
Het voorbeeld hebben we gedeeltelijk uit dit topic.
Om een duistere reden, ondanks de CoUninitialize() call, blijft het programma ook nog hangen in het geheugen.
source + header files (zipped)