ZaΦßteΦnφk

PokroΦil²

Profesionßl

Inteligentnφ asistenti v poΦφtaΦi

P°edstavenφ mo₧nostφ technologie MS Agent 2.0

 

Budete pot°ebovat p°ibli₧n∞ 1 hodinu

OperaΦnφ systΘm pou₧it² v p°φsp∞vku: Windows 2000

V²vojovΘ nßstroje: Visual Basic 6.0

DalÜφ zdroje: www.microsoft.com/msagent/

 

 

Vß₧enφ p°ßtelΘ,

 

v dubnovΘm vydßnφ rubriky se budeme v∞novat poznßvßnφ programovΘ architektury technologie s nßzvem Microsoft Agent 2.0, kterß je zodpov∞dnß za sprßvnou funkΦnost digitßlnφch poΦφtaΦov²ch pomocnφk∙, se kter²mi se m∙₧ete st°etnout v stßle v∞tÜφm mno₧stvφ modernφch aplikacφ. P°edm∞tem naÜeho zßjmu bude vysv∞tlenφ zßklad∙ uvedenΘ technologie a poslΘze praktickΘ ukßzky, kterΘ vßm pomohou s implementacφ poΦφtaΦov²ch pomocnφk∙ do vaÜich vlastnφch program∙.

 

Obsah

P°edstavenφ mo₧nostφ technologie

P°idßnφ ovlßdacφho prvku MS Agent Control 2.0 do soupravy nßstroj∙

Zobrazenφ poΦφtaΦovΘho pomocnφka

Vytvo°enφ bublinovΘho okna pomocnφka a zobrazenφ uvφtacφ zprßvy

Zm∞na pozice pomocnφka na obrazovce poΦφtaΦe

UkonΦenφ prßce s pomocnφkem

 

 

P°edstavenφ mo₧nostφ technologie

 

Pojem äpoΦφtaΦovφ asistentiô byl do pov∞domφ u₧ivatel∙ a poslΘze i programßtor∙ zaveden ji₧ p°ed n∞jak²m Φasem. Pokud by jsme cht∞li b²t p°esn∞jÜφ, musφme se vrßtit a₧ do doby, kdy byl na trh uveden kancelß°sk² balφk Office spoleΦnosti Microsoft ve verzi 97. Sada program∙ tehdy, samoz°ejm∞ krom∞ jinΘho, p°inesla na v²slunφ revoluΦnφ prvek, jen₧ byl navφc velice peΦliv∞ zakomponovßn do u₧ivatelskΘho rozhranφ nabφzen²ch aplikacφ. Ano, Ülo o takzvanΘho pomocnφka Office, v podob∞ snad ji₧ legendßrnφ kancelß°skΘ sponky. PoΦφtaΦov² asistent vßs sprovßzel od prvnφch chvil. Sna₧il se vßm pomoci p°i uskuteΦn∞nφ r∙zn²ch ·kol∙, neustßle vßs upozor≥oval na to, jak lze vaÜφ prßci zefektivnit pou₧itφm jinΘho postupu Φi aplikacφ klßvesov²ch zkratek. Zkrßtka, byl stßle äna dohledô, co₧ u n∞kter²ch u₧ivatel∙ vyvolßvalo zßchvaty vzteku. V ₧ßdnΘm p°φpad∞ bych na tomto mφst∞ necht∞l polemizovat o skuteΦnosti, zda-li byla um∞lß inteligence digitßlnφho asistenta na po₧adovanΘ ·rovni nebo nikoliv. Pro nßs je myslφm nejd∙le₧it∞jÜφ fakt, ₧e pomocnφk byl postaven na dostateΦn∞ pevnΘm zßkladu, kter² dovoloval jeho pou₧itφ v r∙zn²ch situacφch (nap°. pomocφ jazyk∙ Visual Basic a Visual Basic pro aplikace (VBA)).

 

