Exemplo n.º 1
0
        private static AutomationEventHandler GetOpenWindowHandler(int processId)
        {
            return((sender, e) =>
            {
                AutomationElement element = sender as AutomationElement;
                string processName = Process.GetProcessById(element.Current.ProcessId).ProcessName;
                if (element.Current.ProcessId != processId &&
                    processName != Constants.pptProcess)
                {
                    return;
                }
                IntPtr handle = new IntPtr(element.Current.NativeWindowHandle);
                string windowName = WindowUtil.GetWindowTitle(handle);
                if (windowName == "")
                {
                    Logger.Log("Titleless window in windowwatcher: " +
                               $"pID: {element.Current.ProcessId}\n" +
                               $"process name: {processName}\n" +
                               $"HWND: {handle}");
                    return;
                }
                lastOpenWindowName = windowName;

                WindowOpenTrigger resultTrigger = GetWindowTrigger(windowName);
                if (resultTrigger == null)
                {
                    WindowUtil.CloseWindow(handle);
                    //MessageBox.Show(windowName);
                    return;
                }
                resultTrigger.resultingWindow = handle;
                resultTrigger.Set();
            });
        }
Exemplo n.º 2
0
        private static WindowOpenTrigger GetWindowTrigger(string windowName)
        {
            WindowOpenTrigger trigger = windowTriggers.FirstOrDefault(o => !o.Value.IsSet && o.Key == windowName).Value;

            if (trigger == null && whitelist.Contains(windowName))
            {
                trigger = new WindowOpenTrigger(false);
                whitelistInstances.Add(windowName, trigger);
            }
            return(trigger);
        }
Exemplo n.º 3
0
        public static IntPtr Push(string name, Action action, int timeout = 5000)
        {
            WindowOpenTrigger whitelistTrigger = whitelistInstances.FirstOrDefault(o => o.Key == name).Value;

            if (whitelistTrigger != null)
            {
                whitelistInstances.Remove(name);
                return(whitelistTrigger.resultingWindow);
            }
            WindowOpenTrigger trigger = new WindowOpenTrigger(false);

            windowTriggers.Add(name, trigger);
            Task task = new Task(action);

            task.Start();
            trigger.Wait(timeout);
            windowTriggers.Remove(name);
            Assert.IsTrue(trigger.IsSet, $"Timeout of {timeout}ms has been reached.{lastOpenWindowName}");
            Assert.AreNotEqual(trigger.resultingWindow, IntPtr.Zero, "Found null window handle");
            tasks.Push(task);
            return(trigger.resultingWindow);
        }