10 nagyszerű makró

Adjon turbótöltést Office alkalmazásainak az alábbi konyhakész makrókkal!
Szerző: Karen Kenworthy

A szoftverfejlesztők folyamatosan javítják, sőt fejlesztik alkalmazásaikat, de néha nem jut eszükbe, mire vágyunk igazán. Csupán néhány apró trükkre lenne szükség, hogy a munka gyorsabban haladhasson. Szerencsére már senkinek sem kell várnia a legújabb termékek megjelenésére. Elérkezett az idő legkedvesebb alkalmazásaink finomhangolására, sőt néhány idegesítő programhiba kiirtására is. Mindehhez nem kell más, csupán egy makró, egy program ami azt használja és egy ici-pici segítség a Windows Magazin felhasználóbarát stábjától.
A profik által csupán script-nek becézett makró tulajdonképpen csupán egy lista a tennivalókról, amiből a számítógép megtudhatja mit kell tennie, és hogyan végezheti el az adott feladatát. Egy-egy jól megírt makró sokkal eredményesebbé teheti a munkánkat. Hogy ez a bimbódzó kapcsolat jól is végződjön, készítettünk 10 nagyszerű makrót, amit bárki kedve szerint használhat, átírhat vagy akár kombinálhat, hogy megfeleljen igényeinek. A csapat néhány tagja fantasztikus új lehetőségeket nyújt, néhányuk megváltoztat vagy kiiktat veszélyes program elemeket, a maradék pedig lehetőséget ad, hogy csapatmunkára bírjuk különféle programjainkat.
Az összes ismertetett makró letölthető a Windows Magazin honlapjáról a http://www.winmag.com/karen címen. Minden letöltött makró azonnal futtatható és tetszés szerint módosítható az egyéni igényeknek megfelelően. Természetesen a részletes telepítési és futtatási útmutató ugyanúgy megtalálható minden egyes makróhoz, mint a makrók különféle alkalmazásokhoz illő variációinak bő választéka.
A makrókat használó programok - beleértve a Microsoft Office különféle elemeit és magát a Windows-t - a Windows Scripting Host-ot (Windows szöveges felület, WSH) használják. A WSH alapkiszereltségben megtalálható a Windows 98-ban és a Windows 2000-ben, a Windows 95-höz pedig letölthető az ingyenes kiegészítés a Microsoft honlapjáról.
Bár az alábbi példák csupán a Windows valamint a Microsoft Word, Excel és Outlook felülvezérlésére hivatottak, a technika könnyen alkalmazható szinte mindegyik modernebb alkalmazás irányítására. A példák Visual Basic for Application (VBA) nyelven íródtak, de könnyen lefordítható más népszerű makró kódra, mint a Jscript vagy a JavaScript.


Szócsere

Sok problémát okozhat 2 szó felcserélése. például minden ,eladó" ,vevő"-re váltása és viszont, főleg egy többoldalas íromány esetében. Persze kivitelezhető, de nem könnyű. 2 hagyományos keresés-csere művelet nem elég, legalább háromra van szükség és kiemelkedően jó memóriára, nehogy összezavarodjunk és hibázzunk.
Jobb megoldásra lenne szükség? Csupán futtatni kell a Szócserét. A makró indításkor egy kis párbeszédablakot jelenít meg, amiben az átcserélni kívánt szavak vagy kifejezések után érdeklődik. Természetesen a program tartalmazza a Word-ben is megismert szokásos ,behelyettesítés" és ,csak teljes szó" lehetőségeket ahogy el is várhatjuk. Ha rábökünk a ,Mindent cserél" gombra, a script automatikusan átvizsgálja a teljes szöveget, vagy bármelyik kiválasztott részét, és végrehajtja a kívánt változtatásokat.
A motorházban
A WinMag által készített Szócsere egyes-egyedül végrehajtja mind a 3 szükséges különálló keresés-csere műveletet működése során. Először is rátalál minden egyes megjelenésére az első cserélendő kifejezésnek, és azt ideiglenesen kitölti. A kitöltő szerepét a talányos XjlasOmcmhoX szócska látja el, ami nem valószínű, hogy feltűnik bármely eljövendő szövegben (kivéve persze most a ford.). Következő lépésként a Szócsere helyettesíti a cserélendő második szó minden előfordulását az elsővel, végül pedig a makró átírja az ideiglenes kitöltőt a második megadott kifejezéssé.