Budeme-li sledovat chronologii nßsledujφcφch verzφ aplikaΦnφ sady Office, uvidφme, ₧e pomocnφci si takΘ v nich vydobyly neot°esitelnou pozici. Domnφvßm se, ₧e v okam₧iku, kdy jste spat°ili animovanou postaviΦku pomocnφka, cht∞li jste n∞co podobnΘho mφt i ve vaÜem programu. Dobrou zprßvou je, ₧e na nßsledujφcφch °ßdcφch se dozvφte vÜe pot°ebnΘ pro to, aby se vßÜ sen stal skuteΦnostφ. JeÜt∞ p°edtφm se ale zkusme podφvat na technologii MS Agent 2.0 podrobn∞ji.

 

Technologie MS Agent 2.0 obsahuje mno₧stvφ objekt∙, kolekcφ, vlastnostφ a metod, kterΘ m∙₧ete kdykoliv pou₧φt a p°evzφt tak chovßnφ poΦφtaΦov²ch pomocnφk∙ do sv²ch rukou. VÜechny programovΘ souΦßsti technologie jsou nerozluΦn∞ spjaty s operaΦnφm systΘmem Windows a po jejich nainstalovanφ je ji₧ nelze ze systΘmu bezpeΦn∞ odstranit. Cφlovou skupinou pro aplikaci technologie jsou programßto°i, kte°φ pou₧φvajφ v²vojovΘ nßstroje, kterΘ podporujφ standard ActiveX (resp. COM, Component Object Model). Kolekce programov²ch komponent toti₧ obsahuje ovlßdacφ prvek ActiveX s nßzvem Microsoft Agent Control 2.0, pomocφ kterΘho je mo₧nΘ snadnou cestou zadßvat pomocnφkovi programovΘ pokyny.

 

Programov² k≤d ovlßdacφho prvku MS Agent Control 2.0 je ulo₧en v souboru agentctl.dll. Tento soubor se nachßzφ ve slo₧ce MS AGENT ko°enovΘ slo₧ky Windows.

 

Do mno₧iny programovacφch nßstroj∙, kterΘ lze pou₧φt p°i programovßnφ poΦφtaΦov²ch pomocnφk∙, m∙₧eme za°adit Visual Basic a Visual C++, dßle pak takΘ Visual FoxPro, editor jazyka VBA v MS Office a rovn∞₧ MS Internet Explorer. VÜechna tato v²vojovß prost°edφ vßm mohou poslou₧it v p°φpad∞, ₧e budete chtφt zavolat poΦφtaΦovΘ pomocnφky.

 

SystΘmovΘ soubory technologie MS Agent 2.0 se nachßzejφ ve slo₧ce MS AGENT (tato slo₧ka je umφst∞na v ko°enovΘ slo₧ce systΘmu Windows). SystΘmovΘ soubory technologie jsou na nov∞jÜφch verzφch operaΦnφho systΘmu Windows (Millennium Edition, 2000 a XP) ji₧ standardn∞ zahrnuty do instalace systΘmu, a proto je nemusφte op∞tovn∞ instalovat. Jste-li ovÜem majitelem starÜφ verze systΘmu Windows (95 a 98), na domovΘ strßnce technologie (kterß je uvedena v navigaΦnφm panelu) najdete vÜe pot°ebnΘ.

 

Velmi d∙le₧itou informacφ je, ₧e poΦφtaΦov² pomocnφk p∙sobφ jako server typu out-of-process, co znamenß, ₧e asistent je v₧dy spouÜt∞n ve svΘm vlastnφm procesu. Tato skuteΦnost ostatn∞ vysv∞tluje, proΦ je pomocnφk zcela nezßvisl² od aplikace, kterß si vy₧ßdala jeho slu₧by (jde o tzv. klientskou aplikaci). Nezßvislß povaha technologie poΦφtaΦovΘho asistenta vßm dovoluje aplikovat kousky doposud nevφdanΘ. M∙₧ete nap°φklad nechat zobrazit na obrazovce n∞kolik pomocnφk∙ a t°eba uskuteΦnit mezi nimi rozhovor.

 

