Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fenster sortieren? (https://www.delphipraxis.net/128584-fenster-sortieren.html)

Jonas 2. Feb 2009 01:21


Fenster sortieren?
 
Mit der EnumWindowsProc lese ich bestimmte fenster aus.

Mein Problem ist nur, dass ich diese Fenster gerne in der Reihenfolge wie sie erstellt wurden, auslesen möchte.

Jedoch habe ich keine Ahnung wie man die Reihenfolge der Erstellungen heraus findet.

Ich habe an PID gedacht, musste aber im Taskmanager festestellen, dass auch diese Angaben ungenau sind.

Kann mir jemand helfen?

Hansa 2. Feb 2009 01:35

Re: Fenster sortieren?
 
Ini-Datei verwenden. :mrgreen:

Jonas 2. Feb 2009 01:42

Re: Fenster sortieren?
 
Huh? Ini-Datei?

Ich muss doch erstmal wissen wie ich auslese in welcher reihenfolge die Fenster erstellt wurden. oô?

Hansa 2. Feb 2009 02:01

Re: Fenster sortieren?
 
Die werden erstellt, oder ? Dann kann man die in dieser Reihenfolge auch in INI schreiben und wieder aus der Datei auslesen und fertig. Dürfte allerdings zu einfach sein. :mrgreen:

Jonas 2. Feb 2009 02:58

Re: Fenster sortieren?
 
Ja, aber nicht von mir. Ich rede ja von allgemeinen Fenstern, anderen Programmen. Keine die ich selbst erstelle.

mr_emre_d 2. Feb 2009 04:44

Re: Fenster sortieren?
 
Also mit der folgenden Funktion kannst du mal die Startzeit ermitteln :)

Delphi-Quellcode:
uses tlHelp32;

...

function GetProcessTime( ProcessName: String ): TDateTime;
var
  hProc, b: Cardinal;
  CT, T: TFileTime;
  ST: TSystemTime;
  tzi: TTimeZoneInformation;
  function GetProcID(const lpName: String): Cardinal;
  var
    hSnapShot: LongWord;
    Task: TProcessEntry32;
  begin
    Result := 0;
    hSnapShot := CreateToolHelp32SnapShot( TH32CS_SNAPPROCESS, TH32CS_SNAPALL );
    FillChar( Task, SizeOf(Task), #00 );
    Task.dwSize := SizeOf(Task);
    Process32First( hSnapShot, Task );
    repeat
      if LowerCase(Task.szExeFile) = LowerCase(lpName) then
      begin
        Result := Task.th32ProcessID;
        CloseHandle( hSnapShot );
        Exit;
      end;
    until not Process32Next( hSnapShot, Task );
    CloseHandle( hSnapShot );
  end;
begin
  try
    b := GetProcID( pChar(Processname) );
    hProc := OpenProcess( PROCESS_QUERY_INFORMATION, False, b );
    if hProc = 0 then
      Exit;
    GetProcessTimes( hProc, CT, T, T, T );
    FileTimeToSystemTime( CT, ST );
    GetTimeZoneInformation( tzi );
    SystemTimeToTzSpecificLocalTime( @tzi, st, st );
    Result := StrToTime(Format( '%d:%d:%d', [ ST.wHour, ST.wMinute, ST.wSecond] ) );
  finally
    CloseHandle( hProc );
  end;
end;

...

//Aufrufmöglichkeit
ShowMessage( TimeToStr( GetProcessTime('explorer.exe') ) );
EDIT:
Zitat:

Zitat von Jonas
Mein Problem ist nur, dass ich diese Fenster gerne in der Reihenfolge wie sie erstellt wurden, auslesen möchte.

Nun ja ... So dürfte das nicht gehen aber wenn du sie samt der CreationTime speicherst könntest du sie nachher sortieren !

EDIT2:
Ein kleiner Fehler wurde behoben

MfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 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