Как обновить предварительный просмотр панели задач, даже если форма свернута

У меня проблема, и я заметил, что 90% приложений Windows (7,8,10) не обновляют предварительный просмотр панели задач (это маленькое окно, когда вы наводите курсор на значок приложения на панели задач), поэтому, когда приложение свернуто, предварительный просмотр панели задач просто зависает и не обновляется, кроме того, некоторые приложения обновляют его даже в свернутом виде (например, Windows Media Player, Music Bee). Я попытался решить эту проблему самостоятельно, используя WindowsAPICodePack и обрезав предварительный просмотр панели задач, а также использовал вторую форму и установил Opacity на 0, но это не сработало. У меня нет никакого кода, чтобы показать прямо сейчас.


person Anes Hamdani    schedule 04.07.2020    source источник
comment
TaskbarItemInfo или DwmRegisterThumbnail + DwmUpdateThumbnailProperties + DwmQueryThumbnailSourceSize + отмените регистрацию всего этого.   -  person Jimi    schedule 05.07.2020
comment
@Jimi Прошел час, и я пытаюсь использовать DWMAPI.dll, но мне не повезло, я нашел код из этого сообщения на SO (C#, но я преобразовал его) link это просто не сработает, я пробовал все, чтобы сделать это работает, поправьте меня, если я ошибаюсь. «dest» — это дескриптор моего приложения, «src» — это приложение, которое я пытаюсь показать, «thumb» — целое число для обновления миниатюры. «DwmRegisterThumbnail» возвращает -2147024809, src — это 0,Thumb тоже 0 , вот мой код pastebin.com/zGFjbQAu , ссылка pastebin.com/5KwEd1SE   -  person Anes Hamdani    schedule 05.07.2020


Ответы (1)


Чтобы программно обновить предварительный просмотр панели задач и использовать пользовательские растровые изображения:

    Imports System
Imports System.Drawing
Imports System.Threading
Imports System.Windows.Forms
Imports Microsoft.WindowsAPICodePack.Taskbar

Namespace CustomThumbnailImage
    Public Partial Class Form1
        Inherits Form

        Private customThumbnail As TabbedThumbnail

        Public Sub New()
            InitializeComponent()
        End Sub

        Protected Overrides Sub OnShown(ByVal e As EventArgs)
            MyBase.OnShown(e)
            customThumbnail = New TabbedThumbnail(Me.Handle, Me.Handle)
            TaskbarManager.Instance.TabbedThumbnail.AddThumbnailPreview(customThumbnail)
            customThumbnail.TabbedThumbnailBitmapRequested += AddressOf customThumbnail_TabbedThumbnailBitmapRequested
        End Sub

        Private Function GenerateBitmap() As Bitmap
            Dim bitmap As Bitmap = New Bitmap(150, 150)

            Using g = Graphics.FromImage(bitmap)
                Dim random = New Random(Environment.TickCount)

                Using brush = New SolidBrush(Color.FromArgb(255, random.[Next](255), random.[Next](255), random.[Next](255)))
                    g.FillEllipse(brush, 10, 30, 130, 90)
                End Using
            End Using

            Return bitmap
        End Function

        Private Sub customThumbnail_TabbedThumbnailBitmapRequested(ByVal sender As Object, ByVal e As TabbedThumbnailBitmapRequestedEventArgs)
            Dim bitmap = GenerateBitmap()
            customThumbnail.SetImage(bitmap)
            ThreadPool.QueueUserWorkItem(Sub(c)
                                             Thread.Sleep(2000)
                                             Me.Invoke(New MethodInvoker(AddressOf InvalidateThumbnail))
                                         End Sub)
        End Sub

        Private Sub InvalidateThumbnail()
            customThumbnail.InvalidatePreview()
        End Sub
    End Class 
End Namespace

Все части образцов Win7Api

person Anes Hamdani    schedule 06.09.2020