首页 新闻 会员 周边 捐助

关于C#中FindWindow和FindWindowEx查找子窗体的用法,求助~!

0
悬赏园豆:100 [已解决问题] 解决于 2013-06-04 00:40

我想获取查询按钮然后单击它一下,可是只能获取到父窗口,“查询条件”这个窗口也获取不到。用类名的话,直接点击的是第一个:“照片上传中心”这个按钮~!因为本人是新手,在校的学生而已,没啥技术含量,求高手帮我一把。。不胜感激哇~!

 

代码上传一下,别喷我,骚年经不起打击啊!

 1         private void button2_Click(object sender, EventArgs e)
 2         {
 3             IntPtr hwnd = FindWindow("TGroupBox", "查询条件");
 4             if (hwnd != IntPtr.Zero)
 5             {
 6                 MessageBox.Show("找到窗口");
 7             }
 8             else
 9             {
10                 MessageBox.Show("没有找到窗口");
11             }
12             hwnd = FindWindow("Notepad", null);
13             if (hwnd != IntPtr.Zero)
14             {
15                 MessageBox.Show("找到记事本窗口");
16             }
17             else
18             {
19                 MessageBox.Show("没有找到记事本窗口");
20             }
21         }
22         const int BM_CLICK = 0xF5;
23         const int WM_GETTEXT = 0x000D;
24         const int WM_SETTEXT = 0x000C;
25         const int WM_CLICK = 0x00F5;
26         private void button3_Click(object sender, EventArgs e)
27         {
28             IntPtr maindHwnd = FindWindow(null, "照相馆上传照片"); //获得照相馆上传照片的句柄   
29             //SetForegroundWindow(maindHwnd);
30             if (maindHwnd != IntPtr.Zero)
31             {
32                 IntPtr hWnd3 = FindWindowEx(maindHwnd, IntPtr.Zero, "TButton", null);
33                 IntPtr hWnd2 = FindWindowEx(maindHwnd, IntPtr.Zero, "TButton", null);
34                 IntPtr childHwnd = FindWindowEx(maindHwnd, IntPtr.Zero, "TButton", "查询");   //获得查询按钮的句柄   
35                 if (childHwnd != IntPtr.Zero)
36                 {
37                     SendMessage(childHwnd, BM_CLICK, 0, 0);//发送点击按钮的消息
38                     //SendMessage(childHwnd, WM_SETTEXT, 0, 123);
39                 }
40                 else
41                 {
42                     MessageBox.Show("没有找到子窗口");
43                 }
44             }
45             else
46             {
47                 MessageBox.Show("没有找到窗口");
48             }
49         }
奔波在大路上的主页 奔波在大路上 | 菜鸟二级 | 园豆:274
提问于:2013-05-15 14:03
< >
分享
最佳答案
1

觉得你应该先找到查询条件的TGroupBox,再找它下级的TButton应该就能找到了

收获园豆:100
I,Robot | 大侠五级 |园豆:9783 | 2013-05-15 14:38

你说找不到查询条件TGroupBox的句柄,那你应该继续用FindWindowEx往下找,第一个查找到的TGroupBox应该是个人信息,再用

FindWindowEx(maindHwnd, IntPtr.Zero, "TButton", null)

这里应该把IntPtr.Zero换成个人信息TGroupBox的句柄,重复查询几次就可以找到查询条件的句柄了

I,Robot | 园豆:9783 (大侠五级) | 2013-05-15 14:43

@Rainier-Soft.Com: 谢谢~!我试试~!

奔波在大路上 | 园豆:274 (菜鸟二级) | 2013-05-16 09:00
其他回答(2)
1

是利用这个程序,去控制另一个程序么.?

如果是这样的话.感觉C#的实现可能会很吃力~~

只会造轮子 | 园豆:2274 (老鸟四级) | 2013-05-15 14:24
0
private void button3_Click(object sender, EventArgs e)
27         {
28             IntPtr maindHwnd = FindWindow(null, "照相馆上传照片"); //获得照相馆上传照片的句柄   
29             //SetForegroundWindow(maindHwnd);
30             if (maindHwnd != IntPtr.Zero)
31             {
32                 IntPtr hWnd3 = FindWindowEx(maindHwnd, IntPtr.Zero, null,"查询条件" );
33                 IntPtr hWnd2 = FindWindowEx(maindHwnd, IntPtr.Zero, null, “查询”);
34                 //IntPtr childHwnd = FindWindowEx(maindHwnd, IntPtr.Zero, "TButton", "查询");   //获得查询按钮的句柄   
35                 if (childHwnd != IntPtr.Zero)
36                 {
37                     SendMessage(childHwnd, BM_CLICK, 0, 0);//发送点击按钮的消息
38                     //SendMessage(childHwnd, WM_SETTEXT, 0, 123);
39                 }
40                 else
41                 {
42                     MessageBox.Show("没有找到子窗口");
43                 }
44             }
45             else
46             {
47                 MessageBox.Show("没有找到窗口");
48             }
49         }
奔波在大路上 | 园豆:274 (菜鸟二级) | 2013-06-04 00:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册