DECLARE INTEGER CreateEvent IN WIN32API ; INTEGER lpEventAttributes, ; SHORT bManualReset, ; SHORT bInitialState, ; STRING @ lpName DECLARE INTEGER GetLastError IN Win32API DECLARE CloseHandle IN Win32API INTEGER hObject nEh = CreateEvent(0,0,1, PROGRAM(0) + '.EVENT') IF GetLastError() = 183 OR nEh = 0 * There's an instance running already (183) or the Event can't be defined * So don't do it; do release the handle, since it's harmless and should * be done rather than relying on Windows to clean up after itself =CloseHandle(nEh) QUIT ENDIF * While shutting down, issue: =CloseHandle(nEh)This has the advantage that it derives it's Event name from the executable, and if you do forget to issue a CloseHandle(), it still releases the Event object without bleeding, and the Event object completely disappears automagically when no remaining Event refs exist. CLOSE ALL will release the Event. You can use the Event for synchronizing several processes or thread using WaitForSingleObject() to wait on someone to 'raise' the event if you need some sort of event monitoring. Works under all OS versions I tested - not checked under Win95, but does work on Win98 and ME, as well as NT and 2K.