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
标签:IntPtr,窗口,Unity3D,句柄,lParam,uint,hwnd,static,public 来源: https://www.cnblogs.com/dj1232090/p/14788244.html