大家好,我有一个相当具体的问题,如果这不是标准的堆栈溢出问题,请考虑我的道歉, 我需要知道是否有可能获得另一个exe的所有控件名称。
我有ac#应用程序,我想获取在我的计算机上运行的另一个独立应用程序的所有控件名称b.exe所以如果b.exe有一个文本框和一个按钮,我想要有文本框和按钮的名称在我的c#exe中,我也希望有一个b.exe的点击事件的监听器
到现在为止我所研究的一切都没什么特别的,实际上我不想要完整的代码快照我只想要一个指导方针我可以做到这一点吗?还是winapi?请解释什么是pinvoke和winapi,是否可以通过申请挂钩?再一次,我需要一个指导方式,所以请帮我解决这个问题,我知道我可以通过pinvoke或winapi获得活跃的Windows名称,但我的要求有点高
答案 0 :(得分:2)
1。访问控件名称:
不幸的是我没有.NET(C#),但在Visual C ++下这是不可能的。
原因是:控件在可执行文件中不再有名称,但名称只是转换为数字。
示例“myTextControl”在可执行文件中为1234。在编译时,有关控件(原始)名称的信息完全丢失。
2。访问其他可执行文件中的控件:
我认为在.NET(C#)下,它并不像在本机编程语言(直接访问Windows API)下那么容易,但只要知道了数字(例如1234),就可以访问其他可执行文件的控件。
因此,您必须找到包含控件的对话框窗口的窗口句柄,然后您可以向控件发送消息。不幸的是,许多包含指针的消息都需要一些非常棘手的黑客攻击。没有指针的消息运行良好。
3。在其他可执行文件中为控件创建侦听器:
在另一个EXE中的控件上创建一个监听器(例如点击监听器)是可能的,但是非常棘手:这需要编写一个本机(这意味着:不是.NET / C#)DLL文件,然后将其与Windows API结合使用功能“SetWindowsHookEx”。
我不认为已经存在.NET API(C#所需),因为只有很少的用例。