0

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

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

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

4

1 回答 1

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# 所需),因为这方面的用例很少。

于 2013-08-22T06:49:44.103 回答