SendMessage(单击)到工具栏

时间:2018-08-12 17:00:55

标签: c# sendmessage

我正在尝试使用SendMessage模拟特定按钮的按钮单击,但是当使用诸如spy ++或Winspy之类的工具时,它也为我提供了所有ToolbarWindows32的句柄,而不是分别针对每个按钮。 / p>

有一个相同的主题here,但我不知道如何在c#中执行相同的操作。

注意:我拥有ToolbarWindows32的句柄。

这是我的代码,其中列出了所有打开的窗口(包括ToolbarWindows32句柄)。

  using HWND = IntPtr;

/// <summary>Contains functionality to get all the open windows.</summary>
public static class OpenWindowGetter
{
  /// <summary>Returns a dictionary that contains the handle and title of all the open windows.</summary>
  /// <returns>A dictionary that contains the handle and title of all the open windows.</returns>
  public static IDictionary<HWND, string> GetOpenWindows()
  {
    HWND shellWindow = GetShellWindow();
    Dictionary<HWND, string> windows = new Dictionary<HWND, string>();

    EnumWindows(delegate(HWND hWnd, int lParam)
    {
      if (hWnd == shellWindow) return true;
      if (!IsWindowVisible(hWnd)) return true;

          int length = GetWindowTextLength(hWnd);
          if (length == 0) return true;

          StringB

油压生成器= new StringBuilder(length);           GetWindowText(hWnd,builder,length + 1);

      windows[hWnd] = builder.ToString();
      return true;

    }, 0);

    return windows;
  }

  private delegate bool EnumWindowsProc(HWND hWnd, int lParam);

  [DllImport("USER32.DLL")]
  private static extern bool EnumWindows(EnumWindowsProc enumFunc, int lParam);

  [DllImport("USER32.DLL")]
  private static extern int GetWindowText(HWND hWnd, StringBuilder lpString, int nMaxCount);

  [DllImport("USER32.DLL")]
  private static extern int GetWindowTextLength(HWND hWnd);

  [DllImport("USER32.DLL")]
  private static extern bool IsWindowVisible(HWND hWnd);

  [DllImport("USER32.DLL")]
  private static extern IntPtr GetShellWindow();
}

要使用:

    foreach(KeyValuePair<IntPtr, string> window in OpenWindowGetter.GetOpenWindows())
{
  IntPtr handle = window.Key;
  string title = window.Value;

  Console.WriteLine("{0}: {1}", handle, title);
}

所以我的问题是如何发送消息(单击)到ToolbarWindows32的第一个按钮?

0 个答案:

没有答案