Osobn∞ si myslφm, ₧e mo₧nosti poΦφtaΦov²ch asistent∙ jsou pon∞kud p°ehlφ₧eny. V₧dy¥ jenom samotnß p°edstava, ₧e ve sv∞te vaÜeho poΦφtaΦe se nachßzφ inteligentnφ virtußlnφ bytost, je skuteΦn∞ jedineΦnß. A pokud je takΘ ävybrouÜenô programov² k≤d, jen₧ na°izuje pomocnφkovi, co mß kdy d∞lat, je poΦφtaΦov² asistent pomocnφkem v pravΘm slova smyslu. Dob°e, v∞°φm, ₧e m∙₧eme p°ejφt k programov²m ukßzkßm toho, co vÜechno m∙₧e pomocnφk d∞lat.

 

 

P°idßnφ ovlßdacφho prvku MS Agent Control 2.0 do soupravy nßstroj∙

 

P°i naÜich pokusech budeme v₧dy pracovat s ovlßdacφm prvkem MS Agent Control 2.0. Aby bylo mo₧nΘ vytvß°et instance tohoto prvku a nßsledn∞ je uklßdat p°φmo na plochu formulß°e, je nejd°φve zapot°ebφ p°idat do soupravy nßstroj∙ odkaz na p°φsluÜn² ovlßdacφ prvek. Postupujte teda podle nßsledujφcφch instrukcφ:

 

  1. Spus¥te Visual Basic 6.0 a vytvo°te nov² projekt typu Standard EXE.
  2. OznaΦte nabφdku Project a klepn∞te na polo₧ku Components.
  3. Dßvejte pozor, aby byla v dialogovΘm okn∞ vybrßna zßlo₧ka Controls. Zde v seznamu vyhledejte polo₧ku s nßzvem Microsoft Agent Control 2.0 a klepnutφm ji oznaΦte (obr. 1).

 

 

Obr. 1 û Vlo₧enφ odkazu na ovlßdacφ prvek do soupravy nßstroj∙

 

Pokud by se po₧adovanß polo₧ka nenachßzela z n∞jakΘho blφ₧e nespecifikovanΘho d∙vodu v seznamu, zkuste klepnout na tlaΦφtko Browse a vyhledat soubor agentctl.dll. á

 

  1. Aktivujte tlaΦφtko OK a zkontrolujte, jestli se ikona ovlßdacφho prvku nachßzφ v souprav∞ nßstroj∙ (obr. 2).

 

áááá áááááááá

Obr. 2 û Ikona ovlßdacφho prvku MS Agent Control 2.0 v souprav∞ nßstroj∙

 

V²born∞, prvnφ krok jste ·sp∞Ün∞ absolvovali. Dßle ji₧ staΦφ jenom umφstit instanci ovlßdacφho prvku na formulß° a zaΦφt s psanφm programovΘho k≤du. To vÜe bude nßm∞tem dalÜφ sekce tΘto studie.

 

 

Zobrazenφ poΦφtaΦovΘho pomocnφka

á

Umφst∞te na formulß° instanci ovlßdacφho prvku MS Agent Control 2.0 a takΘ instanci prvku CommandButton. OznaΦte instanci prvku s pomocnφkem a podφvejte se do okna vlastnostφ (Properties Window). M∙₧ete si vÜimnout, ₧e asistent podporuje jistΘ vlastnosti, no nenφ jich moc. Pokud budete chtφt, m∙₧ete zm∞nit jmΘno pomocnφka modifikacφ hodnoty vlastnosti Name (standardn∞ nese prvnφ instance jmΘno Agent1). PokraΦujte dvojit²m klepnutφm na instanci tlaΦφtka a zapsßnφm uvedenΘho programovΘho k≤du do okna editoru.

 

Agent1.Characters.Load "Pomocnφk1", "C:\Soubor_s_asistentem.acs"

Agent1.Characters("Pomocnφk1").Show

áá

Proto₧e m∙₧e tento fragment programovΘho k≤du p∙sobit na prvnφ pohled lehce komplikovan∞, pokusme se na n∞j podφvat zblφzka. P°edevÜφm je nutnΘ nahrßt sprßvn² profil asistenta ze souboru .ACS a tento pak p°idat do kolekce objekt∙ s nßzvem Characters. To provßdφ metoda Load, signaturu kterΘ tvo°φ dva parametry:

 

  1. CharacterID û jde o textov² °et∞zec, kter² identifikuje profil pomocnφka. Pokud se budete chtφt v budoucnosti odkßzat na tento profil pomocnφka, v₧dy pou₧ijete nßzev (textov² °et∞zec), kter² jste danΘmu profilu p°i°adili p°i volßnφ metody Load. V naÜem p°φpad∞ je vybran² profil asistenta pojmenovßn jako äPomocnφk1ô.á
  2. Cesta k souboru s profilem asistenta. UrΦenφ cesty k po₧adovanΘmu souboru m∙₧e b²t uskuteΦn∞no dvojak²m zp∙sobem. V nejb∞₧n∞jÜφm p°φpad∞ bude tento parametr napln∞n explicitnφm urΦenφm cesty k souboru s asistentem, jen₧ je fyzicky p°φtomn² na vaÜem pevnΘm disku (nap°. C:\Soubor1.acs). Pokud ovÜem chcete pou₧φt soubor s pomocnφkem, jen₧ je ulo₧en na sφti, m∙₧ete zadat takΘ p°φsluÜnou HTTP adresu.

 

V souvislosti s druh²m parametrem je nutnΘ vzpomenout i relativnφ urΦenφ cesty k souboru s profilem pomocnφka. M∙₧ete pou₧φt k≤d v tΘto podob∞:

 

Agent1.Characters.Load "Pomocnφk1", "Genie.acs"

Agent1.Characters("Pomocnφk1").Show

 

Zde nenφ urΦena plnß cesta k souboru, ale cesta relativnφ. Ta p°edpoklßdß, ₧e soubor s asistentem (Genie.ACS) se nachßzφ ve slo₧ce CHARS, kterß je pod°φzenou slo₧kou slo₧ky MS AGENT.

 

Zobrazenφ pomocnφka na obrazovce poΦφtaΦe mß na starosti metoda Show. Pokud byste pou₧ili soubor s Φarovn²m d₧inem, uvedenΘ dva °ßdky k≤du by ho zviditelnily na obrazovce v podob∞ uvedenΘ na obr. 3.

 

 

Obr. 3 û Zobrazenφ pomocnφka pomocφ metody Show

 

P°i nahrßvßnφ profilu pomocnφka platφ pravidlo, ₧e pou₧itφm jednΘ instance ovlßdacφho prvku m∙₧ete nahrßt jenom jeden profil asistenta ve stejnou dobu. Pokud byste tedy cht∞li aktivovat dalÜφho pomocnφka, bylo by pot°ebnΘ vytvo°it takΘ dalÜφ instanci ovlßdacφho prvku.

 

 

Vytvo°enφ bublinovΘho okna pomocnφka a zobrazenφ uvφtacφ zprßvy

á

Aby mohl asistent zobrazit bublinovΘ okno s uvφtacφ zprßvou, pou₧ijeme metodu Speak s textov²m parametrem:

 

Agent1.Characters("Pomocnφk1").Speak "Dobr² den, jß jsem vßÜ poΦφtaΦov² pomocnφk."

 

V²sledek lze pozorovat na obr. 4.

 

 

Obr. 4 û BublinovΘ okno pomocnφka

 

Chcete-li, m∙₧ete asistentovi poskytnout n∞kolik uvφtacφch zprßv a nechat na n∞m, kterou zobrazφ. V tomto p°φpad∞ je nutnΘ odd∞lit jednotlivΘ v∞ty symbolem svislΘ Φßry (|). Prostudujte si nφ₧e uveden² programov² k≤d:

 

áá

Agent1.Characters("Pomocnφk1").Speak _

"Dobr² den, jß jsem vßÜ poΦφtaΦov² pomocnφk.|" & _

"Ahoj, jak se mßte?|" & _

