如何检索通知图标气球提示标题?

时间:2016-12-08 16:29:01

标签: c# winapi

如何检索通知图标气球提示标题?我可以像这样得到气球提示文字:

SendMessage(hWnd1_tooltip, WM_GETTEXT, buffer_size, strTitle);

但我无法获得通知图标气球提示标题。

1 个答案:

答案 0 :(得分:1)

发送工具提示控件TTM_GETTITLE message

TTGETTITLE ttgt;
ttgt.dwSize = sizeof(ttgt);
SendMessage(hwndTooltip, TTM_GETTITLE, 0, (LPARAM)ttgt);

MessageBox(NULL, ttgt.pszTitle, TEXT("Demo"), MB_OK);

您标记了此问题,但您编写的代码确实看起来像C.如果问题只是错误的话,上面的代码会显示您在C或C ++中会做什么。

如果您实际使用C#,则根本不需要这样做。您应该只使用ToolTip包装类提供的ToolTipTitle property(如果您正在使用WinForms),或者WPF的等价物。

但是这里是必需的P / Invoke声明:

internal class NativeMethods
{
   const UInt32 WM_USER = 0x0400;
   const UInt32 TTM_GETTITLE = (WM_USER + 35);

   [StructLayout(LayoutKind.Sequential)]
   struct TTGETTITLE
   {
      public UInt32 dwSize;
      public UInt32 uTitleBitmap;
      public UInt32 cch;
      public IntPtr pszTitle;
   }

   [DllImport("user32.dll", CharSet = CharSet.Auto)]
   static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, ref TTGETTITLE lParam);
}

您可以这样使用:

public string GetTooltipTitle(IntPtr hwndTooltip)
{
      TTGETTITLE ttgt = new TTGETTITLE();
      ttgt.dwSize = (UInt32)Marshal.SizeOf(ttgt);
      SendMessage(hwndTooltip, TTM_GETTITLE, IntPtr.Zero, ref ttgt);
      return Marshal.PtrToStringAuto(ttgt.pszTitle);
}

同样,当您在C#中编写此工具提示时,我并不确定您将获得工具提示控件的窗口句柄。如果您的目标是检索由不同流程显示的工具提示的标题,那么您将会遇到困难。公共控件库不会跨进程编组字符串。