z474243930 2017-11-30 14:09 采纳率: 33.3%
浏览 5637
已采纳

c#已知窗体句柄,如何遍历出所有控件句柄

根据网上提供代码,可以用鼠标获取指定窗体句柄,
现在想遍历指定窗体上所有控件的句柄,希望提供代码,
找了一天的帖子了,请勿发参考链接,直接上代码。小白。。。

  • 写回答

3条回答 默认 最新

  • z474243930 2017-12-01 03:46
    关注

    答案出来了:https://zhidao.baidu.com/question/1575352645104568900.html
    说到做到,发代码,链接为源地址,下面我备注一下而已

    
    List<string> list = new List<string>();
            [DllImport("user32.dll")]
            [return: MarshalAs(UnmanagedType.Bool)]
            public static extern bool EnumChildWindows(IntPtr hwndParent, EnumWindowsProc lpEnumFunc, IntPtr lParam);
    
            [DllImport("user32.dll")]
            public static extern int GetWindowText(int hWnd, IntPtr lpString, int nMaxCount);
    
            private void toolStripButton5_Click(object sender, EventArgs e)
            {
                list.Clear();
                EnumChildWindows(this.Handle, this.EnumWindowsMethod, IntPtr.Zero);
                //这里得到了所有的子窗口list.Count;
                            //this.Handle改成你已得到的窗体句柄
            }
    
            private bool EnumWindowsMethod(int hWnd, int lParam)
            {
                IntPtr lpString = Marshal.AllocHGlobal(200);
                GetWindowText(hWnd, lpString, 200);//这里获得控件text
                var text = Marshal.PtrToStringAnsi(lpString);
                if (!string.IsNullOrWhiteSpace(text))
                    list.Add(text);//添加到list,如果要获得句柄就新建list添加hWnd
                return true;
            }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何使用SC92F8003固件库解析私有协议数据?
  • ¥15 如何在音频中嵌入字符串(水印)信息进行传递
  • ¥30 plc怎么以设计说明书申请软著
  • ¥15 硬盘识别不了,需要初始化,可我的数据怎么办
  • ¥15 lvm2被mask了,怎么unmask都没用(标签-ubuntu|关键词-apt)
  • ¥15 交叉注意力机制的残差问题
  • ¥15 微信小程序:渲染收货地址时页面不显示
  • ¥20 win7 64位DirectShow提示初始化失败如何解决?
  • ¥15 关于Java对接海康威视车牌识别一体机SDK是否需要固定外网的IP?
  • ¥15 Linux扩容时,格式化卡住了:vgdispaly查看卷组信息,没有输出