C#获取句柄

 //获取窗口标题
        [DllImport("user32", SetLastError = true)]
        public static extern int GetWindowText(
            IntPtr hWnd,//窗口句柄
            StringBuilder lpString,//标题
            int nMaxCount //最大值
            );

        //获取类的名字
        [DllImport("user32.dll")]
        private static extern int GetClassName(
            IntPtr hWnd,//句柄
            StringBuilder lpString, //类名
            int nMaxCount //最大值
            );

        //根据坐标获取窗口句柄
        [DllImport("user32")]
        private static extern IntPtr WindowFromPoint(
        Point Point  //坐标
        );

        private void timer1_Tick(object sender, EventArgs e)
        {
            int x = Cursor.Position.X;
            int y = Cursor.Position.Y;
            Point p = new Point(x, y);
            IntPtr formHandle = WindowFromPoint(p);//得到窗口句柄
            StringBuilder title = new StringBuilder(256);
            GetWindowText(formHandle, title, title.Capacity);//得到窗口的标题
            StringBuilder className = new StringBuilder(256);
            GetClassName(formHandle, className, className.Capacity);//得到窗口的句柄
            this.textBox1.Text = title.ToString();
            this.textBox2.Text = formHandle.ToString();
            this.textBox3.Text = className.ToString();

        }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中,可以使用 Win32 API 函数 `EnumChildWindows` 来获取一个句柄下所有子句柄。 具体步骤如下: 1. 引入 `user32.dll`,在代码文件的头部引入以下代码: ``` using System.Runtime.InteropServices; ``` 2. 声明 `EnumChildWindows` 函数,用于枚举子窗口: ``` [DllImport("user32.dll")] public static extern bool EnumChildWindows(IntPtr hWndParent, EnumChildProc lpEnumFunc, IntPtr lParam); ``` 其中 `EnumChildProc` 是一个回调函数,用于处理每个子窗口,`lParam` 是传递给回调函数的自定义参数。 3. 实现回调函数: ``` public delegate bool EnumChildProc(IntPtr hWnd, IntPtr lParam); public static bool EnumChildCallback(IntPtr hWnd, IntPtr lParam) { // 处理子窗口 hWnd return true; // 返回 true 继续枚举,返回 false 停止枚举 } ``` 4. 调用 `EnumChildWindows` 函数: ``` EnumChildWindows(hWndParent, new EnumChildProc(EnumChildCallback), IntPtr.Zero); ``` 其中 `hWndParent` 是父窗口的句柄,`EnumChildCallback` 是回调函数的委托实例,`IntPtr.Zero` 是自定义参数。 完整示例代码如下: ``` using System; using System.Runtime.InteropServices; public class EnumChildWindowsExample { [DllImport("user32.dll")] public static extern bool EnumChildWindows(IntPtr hWndParent, EnumChildProc lpEnumFunc, IntPtr lParam); public delegate bool EnumChildProc(IntPtr hWnd, IntPtr lParam); public static bool EnumChildCallback(IntPtr hWnd, IntPtr lParam) { // 处理子窗口 hWnd Console.WriteLine($"Child window handle: {hWnd}"); return true; // 返回 true 继续枚举,返回 false 停止枚举 } public static void Main() { IntPtr hWndParent = // 父窗口句柄 EnumChildWindows(hWndParent, new EnumChildProc(EnumChildCallback), IntPtr.Zero); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值