pinvoke ShowWindow funktioniert nicht

  • C#

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    pinvoke ShowWindow funktioniert nicht

    Hallo,

    ich würde gerne mittels pinvoke ein fenster verstecken und wieder anzeigen aber leider funktioniert das nicht wie geplant.
    Beim programmstart lasse ich mir alle Prozesse in einer checkedListbox auflisten und anschließend markiere ich die Prozesse die ich verstecken / anzeigen möchte.
    Diese Prozesse werden in eine List<of t> gespeichert und bei einem buttonclick sollten diese angezeigt / versteckt werden.

    C#-Quellcode

    1. public class CustomProcess
    2. {
    3. public Process myProcess;
    4. public override string ToString()
    5. {
    6. return this.myProcess.ProcessName;
    7. }
    8. }
    9. List<CustomProcess> processlist = new List<CustomProcess>();
    10. foreach (Process process in Process.GetProcesses())
    11. {
    12. CustomProcess p = new CustomProcess();
    13. p.myProcess = process;
    14. processlist.Add(p);
    15. }
    16. foreach (CustomProcess process in processlist)
    17. {
    18. checkedListBox1.Items.Add(process);
    19. }
    20. int status;
    21. if (flag == true)
    22. {
    23. flag = false;
    24. status = 0;
    25. } else
    26. {
    27. flag = true;
    28. status = 1;
    29. }
    30. foreach (CustomProcess p in processesToHide)
    31. {
    32. ShowWindow(p.myProcess.MainWindowHandle, status);
    33. }


    bitte keine tipps wie ich den code besser machen könnte - zuersteinmal sollte es funktionieren :P

    C#-Quellcode

    1. processesToHide = new List<CustomProcess>();
    2. for (int i = 0; i < checkedListBox1.CheckedIndices.Count; i++)
    3. {
    4. int index = checkedListBox1.CheckedIndices[i];
    5. CustomProcess p = (CustomProcess)checkedListBox1.Items[index];
    6. processesToHide.Add(p);
    7. }
    @windowsfan Dies hier funktioniert:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> _
    4. Private Shared Function ShowWindow(ByVal hwnd As IntPtr, ByVal nCmdShow As Integer) As Boolean
    5. End Function
    6. Private prc As Process
    7. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    8. prc = Process.GetProcessesByName("Notepad")(0)
    9. End Sub
    10. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    11. ShowWindow(prc.MainWindowHandle, 0) ' SW_HIDE
    12. End Sub
    13. Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
    14. ShowWindow(prc.MainWindowHandle, 9) ' SW_RESTORE
    15. End Sub
    16. End Class

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!