2013-08-20 7 views
1

Моя программа активно использует всплывающие подсказки для всплывающих окон Windows, но в какой-то системе они просто не отображаются. Это может иметь так много разных причин (например: EnableBalloonTips, ShowInfoTip, DisablePreviewDesktop, TaskbarNoNotification - все разные ключи реестра, которые могут иметь влияние), что почти невозможно исправить эти настройки во время установки.Обнаружение, если всплывает всплывающая подсказка

Таким образом, моя альтернатива заключалась в том, чтобы просто проверить, отображается ли воздушный шар, а если нет, отобразите сообщение, в котором им следует обратиться в службу поддержки. Однако все методы, которые я использую на 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 
+2

Можете ли вы показать код, который вы используете для создания всплывающей подсказки? Возможно, создание звонков или отображение вызовов приведет к ошибке, на которую вы не обращаете внимания, это может быть полезно. –

+0

@ PhoenixX_2 Только в очень небольшом проценте наших пользователей есть эта проблема, и изменение параметров реестра устраняет проблему в большинстве случаев, поэтому я считаю, что это исключает любые ошибки в коде. – Muis

+0

Я не хотел сказать, что у вас будут ошибки. Я имел в виду, что возвращаемые значения определенных функций могут указывать на то, что их настройки не позволяют всплывать всплывающие подсказки. –

ответ

0

Вы действительно должны изолировать ключи реестра, которые влияют на ваше приложение, и внести соответствующие изменения. Если это то, что вы в конечном итоге оказываете через поддержку, возможно, это просто сделать изменения принудительно.

Но лучше было бы написать собственное решение, например, создать собственное окно, которое будет напрямую адаптировано к вашему приложению. Это обеспечит вам мощь, которую вы хотите, без того, чтобы Windows постоянно занималась вами.