AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SetLength mein problem

Ein Thema von EWeiss · begonnen am 31. Okt 2006 · letzter Beitrag vom 1. Nov 2006
Antwort Antwort
Muetze1
(Gast)

n/a Beiträge
 
#1

Re: SetLength mein problem

  Alt 31. Okt 2006, 18:51
Ich gebe deinen Quellcode mal wieder mit ein paar Anmerkungen als Kommentar

Delphi-Quellcode:
 PWindowDescr = ^TWindowDescr;
 TWindowDescr = record
    hWnd : HWND;
    ProcessID : Pointer;
    Title : String;
    Klass : String;
    ExeName : String;
End;
    AWindowDescr = array of PWindowDescr; // Warum ein Array von Zeigern auf den Record anstatt eines Arrays of Records?

Var
    wDescr : AWindowDescr;

// Alle offene Fenster suchen.
Function GetWindowList(var wDescr: AWindowDescr): DWORD;
Var
  IntI : Integer; // Zähler füt die Fenster Handle
  h_wnd : HWND; // Fenster Handle
  Index : Integer;
Begin
    // Zähler initialisieren
    IntI := 0;
    h_wnd := GetTopWindow(0);
    // Zuweisen von 100 Array Elementen of PWindowDescr
    // Zum einlesen der Fenster Handle
    Index := 100;
    SetLength(wDescr, Succ(index)); // also werden hier 101 Elemente angelegt, Zugreifbar mit Index 0 bis 100

    New(wDescr[index]); // warum holst du dir den Speicher für nur einen Record (den an Index 100)? Was ist der Sinn?

    ZeroMemory(wDescr[index], SizeOf(wDescr[index]^)); // warum initialisierst du den Record bei Index 100?
                                                        // Ich glaube der erste Parameter müsste noch ein ^ bekommen, weil sonst
                                                        // schreibt ZeroMemory die Array-Pointer-Liste mit 0'en voll anstatt des Records
    Repeat
      // Zähler um 1 erhöhen // warum? Willst du Index 0 nicht nutzen? Wenn vor dem Until ein Inc(IntI)
      inc(IntI);

      // Wenn mehr als High Fenster Handle gefunden
      If IntI > High(wDescr) Then
        // Array um 10 erhöhen
        SetLength(wDescr, High(wDescr) + 10); // High() gibt dir den höchsten Index an, aber nicht die Anzahl der Elemente. SetLength() will die Anzahl der neuen Elemente, also Anzahl der Elemente bisher + 10, sprich: SetLength(wDescr, Length(wDescr) + 10);

        // Fenster Handle ermitteln
        h_wnd := GetWindow(h_wnd, GW_HWNDNEXT);
        // Fenster Handle gefunden
        If h_wnd <> 0 Then
         begin
           New(wDescr[IntI]); // beachte hier: es ist der Index 100 schon initialisiert!
           ZeroMemory(wDescr[IntI], SizeOf(wDescr[IntI]^)); // siehe oben: 1. Parameter sollte noch ein ^ bekommen
           // Wert zuweisen
           wDescr[IntI].hWnd := h_wnd;
           // Window Informationen einlesen
           GetWindowInfo(wDescr[IntI]);
         end;

    // Schleife durchlaufen bis kein Fenster Handle mehr existiert
    until h_wnd = 0;

    // Array Redimensionieren Fenster-Handle Count
    SetLength(wDescr, IntI); // wenn du oben das mit dem Inc(IntI) änderst, dann hier Succ(IntI) als höchstes Element setzen
    // Ergebnis übergeben
    Result := IntI;

End;
Ich hoffe das hilft und löst nicht wieder Beleidigungen aus...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz