如何使用C#代码以编程方式单击运行应用程序中的按钮

sar*_*jit 4 c# winapi

我想写一个C#程序,它将启动一个.exe(这是一个简单的工作,我知道该怎么做.)但现在我想为它添加更多的功能.我想将用户输入传递给我的程序,并希望将它们作为输入传递给运行.exe.我还要单击exe窗口上的特定按钮.重要的是,我想以编程方式执行它,而不是用户知道我们实际上在后台运行该exe.如果可能,请告诉我.这非常紧迫.

Al *_*epp 6

是的,可以使用Windows API.您需要向该窗口发送消息.首先使用Spy ++获取要单击的所有按钮的ID.Spy ++是一个Visual Studio工具,它会向您显示按下这些按钮时发送给应用程序的消息.然后使用PostMessage()函数(Windows API)以编程方式发送相同的消息.

您还可以查看Winamp(Windows的音乐播放器),有关于如何从外部应用程序按下其按钮的文档.您可以以相同的方式为其他应用程序执行此操作,您只需要知道所有控件的ID以及窗口或其类的名称.

这是代码点击Winamp的暂停按钮:

#define AMP_PAUSE 40046
HWND hwnd = FindWindow("Winamp v1.x", 0);
if(hwnd) SendMessage(hwnd, WM_COMMAND, AMP_PAUSE, 0);
Run Code Online (Sandbox Code Playgroud)

这是用C++编写的.如果您在C#中执行此操作,请使用PInvoke访问Windows API.我假设你知道怎么做.在第一步中,FindWindow获取窗口的句柄,它通过其类的名称来标识它.然后我们使用SendMessage或PostMessage发送消息.有四个参数:发送消息的窗口,消息ID和两个参数.

在Spy ++中,您可以找到FindWindow和SendMessage所需的参数.请启动它并稍微玩一下,看它能做些什么.