Ist es in Windows 10 noch möglich eine Taskbar Meldung im Windows 7 Style zu erzeugen?

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Alexander M..

    Ist es in Windows 10 noch möglich eine Taskbar Meldung im Windows 7 Style zu erzeugen?

    Hallo liebe Community,

    ich habe mich gefragt ob es nicht möglich wäre in Windows 10 eine solche Tray Meldung zu erzeugen ?(

    Die Benachrichtigung per NotifiyIcon möchte ich nicht verwenden, da diese immer einen Ton mit sich bringt :/

    Grüße
    Coder9292
    ~Programmieren Sie immer so, als wäre der Typ, der den Code pflegen muss, ein gewaltbereiter Psychopath, der weiß, wo Sie wohnen. ~

    Grüße
    Coder9292

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Coder9292“ ()

    Ich denke nicht, dass Windows 10 noch die alte Benachrichtigungsweise enthält, da sie diese ja komplett durch die Benachrichtigungen des Info-Centers ersetzt haben.

    Eine recht einfache Möglichkeit wäre es, ein eigenes Fenster zu erstellen, das sich so positioniert, dass es über dem Tray-Icon liegt und auch selbst designen kann.

    Da man dafür die Position des NotifyIcons benötigt, habe ich in C# (Konverter ;) ) eine WinAPI-Funktion gefunden, die dies ermöglicht:
    Spoiler anzeigen

    C#-Quellcode

    1. using System;
    2. using System.Runtime.InteropServices;
    3. using System.Drawing;
    4. using System.ComponentModel;
    5. public class WinAPI
    6. {
    7. public struct RECT
    8. {
    9. public int left;
    10. public int top;
    11. public int right;
    12. public int bottom;
    13. public override string ToString()
    14. {
    15. return "(" + left + ", " + top + ") --> (" + right + ", " + bottom + ")";
    16. }
    17. }
    18. [DllImport("user32.dll", CharSet = CharSet.Auto)]
    19. public static extern IntPtr FindWindow(string strClassName, string strWindowName);
    20. [DllImport("user32.dll", SetLastError = true)]
    21. public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, IntPtr windowTitle);
    22. [DllImport("user32.dll")]
    23. [return: MarshalAs(UnmanagedType.Bool)]
    24. static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
    25. public static IntPtr GetTrayHandle()
    26. {
    27. IntPtr taskBarHandle = WinAPI.FindWindow("Shell_TrayWnd", null);
    28. if (!taskBarHandle.Equals(IntPtr.Zero))
    29. {
    30. return WinAPI.FindWindowEx(taskBarHandle, IntPtr.Zero, "TrayNotifyWnd", IntPtr.Zero);
    31. }
    32. return IntPtr.Zero;
    33. }
    34. public static Rectangle GetTrayRectangle()
    35. {
    36. WinAPI.RECT rect;
    37. WinAPI.GetWindowRect(WinAPI.GetTrayHandle(), out rect);
    38. return new Rectangle(new Point(rect.left, rect.top), new Size((rect.right - rect.left) + 1, (rect.bottom - rect.top) + 1));
    39. }
    40. }

    Quelle: stackoverflow.com/questions/72…e-the-clicked-notify-icon


    Dann kannst du die Position der Form mit den dafür vorgesehen Properties setzen und dann die Form anzeigen.
    Damit die Form dann auch immer angezeigt wird, kann man ggf. noch die Property TopMost verwenden.

    ~ Alexander M.
    ~ Alex-Digital :D

    if(!Internet.VBP.Get<User>("Alex-Digital").IsOnline) this.Close(); :D