还是从一个程序控制另一个程序的问题
代码如下: 
 [DllImport( "user32.dll ")] 
                         public   static   extern   IntPtr   FindWindowEx(IntPtr   hwndParent,   IntPtr   hwndChildAfter,   string   lpszClass,   string   lpszWindow);   
 [DllImport( "user32.dll ",   CharSet   =   CharSet.Auto)] 
                         public   static   extern   IntPtr   PostMessage(IntPtr   hwnd,   int   wMsg,   IntPtr   wParam,   IntPtr   lParam);   
                         private   void   button1_Click(object   sender,   EventArgs   e) 
                         { 
                                     Process   p   =   Process.Start(textBoxNewFormLocation.Text); 
                                     IntPtr   ActiveWindowHandle   =   p.MainWindowHandle; 
                                     IntPtr   hwnd_button   =   FindWindowEx(ActiveWindowHandle,   new   IntPtr(0),   null,    "button4 ");                                     
                                     const   int   BM_CLICK   =   0x00F5; 
                                     Message   msg   =   Message.Create(hwnd_button,   BM_CLICK,   new   IntPtr(0),   new   IntPtr(0)); 
                                     PostMessage(msg.HWnd,   msg.Msg,   msg.WParam,   msg.LParam);    
                         }     
 问题是: 
 当被控制的程序中控件在tabcontrol上的时候,不能找到,因为FindWindowEx使用的是按text而不是name搜索,tabcontrol没有text.... 
 tabcontrol--> tabpage--> groupbox--> button 
 第一步都走不通,后面的自然没办法了。 
 第二个问题:控制端如果把button放到一个tabcontrol上也不能正常得到结果了。
------解决方案--------------------像这样的操作一般来说是有限的,这就像两个家庭一样,怎么能随便的知道对方家里都有什么呢.除非是做为小偷去人家家里.
------解决方案--------------------如果你愿意,倒也是能做到的,你可以用如下的两个API最后找到要处理的句柄: 
 [DllImport( "user32.dll ", CharSet = CharSet.Auto, SetLastError = true)] 
 private static extern bool EnumWindows(EnumThreadWindowsCallback callback, IntPtr extraData);   
 [DllImport( "user32.dll ", ExactSpelling = true)] 
 private static extern bool EnumChildWindows(HandleRef hwndParent, EnumChildrenCallback lpEnumFunc, HandleRef lParam);