如何检索通知图标气球提示标题?我可以像这样得到气球提示文字:
SendMessage(hWnd1_tooltip, WM_GETTEXT, buffer_size, strTitle);
但我无法获得通知图标气球提示标题。
答案 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 ++中会做什么。
如果您实际使用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#中编写此工具提示时,我并不确定您将获得工具提示控件的窗口句柄。如果您的目标是检索由不同流程显示的工具提示的标题,那么您将会遇到困难。公共控件库不会跨进程编组字符串。