获取进程/主窗口的句柄
2022/2/14 7:14:13
本文主要是介绍获取进程/主窗口的句柄,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
获取进程/主窗口的句柄
通过Process的MainWindowHandle的方式不一定获取到到句柄,因此我们需要结束Win32的Api来来获取
Win32的Api中有EnumWindows可以枚举中所有的窗体,通过继承id和进程名的方式进行匹配,便可以获取到指定的进程的主窗体的句柄
具体的代码如下:
/// <summary> /// 枚举窗体的回调 /// </summary> /// <param name="hwnd"></param> /// <param name="lParam"></param> /// <returns></returns> public delegate bool EnumWindowsCallBack(IntPtr hwnd, IntPtr lParam); /// <summary> /// 枚举出窗体 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> [DllImport("user32")] public static extern int EnumWindows(EnumWindowsCallBack x, IntPtr y); /// <summary> /// 获取窗体的名称 /// </summary> /// <param name="hWnd"></param> /// <param name="lpString"></param> /// <param name="nMaxCount"></param> /// <returns></returns> [DllImport("user32.dll")] public static extern int GetWindowTextW(IntPtr hWnd, [MarshalAs(UnmanagedType.LPWStr)] StringBuilder lpString, int nMaxCount); [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID); /// <summary> /// 枚举方式获取句柄 /// </summary> /// <param name="process"></param> public static IntPtr EnumWindows(Process process) { IntPtr msgPtr = Marshal.StringToHGlobalAnsi(_processName + "^" + process.Id); IntPtr handle=IntPtr.Zero; EnumWindows(new EnumWindowsCallBack((hwnd, lpam) => { var msgs = (Marshal.PtrToStringAnsi(lpam)).Split('^'); if (msgs.Length < 2) return false;//停止枚举 string msg = msgs[0]; var lpid = int.Parse(msgs[1]); StringBuilder sb = new StringBuilder(256); GetWindowTextW(hwnd, sb, sb.Capacity); GetWindowThreadProcessId(hwnd, out int pid); if (sb != null && sb.ToString().Equals(msg) && pid == lpid) { handle= hwnd; return false; //停止枚举 } return true;//继续枚举 }), msgPtr); return handle; }
通过以上的方式,便可以获取我们想要的进程的主窗体句柄了
这篇关于获取进程/主窗口的句柄的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?
- 2024-05-09企业src漏洞挖掘-有意思的命令执行
- 2024-05-08阿里云域名注册流程,分享给第一次购买域名的新手站长!
- 2024-05-082024年,行业变动下的程序员应该首先学习哪种编程语言?