已知某个窗口句柄,怎样利用EnumChildProc和EnumChildWindows函数遍历得到此窗口的所有子窗口句柄谢谢!!!

解决方案 »

  1.   

    http://topic.csdn.net/t/20050402/16/3903460.html
      

  2.   

    sing   System;  
      using   System.Drawing;  
      using   System.Collections;  
      using   System.ComponentModel;  
      using   System.Windows.Forms;  
      using   System.Data;  
      using   System.Threading   ;  
      using   System.Diagnostics   ;  
      using   Microsoft.Win32   ;  
      using   System.Text   ;  
      using   System.Runtime.InteropServices   ;  
      namespace   Server1  
      {  
      ///   <summary>  
      ///   Form1   的摘要说明。  
      ///   </summary>  
       
      public   class   Form1   :   System.Windows.Forms.Form  
      {  
      private   System.Windows.Forms.Button   button1;  
      private   System.Windows.Forms.Timer   timer1;  
      private   System.Windows.Forms.ListBox   listBox1;  
      private   System.ComponentModel.IContainer   components;  
      public   delegate   bool   EnumChildWindowsProc(IntPtr   hwnd,   long   lParam);  
      public   delegate   bool   EnumWindowsProc(IntPtr   hWnd,   IntPtr   lParam);  
       
      public   Form1()  
      {  
      //  
      //   Windows   窗体设计器支持所必需的  
      //  
      InitializeComponent();  
       
      //  
      //   TODO:   在   InitializeComponent   调用后添加任何构造函数代码  
      //  
      }  
       
      ///   <summary>  
      ///   清理所有正在使用的资源。  
      ///   </summary>  
      protected   override   void   Dispose(   bool   disposing   )  
      {  
      if(   disposing   )  
      {  
      if   (components   !=   null)    
      {  
      components.Dispose();  
      }  
      }  
      base.Dispose(   disposing   );  
      }  
       
      #region   Windows   Form   Designer   generated   code  
      ///   <summary>  
      ///   设计器支持所需的方法   -   不要使用代码编辑器修改  
      ///   此方法的内容。  
      ///   </summary>  
      private   void   InitializeComponent()  
      {  
      this.components   =   new   System.ComponentModel.Container();  
      this.button1   =   new   System.Windows.Forms.Button();  
      this.timer1   =   new   System.Windows.Forms.Timer(this.components);  
      this.listBox1   =   new   System.Windows.Forms.ListBox();  
      this.SuspendLayout();  
      //    
      //   button1  
      //    
      this.button1.Location   =   new   System.Drawing.Point(104,   128);  
      this.button1.Name   =   "button1";  
      this.button1.TabIndex   =   0;  
      this.button1.Text   =   "button1";  
      this.button1.Click   +=   new   System.EventHandler(this.button1_Click);  
      //    
      //   timer1  
      //    
      this.timer1.Tick   +=   new   System.EventHandler(this.timer1_Tick);  
      //    
      //   listBox1  
      //    
      this.listBox1.ItemHeight   =   12;  
      this.listBox1.Location   =   new   System.Drawing.Point(120,   16);  
      this.listBox1.Name   =   "listBox1";  
      this.listBox1.Size   =   new   System.Drawing.Size(120,   88);  
      this.listBox1.TabIndex   =   1;  
      //    
      //   Form1  
      //    
      this.AutoScaleBaseSize   =   new   System.Drawing.Size(6,   14);  
      this.ClientSize   =   new   System.Drawing.Size(292,   266);  
      this.Controls.AddRange(new   System.Windows.Forms.Control[]   {  
          this.listBox1,  
          this.button1});  
      this.Name   =   "Form1";  
      this.Text   =   "Form1";  
      this.Load   +=   new   System.EventHandler(this.Form1_Load);  
      this.ResumeLayout(false);  
       
      }  
      #endregion  
       
      ///   <summary>  
      ///   应用程序的主入口点。  
      ///   </summary>  
      [STAThread]  
      static   void   Main()    
      {  
      Application.Run(new   Form1());  
      }  
      private   static   void   StartListening()  
      {  
      Process   []   f=Process.GetProcesses();  
      foreach   (Process   f2   in   f)  
      {  
      if(f2.ProcessName.Equals("WSetValue")&&f2.MainWindowTitle.Equals("Form1"))  
      {  
      IntPtr   hWndParent=f2.MainWindowHandle;  
      EnumChildWindowsProc   myEnumChild   =   new   EnumChildWindowsProc(EumWinChiPro);  
                  try  
                                {  
                                  EnumChildWindows(hWndParent,myEnumChild,0);  
                                }  
                catch(Exception){}  
      }  
      }  
      }  
       
      private   void   button1_Click(object   sender,   System.EventArgs   e)  
      {  
      try  
      {  
      StartListening();  
      //GetWindows();  
      }  
      catch(Exception){}  
      }  
       
      private   void   Form1_Load(object   sender,   System.EventArgs   e)  
      {  
       
      }  
       
      private   void   timer1_Tick(object   sender,   System.EventArgs   e)  
      {  
      StartListening();  
      }  
      [DllImport("user32.dll")]  
      public   static   extern   long   EnumChildWindows(IntPtr   hWndParent,   EnumChildWindowsProc   lpEnumFunc,long   lParam);    
      [DllImport("user32.dll")]  
      public   static   extern   long   GetClassName(IntPtr   hwnd,StringBuilder   lpClassName,long   nMaxCount);  
      private   static   bool   EumWinChiPro(IntPtr   hWnd,long   lParam)  
      {  
      StringBuilder   s=new   StringBuilder   (256);  
      GetClassName(hWnd,s,257);  
      string   ss=s.ToString   ();  
      ss=ss.Trim();  
      MessageBox.Show(ss);  
      return   true;  
      }  
      }  
      }   参考