User32.dll - Minimierung von Form abbrechen

  • C#

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Flox83.

    User32.dll - Minimierung von Form abbrechen

    Hi an Alle,

    ich würde gerne ein kleines Form erstellen, welches auf dem Desktop rechts unten in der Ecke liegt und nur den
    Rechnernamen und die IP-Adresse anzeigt.

    Bei Aufruf des Forms platziere ich dieses an der vorgesehen Stelle und schicke dieses über die User32.dll in den Hintergrund:

    Quellcode

    1. [DllImport("user32.dll", SetLastError = true)]
    2. [return: MarshalAs(UnmanagedType.Bool)]
    3. private static extern bool SetWindowPos(
    4. IntPtr hWnd, IntPtr hWndInsertAfter,
    5. int x, int y, int cx, int cy, uint uFlags);
    6. private const int WM_WINDOWPOSCHANGING = 0x0046;
    7. // Constants for positioning the window.
    8. private IntPtr HWND_BOTTOM = (IntPtr)1;
    9. private const UInt32 SWP_NOMOVE = 0x0002;
    10. private const UInt32 SWP_NOSIZE = 0x0001;
    11. protected override void WndProc(ref Message m)
    12. {
    13. if (m.Msg == WM_WINDOWPOSCHANGING)
    14. {
    15. MoveToBottom();
    16. m.Result = (IntPtr)0;
    17. }
    18. base.WndProc(ref m);
    19. }


    Wenn ich nun alle darüberliegenden Programme einzeln minimiere, bleibt das Fenster auch wo es hingehört, klicke ich jedoch auf "Desktop anzeigen" oder drücke Windows+D wird das Fenster ebenfalls minimiert.

    Gibt es eventuell eine Möglichkeit, das Minimieren des Fenster zu unterbrechen? Ich habe es bereits mit diversen MessageIDs versucht, jedoch bin ich immer wieder
    gescheitert.

    Hätte eventuell jemand einen Tipp, wie ich dies bewerkstelligen kann?

    Danke & liebe Grüße,
    Flox
    Der Form den passenden Parent zuweisen ;) , das kannst du so machen:

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. <DllImport("user32.dll", SetLastError:=True)>
    4. Private Shared Function SetWindowLong(ByVal hWnd As IntPtr, ByVal nIndex As Integer, ByVal dwNewLong As IntPtr) As Integer
    5. End Function
    6. <DllImport("user32.dll", SetLastError:=True)>
    7. Private Shared Function FindWindow(ByVal lpWindowClass As String, ByVal lpWindowName As String) As IntPtr
    8. End Function
    9. <DllImport("user32.dll", SetLastError:=True)>
    10. Private Shared Function FindWindowEx(ByVal parentHandle As IntPtr, ByVal childAfter As IntPtr, ByVal className As String, ByVal windowTitle As String) As IntPtr
    11. End Function
    12. Const GWL_HWNDPARENT As Integer = -8
    13. Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
    14. Dim hwnd As IntPtr = FindWindow("Progman", "Program Manager")
    15. If hwnd <> IntPtr.Zero Then
    16. hwnd = FindWindowEx(hwnd, IntPtr.Zero, "SHELLDLL_DefView", "")
    17. If hwnd <> IntPtr.Zero Then
    18. hwnd = FindWindowEx(hwnd, IntPtr.Zero, "SysListView32", "FolderView")
    19. End If
    20. End If
    21. SetWindowLong(Handle, GWL_HWNDPARENT, hwnd)
    22. End Sub
    23. End Class

    Cloud Computer? Nein Danke! Das ist nur ein weiterer Schritt zur totalen Überwachung.
    „Wer die Freiheit aufgibt, um Sicherheit zu gewinnen, wird am Ende beides verlieren.“
    Benjamin Franklin

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „NoIde“ ()