Avatar billede nubi19 Nybegynder
27. januar 2003 - 14:42 Der er 6 kommentarer og
1 løsning

Liste over kørende vinduer, hvordan ?

Jeg står og skal bruge en liste over de vinduer der kører, dvs. titlen på vinduet, IKKE navnet på .exe filen, og ikke .dll'er osv.
Jeg havde forestillet mig noget med enumProcesses, men af underlige grunde kan jeg ikke compile pga. psapi.lib der er i udu. Så kom jeg til at tænke på at enumProcesses kun giver mig filnavnet og det er jo reelt ikke det jeg skal bruge, så måske er der en anden løsning ?

Listen må gerne stoppes i en combobox eller listbox, men for min skyld må i også gerne lave noget kode der bare hælder den i et char-array eller en AnsiString, så skal jeg nok selv rode det rundt :)
Avatar billede jpk Nybegynder
27. januar 2003 - 14:52 #1
Jeg har engang lavet det ved at bruge GetDesktopWindow og GetNextWindow hvis jeg husker rigtig...
Avatar billede nubi19 Nybegynder
27. januar 2003 - 15:26 #2
GetNextWindow(); giver den her fejl:
[C++ Error] Unit1.cpp(19): E2219 Wrong number of arguments in call of macro 'GetNextWindow'.
Nu spørger jeg så mig selv om det virkelig kan passe at det er en makro ?
Avatar billede nubi19 Nybegynder
27. januar 2003 - 15:39 #3
Glem det med fejlen, det har jeg løst, MEN: når jeg kører følgende, giver GetNextWindow NULL i første gennemløb:
HWND handle = GetDesktopWindow();
char tekst[100];
do
{
  handle = GetNextWindow(handle, GW_HWNDNEXT);
  GetWindowText(handle, tekst,100);
  Memo1->Lines->Add(tekst);
} while (handle != NULL);
hvorfor får jeg kun et gennemløb når jeg har 7-8 vinduer åbne ? (bl.a. mapper, og iexplore)
Avatar billede jpk Nybegynder
27. januar 2003 - 16:47 #4
Jeg kan desværre ikke finde min kode, men prøv at kigge på EnumChildWindows
Avatar billede nubi19 Nybegynder
27. januar 2003 - 17:01 #5
Well jeg må nok indrømme at jeg ikke kan få den funktion til at virke, den skal bruge en pointer til EnumWindowsProc (hvis jeg husker rigtigt, kiggede på den for ca. 15-30 min. siden) og det kan jeg altså ikke helt hitte ud af - æv.

Men jeg fik det med getnextwindow til at virke, MEN det giver også undervinduer i programmerne etc. og det duer ikke, jeg skal kun have de som ligger i taskbar.
Men jeg tænkte på om man kan få et handle fra et filnavn (såfremt filen kører), for så kunne jeg (hvis nogen kan hjælpe mig med at få psapi til at virke) gå den vej.

Du må dog meget gerne sætte noget kode sammen der kører enumchildwindows, så jeg kan se om den kan klare opgaven. Jeg sætter lige point op.
Avatar billede jpk Nybegynder
27. januar 2003 - 18:14 #6
Jeg har lige lavet et lille eksempel, der godt nok bruger MFC, men du kan sikkert se meningen...
Jeg ved ikke om det fungerer som du vil have det, men jeg sorterer alle vinduer fra, der ikke er synlige.

    CString strText;
    HWND hWnd = NULL;
    while(true)
    {
        hWnd = FindWindowEx(NULL, hWnd,    NULL, NULL);
        if(!hWnd)
            break;

        CWnd* pWnd = CWnd::FromHandle(hWnd);
        if(pWnd->GetStyle() & WS_VISIBLE)
        {
            pWnd->GetWindowText(strText);
            TRACE("Text: " + strText + "\n");
        }
    }
Avatar billede nubi19 Nybegynder
27. januar 2003 - 19:04 #7
Well jeg fandt endelig ud af noget funktionelt (lavede lidt om på dit eksempel), så mange tak :)
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
Kurser inden for grundlæggende programmering

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