Private Sub btnReplaceAll_Click()
Dim rng As Range

If (txtSwap1.Text < = " ") Or (txtSwap2.Text < = " ") Then
MsgBox "Swap text cannot be blank", vbonly _
Or vbExclamation, "Swap error"
Exit Sub
End If

Set rng = Selection.Range

frmSwap.Caption = "Swap Working "

With rng.find
.Text = txtSwap1.Text
.Replacement.Text = "XjlasOcmhoX"
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = chkCase.Value

.MatchWholeWord = chkWhole.Value
.MatchAllWordForms = chkWordForms.Value
.MatchWildcards = chkWildcards.Value
.MatchSoundsLike = chkSoundsLike.Value
.Execute Replace: = wdReplaceAll
End With

With rng.find
.Text = txtSwap2.Text
.Replacement.Text = txtSwap1.Text
.ClearFormatting
.Replacement.ClearFormatting
.Execute Replace: = wdReplaceAll
End With

With rng.find
.Text = "XjlasOcmhoX"
.Replacement.Text = txtSwap2.Text
.Execute Replace: = wdReplaceAll
End With
frmSwap.Caption = "Swap Done"
btnCancel.Caption = "Close"
End Sub

WSH levelezés

Ez a hasznos kis makró átveszi az irányítást az Outlook (vagy más MAPI alapú levelezőprogram) egy része felett, és fájl küldésére utasítja. Ha az ,asztal"-ra helyezzük a programfájlt, elég egy dupla kattintás a művelethez. Kiválóan alkalmas időszaki jeletések vagy más, gyakran frissítendő írások kiküldésére.
A motorházban
Feltétlenül meg kell változtatni a makró egyes részeit, saját igényeinkhez igazítva a kiválasztott fájl nevét, a megcélzott címet és az üzenet tárgyát, mielőtt a programot használatba állítjuk. Természetesen megadható több adatállomány vagy címzett, pontosvesszővel elválasztva (pl. terjesztes@byte.hu; posta@byte.hu).

Dim objNameSpace
Dim objOutlookApp
Dim objItem

