最近在研究 怎么读取其它应用程序的界面数据,思路是 根据进程名称 获取应用程序窗口句柄,然后 获取所有子窗口的 句柄,并读取其数据 ,遇到了一点问题。我只拿到了 '核增表表头' 这个界面的文本框数据, 而'货物' 这个界面的所有数据都没有拿到。是哪里出了问题呢 。 代码如下:
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");
}
其中界面如下:
可以先用spy++看看
多谢你的指点,我这边用spy++ 查看了一下 有 '货物'界面的信息,但是为什么我的程序获取不到呢 ?奇怪。
spy++
调用WINDOWS GETWINDOWTEXT