Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[API Msn] get_MyContacts

12 réponses
Avatar
Jeremy Dartigalongue
Bonjour,

Je débute en c - c++ et il y a maintenant quelques temps j'ai décider de
commencer a apprendre les api Win32 ainsi que les api des logiciel Windows.
Je commence a travailler les api de MSN et j'ai un peut de mal avec un
type de variables ( si cela en est une ^^)

Le but si j'ai bien comprit et de stocker les contacts msn dans une
variable ou tableau mais je ne comprend pas comment les afficher.

voici mon code:

#include <iostream>
#include <windows.h>

#import "C:\Program Files\Messenger\msmsgs.exe" tlbid(3), named_guids,
embedded_idl
using namespace MessengerAPI;

[ module(name="MessengerTest") ];


int main()
{
// Pointeur vers l'interface messenger
IMessenger *pIMessenger = NULL;
IMessengerContacts *pIMessengerContacts = NULL;

// Initialisation
CoInitialize(0);
CoCreateInstance(CLSID_Messenger, NULL, CLSCTX_ALL,

IID_IMessenger, (void **)&pIMessenger);


pIMessenger->get_MyContacts((IDispatch**)&pIMessengerContacts);



// Terminaison
pIMessenger->Release();
CoUninitialize();

system("PAUSE");
return 0;
}

Merci d'avance

Jeremy

2 réponses

1 2
Avatar
Jeremy Dartigalongue
Christian ASTOR a écrit :
On 16 oct, 14:19, Christian ASTOR wrote:
On 16 oct, 12:16, Jeremy Dartigalongue wrote:

cela ma marque "erreur récupération ou écriture du nom" que j'ai
indiquer dans le else


Oui bien sûr, c'est le message que tu affiches !
C'est la valeur de hr qu'il faut lire !



Et si hr == E_NOINTERFACE, tu peux passer par IDispatch :

