TP

Práce s programem Windows Messenger

Program Messenger dovoluje ostatním aplikacím prostřednictvím COM objektů v omezené míře používat jeho funkčnost. Je k tomu potřeba nainstalovaný objekt, který je součástí Windows Messenger, ale kupodivu není v programu MSN Messenger - to znamená, že pokud nemáte nainstalovaný Windows Messenger (což se může stát pouze ve Windows 2003), tak nebudete moci s Messengerem pracovat. To že je objekt součástí Windows Messenger, ale kupodivu neznamená, že při práci s objektem musíte být přihlášeni v tomto programu a tak lze objekt používat i pokud používáte MSN Messenger.

Co jde a co nejde udělat?

Pomocí objektů lze přistupovat téměř ke všem funkcím Messengera. Bohužel není možné dělat to nejdůležitější to jest posílat zprávy. Podle dokumentace tato funkce dříve existovala, ale v novějších verzích byla (pravděpodobně z bezpečnostních důvodů) odstraněna. Pokud chcete tedy ze svého programu odesílat zprávy můžete pouze zavolat funkci, která otevře standardní komunikační okno Messengera. Bylo by sice možné po otevření okna pomocí API funkcí okno najít, poslat mu příslušné zprávy a zase ho zavřít, ale to rozhodně není elegantní řešení.

Ukázka práci s objekty

Ovládací prvek na výpis contact listu

Pokud jste někdy otevírali dokument ze SharePoint serveru tak víte, že například Word dokáže zjišťovat kdo s lidí, kteří pracovali s daným dokumentem je online a umožňuje s nimi komunikovat. Vytvořit takový ovládací prvek na výpis online uživatelů není příliš komplikované.

První co je potřeba udělat je přidat referenci na knihovny ve kterých je objekt (a Visual Studio v automaticky vygeneruje .Net wrappery). Stačí kliknout na "Přidat referenci" a vyhledat soubor msmsgs.exe (spouštěcí soubor messengera). Z přidaných referencí stačí jedna a to MessengerAPI. Dále je potřeba vytvořit objekt pro práci s messengerem (a ještě bude potřeba zkusit uživatele přihlásit pokud je offline):

// Objekt pro praci s Messengerem
IMessenger msnObj=msnObj=new MessengerClass();
  
// Pokud je uzivatel offline tak ho prihlasime
if (msnObj.MyStatus==MISTATUS.MISTATUS_OFFLINE) 
  msnObj.AutoSignin();

Předcházející kód vytvoří objekt Messengera (pokud není Messenger nainstalovaný vyhodí vyjímku). Pokud není spuštěný ani MSN Messenger ani Windows Messenger, tak se při vytváření spustí druhý uvedený. Po přihlášení uživatele je možné získat jeho online kontakty a to následujícím způsobem:

// Objekt pro praci s contact listem
IMessengerContacts contacts=(IMessengerContacts)msnObj.MyContacts;
  
// Pridat kontakty do ListView
foreach(IMessengerContact contact in contacts)
{
  // Do vlastnosti Tag si ulozime contact pro pozdejsi praci s nim
  ListViewItem lvi=new ListViewItem();
  lvi.Tag=contact; 
  lvi.Text=contact.FriendlyName;
  listViewContacts.Items.Add(lvi);
}

Tento kód sice nevytvoří tak hezký seznam kontaktů jako na výše uvedeném obrázku, ale na ukázku to jistě stačí. Získat další informace o uživateli v kontaktu lze velmi snadno pomocí vlastností IMessengerContact. To že v cyklu ukládáme do Tag (což je vlastnost kam si progamátor může uložit co potřebuje) objekt kontaktu má svůj smysl, protože díky tomu bude velmi snadné napsat zpracování události DoubleClick, která se bude chovat jak by se od ní slušelo, tedy při poklepání na online kontakt zobrazí okno s konverzací a při poklepání na offline kontakt umožní odeslat email na jeho adresu.

// Pokud neni vybrana jedna polozka tak nic
if (SelectedItems.Count!=1) return;
  
// Zjistit informace o kontaktu z Tag
IMessengerContact contact=(IMessengerContact)SelectedItems[0].Tag;
// .. a poslat email/zpravu
if (contact.Status==MISTATUS.MISTATUS_OFFLINE)
  msnObj.SendMail(contact);
else
  msnObj.InstantMessage(contact);

Ovládací prvek na výpis kontaktů

Celý ovládací prvek, tak jak je vyobrazen na obrázku nahoře dávám k dispozici včetně zdrojových kódu, takže pokud ho chcete použít a nebo se chcete podívat na celý zdrojový kód můžete si ho stáhnout [1]. Proti zde popsané ukázce má ovládací prvek pár vylepšení. Je napsaná tak, aby kontakty přidávala do seznamu pouze jednou a poté pouze aktualizuje zobrazované informace a jako další vylepšení umožňuje kontakty zobrazovat setřízené.

Používání objektů programu Messenger je hodně omezené a zdaleka není možné dosáhnout všeho, co by bylo potřeba, ale pro jednoduché rozšíření vaší aplikace o možnost komunikace (například s lidmi, kteří se nějak podíleli na tvorbě dokumentu) to mylím stačí. Pokud potřebujete používat nějaký pokročilejší funkce pro komunikaci můžete se podívat na Microsoftí produkt Live Communications Server [3], který je k tomuto přímo určen.

Odkazy na související stránky

Published: Tuesday, 8 March 2005, 2:20 AM
Author: Tomas Petricek
Typos: Send me a pull request!
Tags: