public static IDictionary <int, object> GetRunningE3SeriesApplications()
        {
            var dict     = new Dictionary <int, object>();
            var monikers = new IMoniker[1];

            WinApi.CreateBindCtx(0, out var ctx);

            ctx.GetRunningObjectTable(out var runningObjectTable);
            runningObjectTable.EnumRunning(out var monikerEnumerator);
            monikerEnumerator.Reset();

            while (monikerEnumerator.Next(1, monikers, IntPtr.Zero) == 0)
            {
                monikers[0].GetDisplayName(ctx, null, out var runningObjectName);

                if (!runningObjectName.StartsWith("!E3Application", StringComparison.InvariantCultureIgnoreCase))
                {
                    continue;
                }

                int index = runningObjectName.IndexOf(':');
                if (index == -1)
                {
                    continue;
                }

                runningObjectTable.GetObject(monikers[0], out var runningObjectVal);

                dict.Add(int.Parse(runningObjectName.Substring(index + 1)), runningObjectVal);
            }

            return(dict);
        }