Vb6 检测引出序号工具提示是否可见

Vb6 检测引出序号工具提示是否可见,vb6,tooltip,popup-balloons,balloon-tip,Vb6,Tooltip,Popup Balloons,Balloon Tip,我的程序大量使用Windows内置气球工具提示,但在某些系统上,它们只是不显示。这可能有许多不同的原因(例如:EnableBalloodTips、ShowInfoTip、DisablePreviewDesktop、TaskBarNotification都是可能产生影响的不同注册表项),因此在安装过程中几乎不可能更正这些设置 因此,我的替代方案是简单地测试气球是否可见,如果不可见,则显示一条消息,他们应该联系支持人员。但是,我在工具提示的hWnd上使用的所有方法(IsWindowVisible、G

我的程序大量使用Windows内置气球工具提示,但在某些系统上,它们只是不显示。这可能有许多不同的原因(例如:EnableBalloodTips、ShowInfoTip、DisablePreviewDesktop、TaskBarNotification都是可能产生影响的不同注册表项),因此在安装过程中几乎不可能更正这些设置

因此,我的替代方案是简单地测试气球是否可见,如果不可见,则显示一条消息,他们应该联系支持人员。但是,我在工具提示的hWnd上使用的所有方法(IsWindowVisible、GetActiveWindow等)都返回气球可见,即使在气球不可见的情况下也是如此。我怀疑这与Windows将父对象的hWnd分配给引出序号有关,因此如何检查其实际显示是否正确

Public Sub Create(ByVal hWndParent As Long, _
  Optional ByVal bAlwaysTip As Boolean = True, _
  Optional ByVal bBalloonTip As Boolean = True)

  Dim nFlags As Long

  ' Wir möchten kein normales Fenster :-)
  nFlags = WS_POPUP Or TTS_NOPREFIX

  ' Falls der ToolTip auch bei deaktiviertem 
  ' Control erscheinen soll...
  If bAlwaysTip Then nFlags = nFlags Or TTS_ALWAYSTIP

  ' Falls ein "moderner" Balloon-ToolTip erwünscht...
  If bBalloonTip Then nFlags = nFlags Or TTS_BALLOON

  ' Window-Handle erstellen  
  m_hWnd = CreateWindowEx(0, "tooltips_class32", 0, _
    nFlags, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, _
    CW_USEDEFAULT, hWndParent, 0, App.hInstance, 0)

  ' maximale Fensterbreite festlegen
  SendMessageLong m_hWnd, TTM_SETMAXTIPWIDTH, 0, m_lMaxWidth
End Sub

Public Sub SetToolTipText(hWnd As Long, ByVal strText As String)

    Dim udtToolInfo As TOOLINFO
    With udtToolInfo
        .hWnd = hWnd
        .uId = hWnd
        .lpszText = strText
        .cbSize = Len(udtToolInfo)
    End With

    SendMessage m_hWnd, TTM_UPDATETIPTEXTA, 0, udtToolInfo

End Sub

您确实应该隔离影响应用程序的注册表项,并进行适当的更改。如果这就是你通过支持最终要做的事情,那么很自然地,你会强行做出改变


但更好的办法是编写自己的解决方案,如创建自己的窗口,直接根据应用程序定制。它将为您提供所需的功能,而无需Windows一直对您进行处理。

能否显示一些用于创建工具提示的代码?创建调用或显示调用可能会产生一个您没有注意到的错误,这可能是有用的。@Phoenix_2只有一小部分用户有此问题,更改注册表设置在大多数情况下可以解决此问题,所以我认为这排除了代码中的任何错误。我不是说你会有错误。我的意思是某些函数的返回值可能表明它们的设置确实不允许弹出引出序号。@phoenix_2啊,我误读了它。气球是使用默认的CreateWindow API调用创建的,在禁用气球的系统上似乎不会返回错误,所有进一步的通信(设置文本、显示/隐藏气球)都是通过SendMessage API调用进行的,SendMessage API调用从不返回值,因为消息是异步传递的,因此,调用在结果已知之前返回。