Korunk rémálma a "SPAM", amiből naponta 100-200 db is "beeshet" a postaládánkba. Természetesen sok szolgáltató már felszerelkezett a modern szűrőkkel, de elképzelhető, hogy nálunk ilyen nincsen. Írjunk tehát egy kiegészítőt erre a feladatra!
Ez a cikk azok számára készült, akik rendelkeznek némi előismerettel a COM/OLE technológiák tekintetében, illetve a GroupWise levelezőklienst használják, de nincsenek megelégedve annak jelenlegi képességeivel.
Az itt leírtak a program módosításával természetesen más nyelvekben is hasznosíthatóak, lévén az ActiveX komponensek kis változtatással (paraméter típusok, hívási konvenciók, stb.) minden nyelvben alkalmazhatóak.
A COM/OLE objektum létrehozása
Pythonban a win32com modulban találunk segédeszközöket COM/OLE objektumok készítéséhez.
A win32com modul a Win32 Extensions, külön letölthető csomagban áll rendelkezésre.
Megjegyzés: mielőtt letöltenénk a legújabb Pythont, érdemes megnézni, hogy mely modulok lettek "hozzáigazítva" ehhez verzióhoz.
Könnyen előfordulhat, mint az a jelen cikk írójával is történt, hogy a Python aktuális verziójához még nem létezett Win32 Extensions csomag.
Ekkor érdemesebb az előző verziókhoz fordulni, mivel azok támogatása valószínűbb.
Ezen túl javasolható még az ActivePython használata, amely majdnem egy időben jelenik meg a a "standard" Pythonnal, valamint ebben teljesen jól működnek a mellékelt win32 extension-ök.
Amiben kényelmesebb, hogy minden adott hozzá (nem kell külön telepíteni), továbbá "*.chm" súgófájlok is rendelkezésre állnak.
Az ActivePython egyébiránt nem sokban (zlib, bzip2, Tix) különbözik egy Python + pywin32 párostól.
További információk, letöltés
itt, és
itt.
A következő példából látható, hogy a COM/OLE objektumok létrehozása esetében pl. a Delphi-től eltérően nincsen szükség típusmegjelölésre a változóknál (ld. Variant, vagy OLE Variant, stb.), mivel a Python változók típusa futás közben derül ki, illetve állítódik be.
Első lépésben tehát be kell importáljuk a megfelelő modult, majd Dispatch segítségével le kell kérnünk a megfelelő objektumot (osztályosítani kell).
Fenti példa tehát létrehoz egy objektumot, amin keresztül tulajdonképpen elérjük a GroupWise klienst.
Természetesen a kliens telepítve kell legyen a gépünkre, ellenkező esetben a következőhöz hasonló hibaüzenetet kaphatunk:
Traceback (most recent call last): File "U:\gwpys\gwpy1.py", line 2, in ? GW = win32com.client.Dispatch('NovellGroupWareSession') File "C:\Python\lib\site-packages\win32com\client\__init__.py", line 95, in Dispatch dispatch, userName = dynamic._GetGoodDispatchAndUserName(dispatch,userName,clsctx) File "C:\Python\lib\site-packages\win32com\client\dynamic.py", line 84, in _GetGoodDispatchAndUserName return (_GetGoodDispatch(IDispatch, clsctx), userName) File "C:\Python\lib\site-packages\win32com\client\dynamic.py", line 72, in _GetGoodDispatch IDispatch = pythoncom.CoCreateInstance(IDispatch, None, clsctx, pythoncom.IID_IDispatch) pywintypes.com_error: (-2147221005, '\xc9rv\xe9nytelen oszt\xe1ly\xfa karakterl\xe1nc', None, None) > Végrehajtás...
A COM/OLE objektum meghívása
Ennél mi sem egyszerűbb. A létrehozott ActiveX komponenst egyszerűen úgy használjuk, mintha egyszerű, "sima" Python objektum volna.
Tehát meghívhatjuk metódusait, elérhetjük mezőit, stb.
Itt most létrehoztunk egy GroupWise alapobjektumot, majd bejelentkezés után egy GroupWise Account-ot.
Az Account-ot fogjuk használni minden olyan objektum elérésére, amely a postafiókunk kezeléséhez szükséges, hiszen az Account (és vele a privát adatok) csak a konkrét bejelentkezés után válnak láthatóvá, "hívhatóvá".
Bővebben erről
itt olvashatunk.