日期:2014-05-20  浏览次数:20945 次

怎么从其他程序的datagridview获取数据
我想做一个程序 从其他程序界面获取数据 我目前做法是:
1、通过win32api获取到需要的窗体的handle,然后枚举该窗体的子窗体。
2、对每个子窗体通过sendmessage WM_GetText得到其内容。
窗体上上label listbox textbox的内容(text属性的东西)都可以获取,唯独datagridview的东西获取不了。

我改变方法,通过ReadProcessMemory 来获取进程的内存中的内容 发现仍然没有数据,仅获取到datagridview的id,而其他的空间可以获取到内容。

最后我再想办法,通过模拟键盘 使datagridview获取焦点,然后发生消息WM_SETSEL 和 WM_GETSEL 结果也不行,同样发送CTRL+C也没有效果。

总体说来 感觉datagridview 就对win32api免疫,网络上也没有像样的解决办法,如果谁有办法不胜感激。

总结一下:
1、要获取datagridview的内容,我是vs2005开发的程序。
2、是其他程序,那程序之知道是.net framework2.0的 没有源代码,也就是说要获取内容的程序无法修改,并且该程序类库巨多,使用程序集加载后反射的思路基本可以排除。
3、我可以取道那个datagridview的handle,不知道有没有办法通过handle获取到datagridview,control.fromhandle不行,那个要求是同一个进程才可以。
4、网上有思路是通过 hook Textout方法,这个方法我没看明白 如果谁能提供c#的样例非常感谢。
5、基本上排除通过鼠标获取窗体的方式。

------解决方案--------------------
太强了,我也不会,关注中……
------解决方案--------------------
读取这个datagridview的dataset
------解决方案--------------------
hook Textout:屏幕取词
参考
------解决方案--------------------
探讨
wuyq11 大大 有相关的代码吗 我好像没有看懂那个东西,因为网上的代码有个api函数在xp下用不了 另外 只要我搜索hook Textout一律都是wh_cbt里面输出文字到指定位置 但是没有获取文字的。我郁闷 大家怎么都这么喜欢抄来抄去啊

------解决方案--------------------
关注,帮你顶一下