IDispatch *pIDispatch = NULL;
hr = pIMessengerContacts->Item(i, &pIDispatch); // ou raw_Item()
if(SUCCEEDED(hr))
{
hr = pIDispatch->QueryInterface(IID_IMessengerContact, (VOID **)
&pMessengerContact);
if(SUCCEEDED(hr))
{



je suis vraiment désoler.. je débute et j'ai un peut de mal a comprendre ...

J'ai essayer de faire quelque choses et je ne sais pas trop si c'est ce
que vous vouliez...

std::cout << hr << std::endl;

et cela ma marquer "0"

j'ai ensuite essayer avec ce que vous avez marquez avec le IDispatch et
l'application plante au lancement.

Quelqu'un aurait il une source complète en c ou c++ qui fait cela pour
que je prenne exemple dessus car la je suis un peut perdu.
Avatar
Christian ASTOR
On 16 oct, 18:40, Jeremy Dartigalongue wrote:
je suis vraiment désoler.. je débute et j'ai un peut de mal a compren dre ...
J'ai essayer de faire quelque choses et je ne sais pas trop si c'est ce
que vous vouliez...
std::cout << hr << std::endl;
et cela ma marquer "0"



hr ne peut pas être égal à 0 (Succès : S_OK) si cela a échoué à
l'appel précédent
Tu n'as pas du faire du pas à pas avec le debugger, car c'est là qu'on
visualise toutes les variables, sans avoir besoin de les afficher..
Et c'est brûler les étapes de débuter par COM : il faut commencer par
les exemples simples du Petzold.

Un exemple complet (Unicode) =>


#import "C:Program FilesMessengermsmsgs.exe" raw_interfaces_only
named_guids tlbid(3)

#define UNICODE
#define _UNICODE

#include <tchar.h>
#include <stdio.h>

using namespace MessengerAPI;

HRESULT DisplayError(HRESULT hr);

int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr;
IMessenger *pMessenger = NULL;
IMessengerContacts *pMessengerContacts = NULL;
IMessengerContact* pMessengerContact = NULL;
CoInitialize(NULL);
hr = CoCreateInstance(CLSID_Messenger, NULL, CLSCTX_LOCAL_SERVER,
IID_IMessenger, (void **)&pMessenger);
if (SUCCEEDED(hr))
{
MISTATUS nCurrentState = MISTATUS_OFFLINE;
hr = pMessenger->get_MyStatus(&nCurrentState);
if(SUCCEEDED(hr))
{
if(nCurrentState == MISTATUS_OFFLINE)
{
hr = pMessenger->AutoSignin();
if (FAILED(hr))
{
DisplayError(hr);
_tprintf(L"Status OffLine : Unable to auto-signinrn");
pMessenger->Release();
return 1;
}
}
}
else
DisplayError(hr);
IDispatch *pDispatch = NULL;
hr = pMessenger->get_MyContacts(&pDispatch);
if (SUCCEEDED(hr))
{
hr = pDispatch->QueryInterface(IID_IMessengerContacts, (VOID **)
&pMessengerContacts);
if(SUCCEEDED(hr))
{
long nCount = 0;
hr = pMessengerContacts->get_Count(&nCount);
if(SUCCEEDED(hr))
{
_tprintf(L"*** Number of contacts : %drn", nCount);
for (int i = 0; i < nCount; i++)
{
IDispatch *pIDispatch2 = NULL;
hr = pMessengerContacts->Item(i, &pIDispatch2);
if(SUCCEEDED(hr))
{
hr = pIDispatch2->QueryInterface(IID_IMessengerContact, (VOID
**)&pMessengerContact);
if(SUCCEEDED(hr))
{
BSTR bstrSigninName, bstrName;
hr = pMessengerContact->get_SigninName(&bstrSigninName);
if(SUCCEEDED(hr))
{
hr = pMessengerContact->get_FriendlyName(&bstrName);
if(SUCCEEDED(hr))
{
MISTATUS nStatus = MISTATUS_UNKNOWN;
WCHAR wszStatus[32];
hr = pMessengerContact->get_Status(&nStatus);
if(SUCCEEDED(hr))
{
switch(nStatus)
{
case MISTATUS_OFFLINE:
_tcscpy(wszStatus, L"Off Line");
break;
case MISTATUS_ONLINE:
_tcscpy(wszStatus, L"On Line");
break;
case MISTATUS_INVISIBLE:
_tcscpy(wszStatus, L"Invisible");
break;
case MISTATUS_BUSY:
_tcscpy(wszStatus, L"Busy");
break;
case MISTATUS_BE_RIGHT_BACK:
_tcscpy(wszStatus, L"Be Right Back");
break;
case MISTATUS_IDLE:
_tcscpy(wszStatus, L"Idle");
break;
case MISTATUS_AWAY:
_tcscpy(wszStatus, L"Away");
break;
case MISTATUS_ON_THE_PHONE:
_tcscpy(wszStatus, L"On the Phone");
break;
case MISTATUS_OUT_TO_LUNCH:
_tcscpy(wszStatus, L"Out to Lunch");
break;
default:
_stprintf(wszStatus, L"%d", nStatus);
break;
}
_tprintf(L"Name : %srn", bstrName);
_tprintf(L" - Signin Name : %srn", bstrSigninName);
_tprintf(L" - Status : %srn", wszStatus);
}
}
}
else
DisplayError(hr);
pMessengerContact->Release();
}
else
DisplayError(hr);
pIDispatch2->Release();
}
else
DisplayError(hr);
}
}
else
DisplayError(hr);
pMessengerContacts->Release();
}
else
DisplayError(hr);
pDispatch->Release();
}
else
DisplayError(hr);
pMessenger->Release();
}
else
DisplayError(hr);
return 0;
}


HRESULT DisplayError(HRESULT hr)
{
WCHAR wszBuffer[MAX_PATH];
if (!FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, hr, LANG_SYSTEM_DEFAULT, wszBuffer, ARRAYSIZE(wszBuffer),
NULL))
_tcscpy(wszBuffer, L"Unknown error");
_tprintf(wszBuffer);
return hr;
}
1 2