"Pot°ebujete pomoc?"

 

Pokud budete zkouÜet Φinnost tohoto k≤du, pamatujte na pravidlo, ₧e v jednom okam₧iku m∙₧e b²t z jednΘ instance ovlßdacφho prvku zobrazen pouze jeden asistent. Proto kdybyste dvakrßt klepli na tlaΦφtko na formulß°i, Visual Basic by ohlßsil chybu, v popisu kterΘ by vßm bylo sd∞leno, ₧e postaviΦka pomocnφka ji₧ byla jednou naΦtena. Tento (mimochodem pom∞rnΘ Φast²) problΘm lze vy°eÜit nap°φklad takto:

 

  1. V deklaraΦnφ Φßsti formulß°e vytvo°te prom∞nnou typu Boolean s nßzvem aktivace.
  2. V udßlostnφ procedu°e Form1_Load inicializujte tuto prom∞nnou na hodnotu False.
  3. K≤d v obsluze udßlosti Click tlaΦφtka upravte do nßsledujφcφ podoby:

 

Private Sub Command1_Click()

If aktivace Then

symbol:

ááá Agent1.Characters("Pomocnφk1").Show

ááá Agent1.Characters("Pomocnφk1").Speak _

ááá "Dobr² den, jß jsem vßÜ poΦφtaΦov² pomocnφk.|" & _

ááá "Ahoj, jak se mßte?|" & _

ááá "Pot°ebujete pomoc?"

Else

ááá Agent1.Characters.Load "Pomocnφk1", "Genie.acs"

ááá GoTo symbol

End If

á

aktivace = True

End Sub

 

Znßzorn∞n² k≤d je pon∞kud netypick² hlavn∞ pou₧itφm konstrukce GoTo. Pr∙b∞h celΘho algoritmu vypadß asi takto:

 

  1. Je testovßna hodnota prom∞nnΘ aktivace. P°i prvnφm spuÜt∞nφ programu je hodnota tΘto prom∞nnΘ nastavena na False (toto änastavenφô hodnoty prom∞nnΘ se d∞je v udßlostnφ procedu°e Form1_Load). Proto je dßle proveden k≤d, jen₧ se nachßzφ ve druhΘ Φßsti rozhodovacφ konstrukce If-Then, a tedy dochßzφ k naΦtenφ profilu pomocnφka prost°ednictvφm metody Load. P°ipomφnßm, ₧e jde jenom o änaΦtenφô pomocnφka, nedojde tedy k jeho zobrazenφ na monitoru poΦφtaΦe. áá
  2. Provede se p°φkaz Goto a exekuce programu se p°enese na °ßdek, jen₧ nßsleduje za °ßdkem, kter² je oznaΦen nßv∞stφm (v naÜem p°φpad∞ je nßv∞stφm slovo symbol).
  3. Provedou se dalÜφ p°φkazy, kterΘ nßsledujφ za nßv∞stφm a dojde k opuÜt∞nφ konstrukce If-Then.
  4. Prom∞nnß aktivace je poslΘze nastavena na hodnotu True. Pokud klepnete jeÜt∞ jednou na tlaΦφtko, prom∞nnß ji₧ bude nastavena na hodnotu True a provede se tedy jenom prvnφ Φßst rozhodovacφ konstrukce If-Then.

 

Jestli₧e te∩ spustφte aplikaci, m∙₧ete klepnout na tlaΦφtko i potΘ, co je pomocnφk ji₧ viditeln² na obrazovce poΦφtaΦe. Nedojde k ₧ßdnΘ chyb∞, asistent jednoduÜe vybere dalÜφ zprßvu a p°eΦte ji.

 

 

Zm∞na pozice pomocnφka na obrazovce poΦφtaΦe

 

P°i standardnφm zp∙sobu aktivace se pomocnφk zobrazuje v levΘm hornφm rohu plochy vaÜeho monitoru. Jestli₧e vßm toto umφst∞nφ asistenta nevyhovuje, m∙₧ete ho zm∞nit pomocφ dvou vlastnostφ Top a Left. Tyto vlastnosti majφ stejn² v²znam jako jejich ekvivalenty ve Visual Basicu, spoleΦn∞ urΦujφ pozici levΘho hornφho rohu okna pomocnφka.

 

