Cover in Programmvorschau in Taskleise als Bild anzeigen

  • VB.NET

Es gibt 45 Antworten in diesem Thema. Der letzte Beitrag () ist von Linux13524.

    Cover in Programmvorschau in Taskleise als Bild anzeigen

    Hallo

    Ich habe ein Problem. Ich möchte, dass das Cover von dem momentan gespielen Lied in meinem Music-Player in der Programmvorschau in der Taskbar angezeigt wird.

    Das hab ich bis jetzt so gelöst:

    VB.NET-Quellcode

    1. Imports Microsoft.WindowsAPICodePack.Taskbar
    2. Dim tbm As TaskbarManager = TaskbarManager.Instance
    3. tbm.TabbedThumbnail.SetThumbnailClip(MediaPlayer.Handle, New Rectangle(MediaPlayer.CoverBox.Location.X , MediaPlayer.CoverBox.Location.Y , _
    4. MediaPlayer.CoverBox.Width, MediaPlayer.CoverBox.Height)


    Das funktioniert soweit auch ganz gut. Das Cover, das gerade in der Coverbox angezeigt wird, wird in der Programmvorschau angezeigt.

    Aber, wenn das Lied wechselt und das Programm minimiert ist, aktualisiert sich das Cover (in der Programmvorschau) nicht.

    Gibt es vielleicht eine Möglichkeit das Bild direkt auszuwählen und nicht den Bereich auf dem das Bild angezeigt wird?

    Ich hoffe ihr versteht mein Problem und könnt mir helfen :)
    Mit freundlichen Grüßen

    Linux
    Mein Code ist:

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class frmTest
    3. <DllImport("dwmapi.dll")> _
    4. Public Shared Function DwmSetIconicThumbnail(hwnd As IntPtr, hbmp As IntPtr, dwSITFlags As Integer) As Integer
    5. End Function
    6. Private Sub frmTest_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    7. Dim bmp As Bitmap = Bitmap.FromFile("C:\test.jpg")
    8. Dim int As Integer = DwmSetIconicThumbnail(Me.Handle, bmp.GetHbitmap, &H1)
    9. End Sub
    10. End Class


    Rückgabewert ist: -2147024809
    Mit freundlichen Grüßen

    Linux

    Linux13524 schrieb:

    Rückgabewert ist: -2147024809

    Also ein Fehler, du willst 0 zurückbekommen.

    Zunächst einmal solltest du versuchen, das ganze nach WndProc zu verlagern und dort auf die im Artikel genannte Message reagieren, denn so ist es gedacht.
    Das würde in etwa so aussehen:

    VB.NET-Quellcode

    1. Protected Overrides Sub WndProc(ByRef m As Message)
    2. Const WM_DWMSENDICONICTHUMBNAIL = &H0 'hier den richtigen Wert einsetzen
    3. If m.Msg = WM_DWMSENDICONICTHUMBNAIL Then
    4. 'hier das Thumbnail festlegen
    5. Else
    6. MyBase.WndProc(m)
    7. End If
    8. End Sub

    Ich konnte allerdings den Wert von WM_DWMSENDICONICTHUMBNAIL nicht finden, den musst du dir noch irgendwie beschaffen.
    @Gonger96
    Dann mach

    VB.NET-Quellcode

    1. m.Result = IntPtr.Zero


    @Linux13524
    In dieser Methode werden die WindowMessages empfangen. Das ist zu viel Stoff, als dass ich dir das jetzt mal schnell erklären könnte, wenn du mehr darüber wissen willst solltest du auf MSDN nachsehen.
    Das wird sowieso returned. Habs mal ausprobiert, das klappt fein. Allerdings haste was vergessen. Bevor das Fenster die Bitmap setzen kann musst du per DwmSetWindowAttribute die Flags entsprechend anpassen. Sieh dir das auf MSDN mal an.
    // Edit
    Hab dir das mal grob übersetzt

    VB.NET-Quellcode

    1. <DllImport("dwmapi")> _
    2. Shared Function DwmSetWindowAttribute(ByVal hWnd As IntPtr, ByVal flags As Integer, ByRef bla As IntPtr, ByVal size As Int32) As Integer
    3. End Function
    4. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    5. Dim x As New IntPtr(1)
    6. Dim y As New IntPtr(1)
    7. DwmSetWindowAttribute(Me.Handle, 7, x, Marshal.SizeOf(x))
    8. DwmSetWindowAttribute(Me.Handle, 10, y, Marshal.SizeOf(y))
    9. End Sub

    Das Beispiel ausm MSDN ist das
    @Artentus
    Ok. Ich werd mir des vielleicht mal auf msdn anschauen.

    @Gonger96
    Ja. Das Hab ich ganz übersehen.

    Ich probier es jetzt mal aus. Danke schonmal!
    Mit freundlichen Grüßen

    Linux