您的位置:首页 > 移动开发 > Unity3D

Unity3D 得到 主窗口句柄

2016-12-07 15:29 656 查看
public delegate bool WNDENUMPROC(IntPtr hwnd, uint lParam);

    [DllImport("user32.dll", SetLastError = true)]

    public static extern bool EnumWindows(WNDENUMPROC lpEnumFunc, uint lParam);

    [DllImport("user32.dll", SetLastError = true)]

    public static extern IntPtr GetParent(IntPtr hWnd);

    [DllImport("user32.dll")]

    public static extern uint GetWindowThreadProcessId(IntPtr hWnd, ref uint lpdwProcessId);

    [DllImport("kernel32.dll")]

    public static extern void SetLastError(uint dwErrCode);

    public static IntPtr GetProcessWnd()

    {

        IntPtr ptrWnd = IntPtr.Zero;

        uint pid = (uint)Process.GetCurrentProcess().Id;  // 当前进程 ID  

        bool bResult = EnumWindows(new WNDENUMPROC(delegate (IntPtr hwnd, uint lParam)

        {

            uint id = 0;

            if (GetParent(hwnd) == IntPtr.Zero)

            {

                GetWindowThreadProcessId(hwnd, ref id);

                if (id == lParam)    // 找到进程对应的主窗口句柄  

                {

                    ptrWnd = hwnd;   // 把句柄缓存起来  

                    SetLastError(0);    // 设置无错误  

                    return false;   // 返回 false 以终止枚举窗口  

                }

            }

            return true;

        }), pid);

        return (!bResult && Marshal.GetLastWin32Error() == 0) ? ptrWnd : IntPtr.Zero;

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  句柄 unity3d