首页 新闻 会员 周边 捐助

c# 获取 应用程序 控件内容

0
悬赏园豆:30 [已解决问题] 解决于 2016-12-14 13:38

最近在研究 怎么读取其它应用程序的界面数据,思路是 根据进程名称 获取应用程序窗口句柄,然后 获取所有子窗口的 句柄,并读取其数据 ,遇到了一点问题。我只拿到了 '核增表表头' 这个界面的文本框数据, 而'货物' 这个界面的所有数据都没有拿到。是哪里出了问题呢 。 代码如下:

Process[] processes = Process.GetProcessesByName("FrmTMS");
            LogHelper.WriteLog(typeof(Form1), "获取进程句柄");
            if (processes.Length > 0)
            {
                MessageBox.Show(processes.Length.ToString());
                IntPtr hWnd = processes[0].MainWindowHandle;
                SetForegroundWindow(hWnd);//激活该线程,并将该程序置顶

                List<IntPtr> listWnd = new List<IntPtr>();
                //获取所有子类的类名
                List<IntPtr> list = GetChildHandles(hWnd, null);

                List<string> strList = new List<string>();
 
                  (hWnd, new CallBack(delegate(IntPtr hwnd, int lParam)
                {
                    listWnd.Add(hwnd);
                    return true;
                }), 0);

                foreach (IntPtr intp in listWnd)
                {
                    StringBuilder className = new StringBuilder(256);
                    
                    GetClassName(intp, className, className.Capacity);
                    StringBuilder title = new StringBuilder();
                 
 
                    SendMessage(intp, WM_GETTEXT, 1000, title);
 

                    FileOperate.FileAdd("D:\\test.txt", className.ToString() + "----" + title.ToString() + "\r" + "\r");

}

其中界面如下:

 

 

 

Stone821的主页 Stone821 | 初学一级 | 园豆:132
提问于:2016-10-22 15:13
< >
分享
最佳答案
1

可以先用spy++看看

收获园豆:20
jello chen | 大侠五级 |园豆:7336 | 2016-10-22 19:25

多谢你的指点,我这边用spy++ 查看了一下 有  '货物'界面的信息,但是为什么我的程序获取不到呢 ?奇怪。

 

Stone821 | 园豆:132 (初学一级) | 2016-10-24 17:32
其他回答(1)
0

spy++ 

调用WINDOWS GETWINDOWTEXT

收获园豆:10
愤青愤青 | 园豆:4 (初学一级) | 2016-10-24 16:35
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册