正在获取另一个exe的控件名称

本文关键字:控件 exe 获取 另一个 | 更新日期: 2023-09-27 18:28:30

大家好,我有一个相当具体的问题,如果这不是标准的堆栈溢出问题,请考虑我的歉意,我需要知道是否有可能获得另一个exe的所有控制名称,例如

我有一个c#应用程序,我想获得在我的计算机上运行的另一个独立应用程序的所有控件名称,比如b.exe,所以如果b.exe有一个文本框和一个按钮,我想在我的c#exe中有文本框和按钮的名称,我还想有一个b.exe 点击事件的侦听器

到目前为止,我所研究的都没有什么特别的,实际上我不想要完整的代码快照,我只想要一个指导方针,我能通过pinvoke做到吗?还是winapi?请解释一下什么是pinvoke和winapi,通过应用程序挂钩可以实现吗?再一次,我需要一个指南来遵循,所以请帮我解决这个问题,我知道我可以通过pinvoke或winapi获得活动窗口名称,但我的要求有点高

正在获取另一个exe的控件名称

1。访问控制名称:

不幸的是,我没有.NET(C#),但在Visual C++下这是不可能的。

原因是:控件在可执行文件中不再有名称,而是简单地将名称转换为数字。

示例"myTextControl"在可执行文件中为1234。编译时,有关控件(原始)名称的信息将完全丢失。

2。访问其他可执行文件中的控件:

我认为在.NET(C#)下,它不像在本机编程语言下那样容易(直接访问Windows API),但只要知道数字(例如1234),就可以访问其他可执行文件的控件。

因此,您必须找到包含控件的对话框窗口的窗口句柄,然后才能向控件发送消息。不幸的是,许多包含指针的消息将需要一些非常棘手的技巧。没有指针的消息运行良好。

3。为其他可执行文件中的控件创建侦听器:

在另一个EXE中的控件上创建侦听器(例如单击侦听器)是可能的,但非常棘手:这需要编写一个本机(这意味着:不是.NET/C#)DLL文件,然后将其与Windows API函数"SetWindowsHookEx"组合。

我不认为.NET API(C#所需)已经存在,因为只有很少的用例可以实现这一点。