コード例 #1
0
ファイル: WindowFactory.cs プロジェクト: zyj0021/WinApi
        public static void DestroyAllWindows(string className)
        {
            IntPtr windowPtr;

            do
            {
                windowPtr = User32Methods.FindWindow(className, null);
                User32Methods.DestroyWindow(windowPtr);
            } while (windowPtr != IntPtr.Zero);
        }
コード例 #2
0
        private (TwsWindowStatus, IntPtr) TwsWindowState(Process process, TwsWatchDogOption option)
        {
            process.Refresh();

            var MainWindow = process.MainWindowHandle;

            if (MainWindow == IntPtr.Zero)
            {
                return(TwsWindowStatus.MainWindowIsNotDrawn, IntPtr.Zero);
            }

            IntPtr LoginWindow;

            if (process.MainWindowTitle == option.LoginWindow.Header)
            {
                LoginWindow = process.MainWindowHandle;
            }
            else
            {
                LoginWindow = User32Methods.FindWindow(option.LoginWindow.Class, option.LoginWindow.Header);
            }

            IntPtr AuthenticatingWindow;

            if (process.MainWindowTitle == option.AuthenticatingWindow.Header)
            {
                AuthenticatingWindow = process.MainWindowHandle;
            }
            else
            {
                AuthenticatingWindow = User32Methods.FindWindow(option.AuthenticatingWindow.Class, option.AuthenticatingWindow.Header);
            }

            IntPtr StartingApplicationWindow;

            if (process.MainWindowTitle == option.StartingApplicationWindow.Header)
            {
                StartingApplicationWindow = process.MainWindowHandle;
            }
            else
            {
                StartingApplicationWindow = User32Methods.FindWindow(option.StartingApplicationWindow.Class, option.StartingApplicationWindow.Header);
            }

            var EnterSecurityCodeWindow       = User32Methods.FindWindow(option.EnterSecurityCodeWindow.Class, option.EnterSecurityCodeWindow.Header);
            var LoginFailedWindow             = User32Methods.FindWindow(option.LoginFailedWindow.Class, option.LoginFailedWindow.Header);
            var ExistingSessionDetectedWindow = User32Methods.FindWindow(option.ExistingSessionDetectedWindow.Class, option.ExistingSessionDetectedWindow.Header);
            var ReloginIsRequiredWindow       = User32Methods.FindWindow(option.ReloginIsRequiredWindow.Class, option.ReloginIsRequiredWindow.Header);

            logger.LogDebug("MainWindow: {0}, LoginWindow: {1}, AuthenticatingWindow: {2}, StartingApplicationWindow: {3}, EnterSecurityCodeWindow: {4}, LoginFailedWindow: {5}, ExistingSessionDetectedWindow: {6}, ReloginIsRequiredWindow: {7}", MainWindow, LoginWindow, AuthenticatingWindow, StartingApplicationWindow, EnterSecurityCodeWindow, LoginFailedWindow, ExistingSessionDetectedWindow, ReloginIsRequiredWindow);

            // Если есть окно процесса аутентификации, то необходимо проверить наличие других окон
            if (LoginFailedWindow != IntPtr.Zero)
            {
                return(TwsWindowStatus.AuthentificateFailed, LoginFailedWindow);
            }

            // Ппоявилось окно ввода дополнительной авторизации
            if (EnterSecurityCodeWindow != IntPtr.Zero)
            {
                return(TwsWindowStatus.EnterSecurityCode, EnterSecurityCodeWindow);
            }

            // Появилось окно с сообщением о том, что уже залогинен другой пользователь
            if (ExistingSessionDetectedWindow != IntPtr.Zero)
            {
                return(TwsWindowStatus.EnterSecurityCode, ExistingSessionDetectedWindow);
            }

            // Вылезло окно с сообщение о том, что нужно произвести авторизацию заново
            if (ReloginIsRequiredWindow != IntPtr.Zero)
            {
                return(TwsWindowStatus.ReloginIsRequired, ReloginIsRequiredWindow);
            }

            // происходит процесс загрузки приложения после успешной авторизации
            if (StartingApplicationWindow != IntPtr.Zero)
            {
                return(TwsWindowStatus.StartingApplication, StartingApplicationWindow);
            }

            // Происходит процесс аутентификации после ввода логина с паролем
            if (AuthenticatingWindow != IntPtr.Zero)
            {
                return(TwsWindowStatus.AuthentificateProcess, AuthenticatingWindow);
            }

            // Если есть окно Login и нет окна процесса авторизации, значит терминал ждёт ввода логина с паролем
            if (LoginWindow != IntPtr.Zero)
            {
                // Если нет процесса авторизации, значит терминал запросил логин с паролем
                if (AuthenticatingWindow == IntPtr.Zero)
                {
                    return(TwsWindowStatus.LoginInput, LoginWindow);
                }
                else
                {
                    return(TwsWindowStatus.AuthentificateProcess, AuthenticatingWindow);
                }
            }
            else
            {
                if (process.MainWindowHandle != IntPtr.Zero)
                {
                    return(TwsWindowStatus.Success, process.MainWindowHandle);
                }
            }

            // Статус терминала неизвестен
            return(TwsWindowStatus.UnknownStatus, IntPtr.Zero);
        }
コード例 #3
0
 public static IntPtr FindWindow(string lpClassName, string lpWindowName)
 {
     return(User32Methods.FindWindow(lpClassName, lpWindowName));
 }