// ウィンドウハンドルを渡すと、ウィンドウテキスト(ラベルなど)、クラス、スタイルを取得してWindowsクラスに格納して返す
        private static WindowData GetWindow(IntPtr hWnd)
        {
            var    textLen    = Win32Controller.GetWindowTextLength(hWnd);
            string windowText = null;

            if (textLen > 0)
            {
                //ウィンドウのタイトルを取得する
                var windowTextBuffer = new StringBuilder(textLen + 1);
                Win32Controller.GetWindowText(hWnd, windowTextBuffer, windowTextBuffer.Capacity);
                windowText = windowTextBuffer.ToString();
            }

            //ウィンドウのクラス名を取得する
            var classNameBuffer = new StringBuilder(256);

            Win32Controller.GetClassName(hWnd, classNameBuffer, classNameBuffer.Capacity);

            // スタイルを取得する
            var style = Win32Controller.GetWindowLong(hWnd, Win32Controller.GwlStyle);

            return(new WindowData()
            {
                HWnd = hWnd, Title = windowText, ClassName = classNameBuffer.ToString(), Style = style
            });
        }
        private static bool PostEnterKeyCharToProcess(IntPtr processHandle, int waitTime)
        {
            System.Threading.Thread.Sleep(waitTime);

            // 0xD:Enter
            return(Win32Controller.PostMessage(processHandle, Win32Controller.WmChar, 0x0000000D, 0x001C0001) != 0);
        }
        // 与えた親ウィンドウの直下にある子ウィンドウを列挙する(孫ウィンドウは見つけてくれない)
        private static IEnumerable <WindowData> EnumChildWindows(IntPtr hParentWindow)
        {
            var hWnd = IntPtr.Zero;

            while ((hWnd = Win32Controller.FindWindowEx(hParentWindow, hWnd, null, null)) != IntPtr.Zero)
            {
                yield return(GetWindow(hWnd));
            }
        }
        public static bool ActivateUplay()
        {
            var psh = GetUplayProcessHandle();

            if (psh == IntPtr.Zero)
            {
                return(false);
            }

            return(!Win32Controller.IsIconic(psh) || Win32Controller.ShowWindow(psh, 1));
        }
        private static bool PostSpaceKeyInputToProcess(IntPtr processHandle, int waitTime)
        {
            System.Threading.Thread.Sleep(waitTime);

            // 0x20:Space
            if (Win32Controller.PostMessage(processHandle, Win32Controller.WmKeyDown, 0x00000020, 0x00390001) != 0)
            {
                System.Threading.Thread.Sleep(waitTime);
                return(Win32Controller.PostMessage(processHandle, Win32Controller.WmKeyUp, 0x00000020, 0xC0390001) != 0);
            }

            return(false);
        }
        private static bool PostEnterKeyInputToProcess(IntPtr processHandle, int waitTime)
        {
            System.Threading.Thread.Sleep(waitTime);

            // 0xD:Enter
            if (Win32Controller.PostMessage(processHandle, Win32Controller.WmKeyDown, 0x0000000D, 0x001C0001) != 0)
            {
                System.Threading.Thread.Sleep(waitTime);
                return(Win32Controller.PostMessage(processHandle, Win32Controller.WmKeyUp, 0x0000000D, 0xC01C0001) != 0);
            }

            return(false);
        }
        /// <summary>
        /// 与えられたプロセスに対し、約waitTime[ms]後にクライアント座標(x,y)の位置にマウスクリックイベントを起こす
        /// </summary>
        /// <param name="processHandle">
        /// The process Handle.
        /// </param>
        /// <param name="waitTime">
        /// The wait Time.
        /// </param>
        /// <param name="x">
        /// The x.
        /// </param>
        /// <param name="y">
        /// The y.
        /// </param>
        /// <returns>
        /// The <see cref="bool"/>.
        /// </returns>
        private static bool PostMlbClickToProcess(IntPtr processHandle, int waitTime, ushort x, ushort y)
        {
            // wait
            System.Threading.Thread.Sleep(waitTime);

            // マウスクリックダウン
            if (Win32Controller.PostMessage(
                    processHandle,
                    Win32Controller.WmLButtonDown,
                    Win32Controller.MkLBotton,
                    Win32Controller.MakeLParam(x, y)) == 0)
            {
                return(false);
            }

            System.Threading.Thread.Sleep(waitTime);

            // マウスクリックアップ
            return(Win32Controller.PostMessage(
                       processHandle,
                       Win32Controller.WmLButtonUp,
                       0x00000000,
                       Win32Controller.MakeLParam(x, y)) != 0);
        }
        private static bool PostKeyCharToProcess(IntPtr processHandle, string keys, int intervalTime)
        {
            foreach (var item in keys)
            {
                System.Threading.Thread.Sleep(intervalTime);

                // 0x20:Space
                if (Regex.IsMatch(item.ToString(), @"^ $"))
                {
                    if (Win32Controller.PostMessage(processHandle, Win32Controller.WmChar, 0x00000020, 0x001E0001) == 0)
                    {
                        return(false);
                    }

                    continue;
                }

                // 0x2E:Dot
                if (Regex.IsMatch(item.ToString(), @"^\.$"))
                {
                    if (Win32Controller.PostMessage(processHandle, Win32Controller.WmChar, 0x0000002E, 0x001E0001) == 0)
                    {
                        return(false);
                    }

                    continue;
                }

                // 0x40:@
                if (Regex.IsMatch(item.ToString(), @"^@$"))
                {
                    if (Win32Controller.PostMessage(processHandle, Win32Controller.WmChar, 0x00000040, 0x001E0001) == 0)
                    {
                        return(false);
                    }

                    continue;
                }

                // 0x5F:_
                if (Regex.IsMatch(item.ToString(), @"^_$"))
                {
                    if (Win32Controller.PostMessage(processHandle, Win32Controller.WmChar, 0x0000005F, 0x00730001) == 0)
                    {
                        return(false);
                    }

                    continue;
                }

                // 0x2D:-
                if (Regex.IsMatch(item.ToString(), @"^-$"))
                {
                    if (Win32Controller.PostMessage(processHandle, Win32Controller.WmChar, 0x0000002D, 0x000C0001) == 0)
                    {
                        return(false);
                    }

                    continue;
                }

                // 0x21:!
                if (Regex.IsMatch(item.ToString(), @"^!$"))
                {
                    if (Win32Controller.PostMessage(processHandle, Win32Controller.WmChar, 0x00000021, 0x00020001) == 0)
                    {
                        return(false);
                    }

                    continue;
                }

                // 0x3F:?
                if (Regex.IsMatch(item.ToString(), @"^\?$"))
                {
                    if (Win32Controller.PostMessage(processHandle, Win32Controller.WmChar, 0x0000003F, 0x00350001) == 0)
                    {
                        return(false);
                    }

                    continue;
                }

                // 0x30:0
                if (Regex.IsMatch(item.ToString(), @"^[0-9]$"))
                {
                    uint wparam = 0x00000030 + (uint)(item - '0');
                    if (Win32Controller.PostMessage(processHandle, Win32Controller.WmChar, wparam, 0x001E0001) == 0)
                    {
                        return(false);
                    }

                    continue;
                }

                // 0x41:A
                if (Regex.IsMatch(item.ToString(), @"^[A-Z]$"))
                {
                    uint wparam = 0x00000041 + (uint)(item - 'A');
                    if (Win32Controller.PostMessage(processHandle, Win32Controller.WmChar, wparam, 0x001E0001) == 0)
                    {
                        return(false);
                    }

                    continue;
                }

                // 0x61:a
                if (Regex.IsMatch(item.ToString(), @"^[a-z]$"))
                {
                    uint wparam = 0x00000061 + (uint)(item - 'a');
                    if (Win32Controller.PostMessage(processHandle, Win32Controller.WmChar, wparam, 0x001E0001) == 0)
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }