![通过 API 关闭软件窗口](https://linux22.com/image/1590679/%E9%80%9A%E8%BF%87%20API%20%E5%85%B3%E9%97%AD%E8%BD%AF%E4%BB%B6%E7%AA%97%E5%8F%A3.png)
我正在使用第三方软件,该软件在合并 HEX 文件时具有内部功能 HPT(Hex-Post-Treatment)。我无法分辨是哪个软件等等,但是,希望我能解释一下。该软件调用外部批处理文件,该文件又调用外部 .EXE。因此,软件将控制权传递给外部。我正在使用 API 和 C# 与 Visual Studio 与软件通信,获取日志路径并读出日志文件。
软件正在记录,我正在 .EXE 中读取。首先,我在 .EXE 中创建了一个新线程,因为这可以加快软件的性能。现在,在成功完成软件处理后,我必须关闭软件中打开的用于合并的小部件,以便软件完成记录并附加关键信息。我需要“完整”的日志文件,即从日志文件中读取附加的信息。所以我需要在我的外部完成之前关闭小部件。
并且,当我的.EXE 中的代码完成后而我没有关闭小部件时,软件就会抛出错误并且无法完成或保存数据库中的新合并。
有人可以帮忙吗?
答案1
更新
我可以处理窗口并向其发送消息。
IntPtr windowPtr = FindWindowByCaption(IntPtr.Zero, "从 CBs 合并修订"); SendMessage(windowPtr, WM_LBUTTONDOWN, IntPtr.Zero, IntPtr.Zero);
窗口关闭了,但是软件并没有做出任何反应,就像手动单击了此窗口中的“确定”按钮一样。
然后找到包含按钮的窗口并向其发送消息:
发送消息(窗口,WM_LBUTTONDOWN,IntPtr.Zero,IntPtr.Zero);发送消息(窗口,WM_LBUTTONUP,IntPtr.Zero,IntPtr.Zero);
窗口再次关闭,但未提供正确的结果。结果是日志文件已更新。
我认为,可能存在安全障碍,因为首先,窗口(合并小部件)包含 >250 个窗口,spy++ 无法识别这些窗口。
问候。