关于C#中怎样获取或设置其它软件窗体句柄?的问题一直闲扰着我,本人上百度查过无数次,可就是没有看到这方面的介绍!请问?哪位朋友能帮个忙解决一下吗??谢谢!

解决方案 »

  1.   

    获取可以用
    EnumWindow api
    窗口句柄是由系统分配的,用户是无法设置的
      

  2.   

    using   System; 
    using   System.Runtime.InteropServices; 
    namespace   tstfindwindow 

    ///   <summary> 
    ///   Class1   的摘要说明。 
    ///   </summary> 
    class   Class1 

        [DllImport( "User32.dll ")] 
        public   static   extern   System.IntPtr   FindWindowEx(   System.IntPtr   parent   ,   System.IntPtr   childe   ,       string   strclass   ,string   strname   ); 
        ///   <summary> 
        ///   应用程序的主入口点。 
        ///   </summary> 
        [STAThread] 
        static   void   Main(string[]   args) 
        { 
        // 
        //   TODO:   在此处添加代码以启动应用程序 
        // 
        IntPtr p=FindWindowEx(System.IntPtr.Zero,System.IntPtr.Zero,null,"窗口标题");   
        } 
      

  3.   

    1.可以根据窗体的标题得到相应窗体的句柄,调用API:FindWindow,FindWindowEx.
    2.对于那那些无法根据窗体标题得到窗体的句柄,可以根据软件的进程名来得到进程ID,然后根据进程ID来枚举所有窗体,得到窗体句柄. Process[]  allProcesses   =   Process.GetProcesses();    
      foreach(Process   myProcess   in   allProcesses)    
      {    
         if(myProcess.ProcessName=="进程名")    
         {    
            //在这里调用API:EnumWindows 
          
         }    
      }
      

  4.   

    1.可以根据窗体的标题得到相应窗体的句柄,调用API:FindWindow,FindWindowEx. 
    2.对于那那些无法根据窗体标题得到窗体的句柄,可以根据软件的进程名来得到进程ID,然后根据进程ID来枚举所有窗体,得到窗体句柄. 
    madogao 是1
    dk385  是2