Set objOutlookApp = CreateObject("Outlook.Application")
Set objNameSpace = objOutlookApp.GetNameSpace(,MAPI")
Set objItem = objOutlookApp.CreateItem(0) 'MailItem
objItem.To = "karenk@winmag.com"
objItem.Attachements.Add "C:\WinMag.log", 1, , _
"WinMag Log File"
objItem.Subject = "WinMag Log File"
objItem.Display
objItem.Send
Wscript.Quit
'Mail From WSH

Fájl megnyitás/mentés korlátozása

Ha egy munkahelyen több felhasználó is dolgozik ugyanazon a gépen, jogos az igény, hogy korlátozhatóak legyenek a hozzáférési jogok a gépen belül, sőt, akár hálózaton keresztül is. Ez a makró lehetőséget ad annak szabályzására, hogy a belépési információja alapján a felhasználó melyik World állományt tekintheti meg és szerkesztheti át. A Fájl/megnyitás menüpontot választva ugyanis csak az engedélyezett állományok jelennek meg, a számítógép és a hálózat fennmaradó része elérhetetlen.
A korlátozó információ a regisztrációs adatbázis CURRENT_USER részében kap helyet. Természetesen ez a makró is szabadon módosítható, hogy teljes hozzáférést biztosítsunk a felhasználóknak.
A motorházban
A makró átveszi a Word beépített File/Open folymatának irányítását. A hagyományos megnyitás ablak helyett amellyel az egész merevlemezt és a teljes hálózatot be lehet barangolni egyéni ablakot jelenít meg, amely csupán a megtekinthető fájlokat tartalmazza. Mivel a makró a navigálást letiltja, a dokumentumfájloknak a megfelelő könyvtárban kell lenniük, a szokott „.doc” kiterjesztéssel.
A makró a Word „Mentés másként” menüpontja felett is átveszi a vezérlést, hogy megelőzze a dokumentumok elfogadott könyvtáron kívülre mentését. Minden esetben a hagyományos mentés menüpontot használja megőrizve a fájl eredeti nevét és helyét.

Global Const WMR = "WinMag Restrictor"

Sub FileOpen()
Dim fid As String
Dim RestrictPath As String
Dim RestrictMask As String

RestrictPath = GetSetting("WinMag", "Restrict", "Path", "")
If (RestrictPath > " ") Then
If (Right$(RestrictPath, 1) < > "\") Then
RestrictPath = RestrictPath & "\"
End If
End If
RestrictMask = GetSetting("WinMag", "Restrict", "Mask", "")

Load frmOpen
frmOpen.lstFiles.Clear
On Error Resume Next
ChDir RestrictPath
If Err Then
MsgBox "Directory " & Chr$(34) & RestrictPath & _
Chr$(34) & " does not exist" & vbCrLf & _
"Contact your System Administrator", _
vbOKOnly Or vbExclamation, WMR
Exit Sub
End If
fid = Dir(RestrictPath & RestrictMask)
While fid > " "
frmOpen.lstFiles.AddItem fid
fid = Dir
Wend
If frmOpen.lstFiles.ListCount < = 0 Then
MsgBox "No files available", vbOKOnly _
Or vbExclamation, WMR
Exit Sub
Unload frmOpen
End If
frmOpen.Show
If frmOpen.OpenCancel Then Exit Sub
fid = frmOpen.lstFiles.List(frmOpen.lstFiles.ListIndex)

ChangeFileOpenDirectory RestrictPath
Documents.Open FileName: = fid, ConfirmConversions: = False, _
ReadOnly: = frmOpen.chkReadOnly.Value, _
AddToRecentFiles: = False, PasswordDocument: = "", _
PasswordTemplate: = "", Revert: = False, _
WritePasswordDocument: = "", WritePasswordTemplate: = "", _
Format: = wdOpenFormatAuto
Unload frmOpen

End Sub
Sub FileSaveAS()
ActiveDocument.Save
End Sub


Korlátozás felügyelet

Természetesen az előző makróhoz szükség van egy rendszergazdára, aki létrehozza, és időröl-időre módosítja a korlátozást a változó igényeknek megfelelően. A Korlátozás felügyelet makró létrehozza és módosítja a CURRENT_USER egyes regisztrációs bejegyzéseit. Először is rákérdez, melyik lemezegység melyik könyvtára tárolja majd a dokumentumokat. Második lépésként a szűrési séma beállítását kéri (mint például az ajánlott: *.doc). Végül megjeleníti a rendszergazda által bejegyzett információkat, és elmenti azokat a regisztrációs adatbázisban.
A motorházban
A WSH alkalmat ad a korlátozott könyvtár kiválasztására, vagy akár a korlátozás kiiktatására. Éppen ezért az a felhasználók gépein nem lehet elérhető, hiszen segítségével kijátszhatnák a védelmet. Mivel a felügyelőprogram is WSH környezetben fut, a beállítások elvégzése után könnyen eltávolítható. A bevitt információt a WSH beépített WSHShell.RegWrite eleme tárolja. A makró végén található 3 megjegyzés sor aposztroffal kezdve. A jelek törlésével a Fájl megnyitás/mentés korlátozása makró által a regisztrációs adatbázison végrehajtott minden változás törlődik, és az adatbázis visszaáll eredeti állapotába. A változtatás természetesen egyben leállítja a korlátozást.
Az alábbi technika szabadon változtatható, így bármi megjeleníthető, megváltoztatható, vagy éppen törölhető a regisztrációs adatbázisban.


Dim WSHShell
Dim strPath
Dim strMask
Dim intYorN
Dim strRegKey

strRegKey = " HKCU\Software \VB and VBA Program Settings \WinMag \Restrict \"
Set WSHShell = WScript.CreateObject("WScript.Shell")

strPath = InputBox("Enter restricted Drive: \Path",
_"WinMag Restrictor")

If (strPath < = " ") Then WScript.Quit

If Right(strPath, 1) < > "\" Then strPath = strPath & "\"
strMask = InputBox("Enter restricted Mask (e.g. *.doc)", _
"WinMag Restrictor")
If (strMask < = " ") Then WScript.Quit

intYorN = MsgBox("Storing:" & vbCrLf & "Path: " & strPath & vbCrLf _
& "Mask: " & strMask, vbOKCancel, "WinMag Restrictor")

if intYorN = vbCancel Then WScript.Quit

WSHShell.RegWrite strRegKey & "Path \", strPath
WSHShell.RegWrite strRegKey & "Mask \", strMask

'The following three lines can be enabled to delete all Restrictor Reg Entries
'WSHShell.RegDelete strRegKey & "Mask \"
'WSHShell.RegDelete strRegKey & "Path \"
'WSHShell.RegDelete strRegKey

WScript.Quit

Az MRU eltávolítása

A trükkösebb felhasználók könnyen elcsábulhatnak és megpróbálhatják kijátszani a Fájl megnyitás/mentés korlátozását azzal, hogy az alkalmazás MRU-jából (Most Recently Used, legutoljára használt) hívják le a fájlokat. Ez a kis lista általában a fájl menü legaljában található és az utoljára megnyitott 4 fájl nevét és elérési útját tartalmazza, így lehetőséget nyújtva azok behívására a korlátozás ellenére. Ezt a rést elzárandó, és a legutóbbi munkáink iránt kiváncsiskodók megfricskázására az MRU eltávolitása makró kikapcsolja az alkalmazás MRU listáját. Ugyanezzel a technikával bármely más programban eltüntethető az MRU lista. Példának okáért a FeatureInstall = msoFeatureInstall OnDemandWithUI sor, a makróban bárhol elhelyezve automatikusra állítja az Office Kérésre telepítés tevékenységét, így az új elemek első használatukkor a felhasználó közbelépése nélkül kerülnek fel a merevlemezre.
A motorházban
A Word minden inditásakor futtatja a makrók AutoExec soraiban elhelyezett utasításait. Ha a makrót a NORMAL.DOT-ba helyezzük, minden egyes dokumentum megnyitásakor működésbe lép. Más sablonba helyezve pedig csak abban az esetben lép életbe a script, ha az adott sablonnal hozunk létre dokumentumot (például: fax fedőlap, jelentés).
Az MRU eltávolítása a Word DisplayRecentFiles tulajdonságát False-ra állítva éri el hatását. Hogy megakadályozzuk a felhasználót ennek visszaállításában, a makró módosítja azt az utasítást, amelyet a Word Eszközök/Beállítások menüpontja futtat. Az új parancs először is eltünteti az MRU listát, majd megjeleníti a hagyományos Beállítások panelt. Miután a felhasználó elvégezte az általa igényelt változtatásokat a makró újból kikapcsolja a listát. Ezzel felülíródik minden olyan változás, ami az MRU-t érintette, miközben a többi új beállítás érvényes marad.

Sub AutoExec()
Application.DisplayRecentFiles = False
End Sub

Sub ToolsOptions()
Dim dlg As Dialog

Application.DiplayRecentFiles = False
Set dlg = Dialogs(wdDialogToolsOptions)
dlg.Show
Application.DisplayRecentFiles = False
End Sub


Szerkesztés lista

Sokszor hasznos lenne, ha kedvenc alkalmazásaink listát készítenének arról milyen állományokat szerkesztettünk át, és mikor. Most már képesek erre. Bár az alábbi példa a Wordhöz készült, ugyanezzel a technikával könnyen javítható az Excel, és még sok más program teljesítménye. A jegyzék megnyitása és a bejegyzések mentése automatikusan folyik a háttérben, nem igényel semmiféle felhasználói közbelépést. A lista a WINMAG.LOG nevü fájlban található, amely tartalmazza minden egyes érintett állomány teljes nevét a teljes elérési úttal egyetemben, valamint a megnyitás, vagy mentés dátumát és időpontját. Amennyiben más helyre, vagy més néven szeretnénk a listánkat menteni, könnyen megtehetjük az objLogger.LogFileName = ,C:\WinMag.log" sor megváltoztatásával, példának okáért objLogger.LogFileName = ,C:\My Documents\LogEntries.txt" sorrá.
A feljegyzések TSV (tabulátorral elválasztott értékek) formátumban kerülnek tárolásra, így a későbbiekben könnyen beilleszthetőek táblázatokba vagy jelentésbe.
A motorházban
A listakészítő program néhány új sor bejegyzésével kezdi a munkát az AutoExec sorban. Ezen sorok egyike létrehoz egy előzetes példát a makró listázására. Ez a példa hozza létre a későbbiekben az összes automatikus feljegyzést. Egy másik sor tartalmazza a naplófájl nevét, hogy az a makró összes eleme számára elérhető legyen. Az utolsó sor az AutoExec részben elkészíti az első bejegyzést, feljegyezve a Word elindításának pontos időpontját.
A makró fennmaradó része a Logger nevezetü modulban kap helyet. Itt találhatóak az alkalmazás eseményeit kezelő utasítások. Az egyik ilyen parancs minden alkalommal elindul, ahányszor csak megnyílik egy dokumentum, egy másik a bezáráskor vagy mentéskor használatos, a harmadik alprogram új dokumentumok létrehozásakor indul el, az utolsó pedig közvetlenül a Word-ből való kilépés előtt. Mindegyikük egy másik alprogramhoz, a LogWrite-hoz, fordul, hogy a merevlemezre mentse a bejegyzéseket.

' WinMag Module

AutoExec()
Set objLogger = New Logger
objLogger.LogFileName = ,C:\WinMag.log"
objLogger.Comment ,Start", ,Word"
End Sub

' Logger Class Module

Public LogFileName As String

Private WithEvents WordApp As Word.Application

Public Sub Comment(c1 As String, Optional c2 As String)
If IsMissing(c2) Then
LogWrite c1
Else
LogWrite c1, c2
End If
End Sub

Private Sub LogWrite(d As String, Optional a As String)
Dim logtime As Date

logtime = Now
Open LogFileName For Append Access Write Lock Write As 1
Print 1, Format$(logtime, ,short date"); vbTab;
Print 1, Format$(logtime, ,long time"); vbTab;

Print 1, d;
If Not IsMissing(a) Then Print 1, vbTab; a;
Print 1, ,"
Close 1
End Sub

Private Sub Class_Initialize()
Set WordApp = Application
End Sub

Private Sub WordApp_DocumentBeforeClose(byVal _
Doc As Document, Cancel As Boolean)
LogWrite ,Close", Doc.FullName
End Sub

Private Sub WordApp_DocumentOpen(By Val Doc As Document)
LogWrite ,Open", Doc.FullName
End Sub

Private Sub WordApp_NewDocument(By Val Doc As Document)
LogWrite ,Create", Doc.FullName
End Sub

Private Sub WordApp_Quit()
LogWrite ,Stop","Word"
End Sub


Gyors számláló

Sok alkalmazás képes megjeleníteni a segítségével készített fájl szavainak számát. De ezek legtöbbje sok más információt is tartalmaz, mint például a karakterek, mondatok, bekezdések száma. Ha csupán a szavak számlálására van szükség, a mellékes információk összegyűjtése érzékelhetően lassítja a folymatot. A Gyors számláló a lehető legegyszerűbben megszámolja a szavakat és megjeleníti az eredményt az alkalmazás ablakának legaljában található állapotsorban. Amennyiben szavak helyett a karaktereket akarjuk megszámoltatni a harmadik sort át kell szerkeszteni StatusBar = ,Words in document:" & ActiveDocument.Characters.Count (esetleg a ,Characters in document:" csere is helyénvaló lehet a ford).
A motorházban
A módszer olyan egyszerű, amennyire egy makró csak lehet. Ez a rövid program először megnézi a szavak számát az éppen használt dokumentum ActiveDocument Word.Count tulajdonságában. Majd megjeleníti a számot a StatusBar tulajdonságaként tárolva. Amennyiben bármilyen hiba történik, a makró hibaüzenettel jelzi, nincsen aktív dokumentum.

Sub QwordCount()
On Error Resume Next
StatusBar = ,Words in document:" &ActiveDocument.Words.Count
If Err Then StatusBar = ,No active document"
End Sub


Nagybani Csere

Olyan információk, mint például telefonszámok, címek, nevek, és márkanevek időröl időre változnak. Néha egyszerre több adat is elavul. Amikor ez bekövetkezik, igencsak jól jön ez a makró. A program beolvassa a cserélendő szavakat tartalmazó fájlt és automatikusan végrehajt minden kért változtatást az éppen használt írásban. A cserélendőket tartalmazó állomány egy egyszerű szövegfájl, amelyben minden sor egy teljes változtatást tartalmaz. Először a cserélendő szót, vagy kifejezést, utána pedig tabulátorral elválasztva azt a kifejezést, amire cserélni akarjuk. A program segítségével annyi változtatást hajthatunk végre egyszerre, amennyire csak szükségünk van.
A motorházban
A makró először megjeleníti a párbeszédablakot, ahol beüthető a változtatandókat tartalmazó fájl neve és választani lehet a hagyományos keresés-csere lehetőségek közül. Ha az ablak Replace All (mindent cserél) gombjára bökünk a program azonnal beolvassa a megadott állományt és végrehajt minden abban megadott helyettesítést. Az Undo All gombot választva minden addig tett változtatás törlődik.

Global Const WMBR = ,WinMag Bulk Replace"

Private Sub btnReplace_Click()
Dim strLine As String
Dim strToken() As String
Dim intLine As Long

On Error Resume Next
Open txtFID.Text For Input As 2
If Err Then
MsgBox ,Bulk Replace Request file not found", _
vbOkOnly Or vbExclamation, WMBR
Exit Sub
End If

StatusBar = ,Bulk Replace in progress "
Line Input 2, strLine
While (Err = 0) And (Len(strLine) > 3)
intLine = intLine + 1
strToken = Split(strLine, vbTab, 3)
If (strToken(0) > , ") And (strToken(1) > , ") Then
Repl strToken (0), strToken(1)
Else
MsgBox ,Error in line" & Format$(intLine), _
vbOkOnly Or vbExclamation, WMBR
End If
Line input 2, strLine
Wend
Close 2
Status Bar = ,Bulk Replace done"
btnCancel.Caption = ,Close"
txtFID.SetFocus
End Sub

Private Sub Repl(strFind As String, strRepl As String)
Dim rng As Range

Set rng = Selection.Range

With rng.find
.Text = strFind
.Replacement.Text = strRepl
.ClearFormatting
.Replacement.ClearFormatting
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = chkCaseValue
.MatchWholeWord = chkWhole.Value
.MatchAllWordForms = chkWordForms.Value
.MatchWildcard = chkWildcards.Value
.MatchSoundsLike = chkSoundsLike.Value
.Execute Replace: = wdReplaceAll
End With
End Sub

E-mail figyelmeztető

Legtöbb levelezőprogram figyelmeztet új üzenet érkezésekor. De az általuk nyújtott értesítés általában szinte észrevétlen, csupán egy apróbb ikonból, rövid dallamból vagy csöppnyi ablakocskából áll. Ez a makró megváltoztatja az Outlook új levél érkezésére adott figyelmeztetését, hogy még véletlenül se lehessen azt figyelmen kívül hagyni. Új üzenet érkezésekor az E-mail figyelmeztető megjelenít egy jókora párbeszédablakot, és folyamatosan játssza a megadott Wav vagy MIDI fájlt mindaddig, míg az OK gombbra kattintva tudomásul nem vesszük az üzenet érkezését.
A motorházban
A makró az Outlook új levél esetén induló programjában kezd működni. Ez az alprogram (Application_NewMail) automatikusan elindul minden alkalommal, ha új levél érkezik. Az általunk módósított verzió az E-mail figyelmeztető párbeszédablakát jeleníti meg, utána pedig újra és újra elindítja a Windows API PlaySound elemét, hogy lejátssza a kiválasztott dallamot.

Private Sub Application_NewMail()
frmAnnoy.Show
DoEvents
While Not (frmAnnoy.StopFlag)
frmAnnoy.Annoy
Wend
Unload frmAnnoy
End Sub

Public StopFlag As Boolean

Private Declare Function PlaySound Lib ,winmm.dll" _
Alias ,PlaySoundA" _
(By Val lpszName As String, By Val hModule As Long, _
By Val dwFlags As Long) As Long

Public Sub Annoy ()
While Not StopFlag
PlaySound ,C:\windows\media\chimes.wav", 0, 0
DoEvents
Wend
End Sub

Private Sub btnOK_Click()
StopFlag = True
End Sub

Ügynök

Ügynök a Microsoft által adományozott neve annak a technológiának, ami azokat a cuki rajzfilmfigurákat jeleníti meg amíg egy Office alkalmazást futtatunk. Ez a technológia általános eleme lesz a Windows 2000-nek, de Windows 98-hoz és 95-höz is ingyenesen letölthető a kiegészítő program a http://msdn.microsoft.com/workshop/imedia/agent/agentdl.asp címről. A kiegészítés telepítése után más alkalmazásokban is használhatóak a figurák, beleértve a saját makrókat is.
Az alábbi makró megmutatja, hogyan lehet egy Ügynökkel (Peedy-vel a papagájjal) megjeleníttetni az általunk választott információt. Sőt, a szintén ingyenesen letölthető irás-beszéd átalakítóval Peedy akár ki is mondhatja amit hallani szeretnénk.
Ha másik Ügynököt szeretnénk szerepeltetni, csupán meg kell változtatni a strName = ,Peedy" sort strName = ,Genie" vagy ,Merlin" vagy ,Robby" vagy más ügynök nevére.
Szintén megváltoztatható az Ügynök üdvözlőmondata is a objChar.Speak (,Hello! I'm " &strName) sor átváltoztatással példának okáért objChar.Speak (,Howdy Pardner!") sorrá.
A motorházban
Az Ügynökök a gesztusok széles választékával rendelkeznek. Ez a makró ebből kettőt mutat be: az integetést és a fülelést. Az Ügynökök az alkalmazások felpezsdítése mellett akár arra is használhatóak, hogy rendszergazdaként fontos információkat kérjünk a felhasználóktól. További példák és letölthető elemek találhatóak a http://www.winmag.com címen.


Dim objAgent
Dim objChar
Dim objRequest
Dim txtSpeak
Dim strName

Set objAgent = CreateObject(,Agent.Control.1")
objAgent.Connected = True
strName = ,Peedy"
objAgent.Characters.Load strName, strName & ,.acs"
Set objChar = objAgent.Characters(strName)
'objChar.LanguageID = &h409

objChar.Show

objChar.Speak (,Hello! I'm , & strName)
objChar.Play ,Wave"
txtSpeak = ,What should I say next?"

While txtSpeak > , "
objChar.Speak txtSpeak
'objChar.Play ,Hearing_1"
txtSpeak = InputBox(,What should I say next?", _
,WinMag Speak")
Wend
objChar.Speak ,Goodbye!"
objChar.Hide
MsgBox ,Goodbye!", vbokonly, ,WinMag Speak"
Set objChar = Nothing
objAgent.Characters.Unload strName

WScript.Quit

Karen Kenvorthy a Windows Magazine segéd-szerkesztője.
Ha éppen nem cikket ír, különféle Visual Basic programokat kódol vagy rendfentartó szervek tanácsadója a számítógépes bűnözéshez kapcsolódó ügyekben.