Win32,如何访问工具栏上的按钮

Ale*_*x G 2 winapi

假设我有一个编译的二进制程序,它运行并在屏幕上显示一些 GUI。我需要从 Win32 中的另一个程序访问其工具栏,找到一个按钮并单击它。

我知道如何找到工具栏的 Hwnd,但我真的不知道如何枚举它上面的按钮。任何想法如何在 Win32 调用中做到这一点?

有没有像 Spy++ 这样的工具可以在工具栏下显示按钮句柄?Spy++ 不这样做。

谢谢

Rem*_*eau 7

如果它是标准的 Win32 工具栏控件,则向工具栏发送一条TB_BUTTONCOUNT消息以确定工具栏上有多少按钮,然后发送一条TB_GETBUTTON消息以检索有关给定索引处的按钮的信息。

棘手的部分是TBBUTTON接收按钮信息的结构需要在拥有工具栏的同一进程中分配,因此您必须:

  1. 调用GetWindowThreadProcessId()以检索工具栏的进程 ID
  2. 调用OpenProcess()以获取HANDLE该过程
  3. 调用VirtualAllocEx()以在该进程内部分配结构
  4. TB_GETBUTTON消息发送到工具栏,指定由返回的指针VirtualAllocEx()
  5. 调用ReadProcessMemory()将结构数据复制回您自己的进程,以便您可以根据需要对其进行处理
  6. 调用VirtualFreeEx()以释放分配的内存。

  • 在这个问题上很多人提到“改为使用自动化”,但没有实际的示例或链接。有什么“更好”的方法可以做到这一点吗?我面临着与OP完全相同的问题。 (2认同)