import pythoncom import win32com.server.connect # event ID-je IID_IIntVolt = pythoncom.MakeIID("{9DF3E4B3-48DD-11D4-8CF7-005004E9490B}") class cechoevt(win32com.server.connect.ConnectableServer): """ Ez az echo class. Egyetlen funkciója az echo metódus, ami annyiszor visszhangozza a kapott paramétert, amennyi count értéke. cecho class-t módosítottam úgy, hogy IntVolt eseményt generáljon az echo metódus. Természetesen minden ID is változott, hiszen ez már egy másik class. """ #regisztációs információk _public_methods_ = ['echo'] + win32com.server.connect.ConnectableServer._public_methods_ _public_attrs_ = ['count'] _connect_interfaces_ = [IID_IIntVolt] _reg_desc_ = 'Echo class IntVolt eseménnyel' _reg_clsid_ = '{9DF3E4B2-48DD-11D4-8CF7-005004E9490B}' _reg_progid_ = 'mechoevt.cechoevt' def __init__(self): win32com.server.connect.ConnectableServer.__init__(self) self.count=1 #default: az ismétlések száma 1 def echo(self,arg): #előbb megnézzük, hogy int-e a paraméter #ha igen, akkor eseményt generálunk if type(arg)==type(1): #sinkek hívása #2. paraméterben lehet az eseménykezelőnek adatot átadni self._BroadcastNotify(self.NotifyIntVolt, (arg,) ) return map(lambda x,y=arg: y, range(self.count)) def NotifyIntVolt(self, interface, arg): #interface a kliens oldali sink IDispatch interfésze #IDispatch interfész Invoke metóduse dispid-vel hivatkozik az interfész metódusaira #arg-ban most az int értéke van, amit echo kapott interface.Invoke(interface.GetIDsOfNames("IntVolt"), 0, pythoncom.DISPATCH_METHOD, 0,arg) def Register(): """ Ez a legegyszerűbb regisztrációs módszer Python-ban. """ from win32com.server.register import UseCommandLine return UseCommandLine(cechoevt) if __name__=='__main__': Register()