zoukankan      html  css  js  c++  java
  • Unity3D 获取主窗口句柄

    using System;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    using System.Windows.Forms;
     
    public class C {
     
        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;
        }
     
    }

    来源:https://blog.csdn.net/linkrules/article/details/50420797

  • 相关阅读:
    规则引挚NxBRE文档纪要在流引挚与推论引挚取舍
    去除特殊字符
    C文件操作
    计算球面上两点弧长
    已知圆心和两点画圆弧(算法)(计算机图形)(C#)
    摄像机矩阵变换
    DX之“HelloWord”
    绘制箭头
    绘制二维图片
    绘制三角形
  • 原文地址:https://www.cnblogs.com/dj1232090/p/14788244.html
Copyright © 2011-2022 走看看