2012-03-24 45 views
0

我想检索一个GUI对象,以便我可以读取和修改它们的Object。 现在我唯一能想到的方法就是通过注入(注入会执行大量的数据检索并发回我想要的内容)。我注射的问题是我无法轻松调试它,需要很长时间才能确定要做什么。从另一个进程中检索GUI对象

我可以找到GUI对象的句柄,所以有没有一种方法可以使用ReadProcessMemory()或类似的东西,这样我就可以在另一个进程中读取内存,并从此将它构建到GUI对象中想?

回答

2

假设你具有适当的权限,并有一些方法来获得特定GUI对象的窗口句柄(HWND)(见FindWindow()),可以调用规则Win32 API函数如SetWindowText()修改这些GUI对象的内容。

但是,这样做可以打破其他进程的逻辑!如果拥有GUI对象的进程缓存了一些信息,并且修改了其背后的源代码,则可能无法获得所需的效果。

+0

SetWindowText仅适用于同一应用程序中的GUI对象?此外,我无法阅读我需要的所有信息。例如,我无法获得组合框中的项目列表 – user1227708 2012-03-25 03:04:30

+0

@ user1227708:直接发送'WM_SETTEXT'来修改另一个程序中的文本。在阅读组合框的内容方面,你需要通过'FindWindowEx'获取它的句柄(使用类名来获取它)。之后,据我所知,使用常规ComboBox宏和消息没有进程间限制:http://msdn.microsoft.com/en-us/library/windows/desktop/ff485897(v=vs。 85).aspx – 2012-03-25 12:28:26

+0

@ user1227708:您可能需要使用['PostMessage()'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms644944.aspx)显式发送消息或['PostThreadMessage()'](http://msdn.microsoft.com/en-us/library/windows/desktop/ms644946.aspx)。 – 2012-03-25 16:17:50