예제 #1
0
        /// <summary>
        /// 自ウィンドウと思われるハンドルを取得
        /// </summary>
        /// <returns>Null if failed</returns>
        static public WindowHandle FindWindow()
        {
            // 自分自身のPIDを取得し、スレッドを取得
            System.Diagnostics.Process process = System.Diagnostics.Process.GetCurrentProcess();
            //return new WindowHandle(process.MainWindowHandle);	// ←これではダメだった。MainWindowHandle == 0 となった。

            int pid = process.Id;

            //Debug.Log("PID: " + pid);

#if UNITY_EDITOR
            // Gameビューを取得
            // 参考: https://qiita.com/MARQUE/items/292c9080a686d95af1a5
            var gameViewWin = UnityEditor.EditorWindow.GetWindow(System.Type.GetType("UnityEditor.GameView,UnityEditor"));

            // Gameビューににフォーカスを与えてから、アクティブなウィンドウを取得
            gameViewWin.Focus();
            //System.Threading.Thread.Sleep(100);
            IntPtr hwnd = WinApi.GetActiveWindow();

            var rootHwnd = hwnd;
            rootHwnd = WinApi.GetAncestor(hwnd, WinApi.GA_ROOT);

            WindowHandle gameWindow = new WindowHandle(rootHwnd);

            // 一応PIDをチェックし、自分一致したらそのウィンドウを使うことにして終了
            if (gameWindow.ProcessId == pid)
            {
                return(gameWindow);
            }
#else
            IntPtr hwnd;
#endif

            // アクティブウィンドウを取得する方法
            hwnd = WinApi.GetActiveWindow();
            if (hwnd == IntPtr.Zero)
            {
                return(null);
            }
            //Debug.Log("Active HWND:" + hwnd);

            WindowHandle window = new WindowHandle(hwnd);
            if (window.ProcessId != pid)
            {
                return(null);
            }
            return(window);


            //// 現存するウィンドウ一式を取得してPIDが一致するものを利用する方法
            //WindowHandle[] handles = FindWindows();
            //foreach (WindowHandle window in handles)
            //{
            //    Debug.Log(window);

            //    // PIDが一致するものを検索
            //    if (window.ProcessId == pid)
            //    {
            //        return window;
            //    }
            //}
            //return null;
        }