| # The oldest AppleEvent test program. |
| # Its function has been overtaken by echo.py and tell.py. |
| |
| import AE |
| from AppleEvents import * |
| import Evt |
| from Events import * |
| import struct |
| import aetools |
| import macfs |
| import sys |
| import MacOS |
| |
| MacOS.EnableAppswitch(0) |
| |
| def aehandler(request, reply): |
| tosend = [] |
| print 'request:', aetools.unpackevent(request) |
| param = request.AEGetParamDesc(keyDirectObject, typeWildCard) |
| if param.type == typeAEList: |
| n = param.AECountItems() |
| print 'List has', n, 'items' |
| for i in range(1, 1+n): |
| type, item = param.AEGetNthDesc(i, typeFSS) |
| data = item.data |
| print 'item', i, ':', type, item.type, len(data), 'bytes' |
| vol, dir, fnlen = struct.unpack('hlb', data[:7]) |
| filename = data[7:7+fnlen] |
| print 'vol:', vol, '; dir:', dir, '; filename:', `filename` |
| print 'full path:', macfs.FSSpec((vol,dir,filename)).as_pathname() |
| tosend.append(item) |
| else: |
| pass |
| print 'param:', (param.type, param.data[:20]), param.data[20:] and '...' |
| if tosend: |
| passtothink(tosend) |
| |
| |
| def passtothink(list): |
| target = AE.AECreateDesc(typeApplSignature, 'KAHL') |
| event = AE.AECreateAppleEvent(kCoreEventClass, |
| kAEOpenDocuments, |
| target, |
| kAutoGenerateReturnID, |
| kAnyTransactionID) |
| aetools.packevent(event, {keyDirectObject: list}) |
| reply = event.AESend(kAENoReply | kAEAlwaysInteract | kAECanSwitchLayer, |
| kAENormalPriority, |
| kAEDefaultTimeout) |
| #print "Reply:", aetools.unpackevent(reply) |
| return |
| event = AE.AECreateAppleEvent(kCoreEventClass, |
| kAEOpenApplication, |
| target, |
| kAutoGenerateReturnID, |
| kAnyTransactionID) |
| reply = event.AESend(kAENoReply | kAEAlwaysInteract | kAECanSwitchLayer, |
| kAENormalPriority, |
| kAEDefaultTimeout) |
| |
| def unihandler(req, rep): |
| print 'unihandler' |
| aehandler(req, rep) |
| |
| quit = 0 |
| def quithandler(req, rep): |
| global quit |
| quit = 1 |
| |
| def corehandler(req, rep): |
| print 'core event!' |
| parameters, attributes = aetools.unpackevent(req) |
| print "event class =", attributes['evcl'] |
| print "event id =", attributes['evid'] |
| print 'parameters:', parameters |
| # echo the arguments, to see how Script Editor formats them |
| aetools.packevent(rep, parameters) |
| |
| def wildhandler(req, rep): |
| print 'wildcard event!' |
| parameters, attributes = aetools.unpackevent(req) |
| print "event class =", attributes['evcl'] |
| print "event id =", attributes['evid'] |
| print 'parameters:', parameters |
| |
| AE.AEInstallEventHandler(typeAppleEvent, kAEOpenApplication, aehandler) |
| AE.AEInstallEventHandler(typeAppleEvent, kAEOpenDocuments, aehandler) |
| AE.AEInstallEventHandler(typeAppleEvent, kAEPrintDocuments, aehandler) |
| AE.AEInstallEventHandler(typeAppleEvent, kAEQuitApplication, quithandler) |
| AE.AEInstallEventHandler(typeAppleEvent, typeWildCard, unihandler) |
| AE.AEInstallEventHandler('core', typeWildCard, corehandler) |
| #AE.AEInstallEventHandler(typeWildCard, typeWildCard, wildhandler) |
| |
| |
| def main(): |
| global quit |
| quit = 0 |
| while not quit: |
| ok, e = Evt.WaitNextEvent(-1, 60) |
| if ok: |
| print 'Event:', e |
| if e[0] == 23: # kHighLevelEvent |
| AE.AEProcessAppleEvent(e) |
| elif e[0] == keyDown and chr(e[1]&0xff) == '.' and e[4]&cmdKey: |
| raise KeyboardInterrupt, "Command-Period" |
| else: |
| MacOS.HandleEvent(e) |
| |
| if __name__ == '__main__': |
| main() |
| |
| print "This module is obsolete -- use echo.py or tell.py ..." |