Avatar billede kage_mand Nybegynder
18. november 2010 - 17:53 Der er 4 kommentarer og
1 løsning

Liste med åbne vinduer

Hej Eksperter

Jeg kan ikke helt finde ud af hvordan, jeg kan få en fuld liste over åbne vinduer.

Jeg har prøvet noget forskelligt blandt andet denne funktion:

foreach (Process p in Process.GetProcesses())
{
  string title = p.MainWindowTitle;
  if (title != string.Empty)
  {
      listBox1.Items.Add(title);
  }
}

Men den tager ikke forbehold for at der kan være to process/vinduer med samme navn.

Det eneste jeg har brug for er at få det fulde navn på alle vinduer der kan ses i taskbaren.

Håber der er nogen der har prøvet noget lignende før :)
Avatar billede plohse33 Nybegynder
18. november 2010 - 18:47 #1
Det er ikke lige til at gå til, men du skal igang med noget P/Invoke.

dvs. du skal ned i WinAPI'et user32.

Dernede finder du nogle metoder som FindWindows, FindDesktopWindows, EnumWindows.

Jeg har ikke lige nogle ekempler, men sidder og rodder med P/Invoke i en anden forbindelse.

Men start evt med at google, og der er også denne her hjemmeside http://pinvoke.net/ den kan godt virke lidt uoverskuelig og svær at gå til, men med lidt tålmodighed så går det, der er faktisk nogle eksempler på noget, hvis du i venstre side går ind i user32, og scroller ned til FindWindows etc...

Håber du kan bruge det til noget.
Avatar billede kage_mand Nybegynder
23. november 2010 - 19:05 #2
Løste det med dette kode.

public class WindowWrapper : IWin32Window
        {
            internal IntPtr handle;
            internal String title;

            public IntPtr Handle
            {
                get { return handle; }
            }

            public String Title
            {
                get { return title; }
            }
        }

        internal static class openWindows
        {
            public static readonly Int32 GWL_STYLE = -16;
            public static readonly UInt64 WS_VISIBLE = 0x10000000L;
            public static readonly UInt64 WS_BORDER = 0x00800000L;
            public static readonly UInt64 DESIRED_WS = WS_BORDER | WS_VISIBLE;

            public delegate Boolean EnumWindowsCallback(IntPtr hwnd, Int32 lParam);

            public static List<WindowWrapper> GetAllWindows()
            {
                List<WindowWrapper> windows = new List<WindowWrapper>();
                StringBuilder buffer = new StringBuilder(100);
                EnumWindows(delegate(IntPtr hwnd, Int32 lParam)
                {
                    if ((GetWindowLongA(hwnd, GWL_STYLE) & DESIRED_WS) == DESIRED_WS)
                    {
                        GetWindowText(hwnd, buffer, buffer.Capacity);
                        WindowWrapper wnd = new WindowWrapper();
                        wnd.handle = hwnd;
                        wnd.title = buffer.ToString();
                        windows.Add(wnd);
                    }
                    return true;
                }, 0);

                return windows;
            }

            [DllImport("user32.dll")]
            static extern Int32 EnumWindows(EnumWindowsCallback lpEnumFunc, Int32 lParam);

            [DllImport("user32.dll")]
            public static extern void GetWindowText(IntPtr hWnd, StringBuilder lpString, Int32 nMaxCount);

            [DllImport("user32.dll")]
            static extern UInt64 GetWindowLongA(IntPtr hWnd, Int32 nIndex);
        }

Takker for hjælpen.
Avatar billede Syska Mester
23. november 2010 - 22:21 #3
dvs, så på en anden måde .. . point til plohse33 eller ?
Avatar billede kage_mand Nybegynder
03. december 2010 - 09:07 #4
Giv et svar plohse33
Avatar billede kage_mand Nybegynder
18. december 2010 - 08:30 #5
Lukker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester