AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte MyPC (SystemInfo Programm)
Thema durchsuchen
Ansicht
Themen-Optionen

MyPC (SystemInfo Programm)

Ein Thema von Mazel · begonnen am 19. Okt 2006 · letzter Beitrag vom 16. Jun 2007
 
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: MyPC (SystemInfo Programm)

  Alt 23. Nov 2006, 20:21
Zu Deinem Code oben, zum Auslesen der Ordnerverzeichnisse:
Ich glaube das liegt daran, dass Path als Result zurückgegeben wird und danach freigegeben wird.
Evtl. könnten dadurch Exceptions entstehen.

Hier mal, wie ich es gemacht habe:
Delphi-Quellcode:
function GetShellPath(const CSIDL: Byte): String;
var pidl: PItemIdList; Malloc: IMalloc;
begin
  if (SHGetMalloc(Malloc)=S_OK) and SUCCEEDED(SHGetSpecialFolderLocation(0,CSIDL,pidl)) then
  try
    SetLength(Result,MAX_PATH+1);
    if SHGetPathFromIDList(pidl,PChar(Result)) and (PChar(Result)<>'') then
      Result:=IncludeTrailingPathDelimiter(PChar(Result))
    else
      Result:='';
  finally
    Malloc.Free(pidl);
  end
  else
    Result:='';
end;
Dann noch einen Code hierzu:
Zitat von Martin K:
Aber noch ein paar Vorschläge:
- unter Prozesse fehlt bei manchen der Pfad und daher auch das Icon.
Tipp: wenn nur der Dateiname da steht, z.B. calc.exe könntest Du über die EnvironmentVariable Path und mithilfe von FileExists evtl. den Pfad herausfinden.
- unter Dienste fehlen ziemlich viele Icons. Evtl. müsstest Du, um an den Pfad des Icons heran zu kommen, Parameter aus dem Pfad herausfiltern und Anführungsstriche entfernen, dazu gab es hier mal einen ganz guten Code.
Die folgende Funktion entfernt die Parameter, die nach einer Leertaste folgen können bzw. auch die "Anführungszeichen", expandiert die %Umgebungsvariablen%, und findet eine ausführbare Datei mittels der Umgebungsvariablen Path und PathExt.

Wenn die Datei nicht gefunden wurde, wird ein leerer String zurückgegeben, ansonsten der vollständige Dateiname.
Delphi-Quellcode:
function GetExecFileName(const Command: String): String;

  function ExpandEnvironmentPath(const Path: String): String;
  begin
    SetLength(Result,ExpandEnvironmentStrings(PChar(Path),nil,0));
    ExpandEnvironmentStrings(PChar(Path),PChar(Result),Length(Result));
    Result:=PChar(Result);
  end;

var b: Boolean; i,j: Integer; s: String; Path, PathExt: TStrings;
begin
  s:=Trim(ExpandEnvironmentPath(Command));
  if (s='') or FileExists(s) then
    Result:=s
  else
  begin
    i:=1;
    b:=False;
    while (i<=Length(s)) and ((s[i]<>' ') or b) do
    begin
      if s[i]='"then
        b:=not b;
      Inc(i);
    end;
    s:=Trim(StringReplace(Copy(s,1,i-1),'"','',[rfReplaceAll]));
    if (s='') or FileExists(s) then
      Result:=s
    else
    begin
      Path:=TStringList.Create;
      PathExt:=TStringList.Create;
      try
        Path.Delimiter:=PathSep;
        Path.DelimitedText:=GetEnvironmentVariable('Path');
        Path.Append(ExpandEnvironmentPath('%UserProfile%'));
        Path.Append(ExpandEnvironmentPath('%SystemDrive%'));
        PathExt.Delimiter:=PathSep;
        PathExt.DelimitedText:=LowerCase(GetEnvironmentVariable('PathExt'));
        if PathExt.Count>0 then
          for i:=0 to Pred(PathExt.Count) do
            if FileExists(ChangeFileExt(s,PathExt[i])) then
            begin
              Result:=ChangeFileExt(s,PathExt[i]);
              Exit;
            end;
        if Path.Count>0 then
          for j:=0 to Pred(Path.Count) do
          begin
            if FileExists(IncludeTrailingPathDelimiter(Path[j])+s) then
            begin
              Result:=IncludeTrailingPathDelimiter(Path[j])+s;
              Exit;
            end
            else
            if PathExt.Count>0 then
              for i:=0 to Pred(PathExt.Count) do
                if FileExists(ChangeFileExt(IncludeTrailingPathDelimiter(Path[j])+s,PathExt[i])) then
                begin
                  Result:=ChangeFileExt(IncludeTrailingPathDelimiter(Path[j])+s,PathExt[i]);
                  Exit;
                end;
          end;
        Result:='';
      finally
        Path.Free;
        PathExt.Free;
      end;
    end;
  end;
end;
Beispiel:
GetExecFileName('calc'); liefert:
C:\WINDOWS\system32\calc.exe
zurück.
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
 


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 11:54 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