AΦkoliv to nenφ na pohled z°ejmΘ, pomocnφk se nachßzφ v okn∞ (rozm∞ry tohoto okna by nem∞ly p°ekroΦit hranici 128 krßt 128 pixel∙). Pozadφ okna a okraje okna jsou pr∙hlednΘ, proto je nem∙₧ete spat°it. á

 

Budete-li chtφt p°esunout asistenta 500 pixel∙ sm∞rem dol∙ a 450 pixel∙ sm∞rem doprava, pou₧ijte tento k≤d:

 

Agent1.Characters("Pomocnφk1").Top = 500

Agent1.Characters("Pomocnφk1").Left = 450

 

V²sledek je demonstrovßn na obr. 5.

 

 

Obr. 5 û P°esnΘ umφst∞nφ pomocnφka na k²₧enou pozici

 

P°esto₧e vlastnosti Top a Left odvßd∞jφ svou prßci znamenit∞, existuje dalÜφ zp∙sob, pomocφ kterΘho lze zm∞nit pozici asistenta. Jde o metodu MoveTo objektu Character. P°edstavme si nejprve zßpis metody a pak si k nφ povφme pßr slov.

 

agent.Characters ("CharacterID").MoveTo x,y, [Speed] á

 

Metoda MoveTo pracuje s t°emi parametry, p°iΦem₧ poslednφ z nich je voliteln². Prvnφ dva parametry urΦujφ sou°adnice cφlovΘho levΘho hornφho bodu okna pomocnφka. Ji₧ vzpomφnan² voliteln² parametr determinuje rychlost p°ehrßvanφ snφmk∙ animace pomocnφka p°i zm∞n∞ jeho pozice. Tato rychlost je m∞°ena v milisekundßch.

 

Velkou v²hodou metody MoveTo je skuteΦnost, ₧e zm∞na pozice asistenta je vizußln∞ umocn∞na animacφ (obr. 6).

 

Obr. 6 û Zm∞na pozice pomocnφka pou₧itφm metody MoveTo

 

 

UkonΦenφ prßce s pomocnφkem

á

Jestli₧e ji₧ nebudete chtφt vyu₧φt slu₧eb poΦφtaΦovΘho asistenta, mßte v zßsad∞ dv∞ mo₧nosti, jak jej äodstrßnitô z obrazovky poΦφtaΦe. Pomocnφka m∙₧ete bu∩ skr²t aplikacφ metody Hide, nebo jej zcela odstranit z pam∞ti pou₧itφm metody Unload.

 

Dßvejte si pozor na pou₧itφ metody Hide. Tato metoda zabezpeΦuje pouze skrytφ pomocnφka, nikoliv jeho odstran∞nφ z pam∞ti poΦφtaΦe. Pam∞¥ovΘ zdroje, kterΘ obsazoval asistent m∙₧ete bezpeΦn∞ uvolnit jenom pou₧itφm metody Unload.

 

P°φkladnΘ pou₧itφ obou metod m∙₧ete vid∞t nφ₧e.

 

 

Kdy₧ budete chtφt skr²t pomocnφka, zapiÜte tento k≤d:

 

Agent1.Characters("Pomocnφk1").Hide

 

V p°φpad∞ nutnosti odstra≥te pomocnφka z pam∞ti tφmto k≤dem:

 

Agent1.Characters.Unload "Pomocnφk1"

 

 

Zßv∞r

 

Jestli₧e vßs problematika ovlßdßnφ poΦφtaΦov²ch pomocnφk∙ zaujala, dejte mi v∞d∞t a jß pak m∙₧u p°ipravit dalÜφ dφl z tΘto tΘmatiky, ve kterΘm by byly probrßny pokroΦilΘ techniky implementace poΦφtaΦov²ch asistent∙.

 

 

Jßn Hanßk