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

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 镍氢电池充电器设计实物使用原理
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?