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
Antwort Antwort
Seite 7 von 10   « Erste     567 89     Letzte »    
Benutzerbild von Mazel
Mazel
Registriert seit: 11. Nov 2005
Beschreibung
Dieses Tool zeigt verschiedene Systeminoformationen an. Die folgende Liste zeigt, welche Informationen angezeigt werden. Die Liste und die angezeigten Informationen versuche ich zu erweitern.

Informationen
  • Betriebssystem
  • Benutzer
  • physikalischer Speicher (RAM)
  • zugesicherter Speicher (Paging-File)
  • Anzeige
  • Maus
  • Drucker UPDATE
  • Tastatur
  • Powerstatus
  • installierte Schriftarten
  • installierte Dateierweiterungen
  • installierte Software
  • Systemverzeichnisse
  • Systemprogramme
  • System
  • logische Laufwerke
  • physikalische Laufwerke
  • Netzwerkstatus
  • Arbeitsgruppen
  • Computer
  • Netzwerkadapter
  • Prozesse
  • Dienste
  • Prozessor
Wichtig
  • Betriebssystem: Windows 98/Me/NT 4/2000/2003/XP/Vista
  • für Windows 98/NT 4 ist für erweiterte Informationen (Bsp: Prozessor) WMI nötig
1.0.0 Build 555
  • update: Drucker
  • update: allgemeine Verbesserungen
Gruß
Mazel
Miniaturansicht angehängter Grafiken
mypc_1.0.0_367.png  
Angehängte Dateien
Dateityp: zip mypc_1.0.0_187.zip (348,9 KB, 532x aufgerufen)
 
Benutzerbild von Mazel
Mazel
 
#61
  Alt 20. Nov 2006, 14:46
Hallo,

ich weis leider nicht warum diese Fehler auftauchen bei der Programmliste und Verzeichnisliste. Ich frage voher ab, ob das Programm oder das Verzeichnis existiert, über FileExists oder DirectoryExists, nur wenn vorhanden, auflisten. Die Programme habe ich in einem Array und die Verzeichnisse lese ich über SHGetSpecialFolderLocation aus. Da muss der Fehler stecken:
Delphi-Quellcode:
{--[GetSpecialDir]-------------------------------------------------------------}
const
// als Beispiel ein paar Systemverzeichnisse

 CSIDL_COMMON_APPDATA = $0023;
 CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
 CSIDL_COMMON_DOCUMENTS = $002E;
 CSIDL_COMMON_FAVORITES = $001F;

function GetSpecialDir(CSIDL: Integer): String;
var
 PIDL : PItemIDList;
 Path : PChar;

begin
 SHGetSpecialFolderLocation(Main.Handle, CSIDL, PIDL);
 GetMem(Path, MAX_PATH);
 SHGetPathFromIDList(PIDL, Path);
 Result := Path;
 FreeMem(Path);
end;

// hier das Anzeigen
for i := 0 to 34 do
 begin
  If DirectoryExists(GetSpecialDir(SYSTEM_CSIDL_DIRS[i])) then
   begin
    Item := Main.LVwInfos.Items.Add;
    Item.Caption := SYSTEM_STRING_DIRS[i];
    Item.SubItems.Add(GetSpecialDir(SYSTEM_CSIDL_DIRS[i]));
   end;
 end;
Bei mein Vaters Rechner kommt der Fehler beim Autostartverzeichniss aber warum, weis ich nicht.

Nun zum registriert sein oder nicht registriert sein.
Diesen Wert lese ich aus der Registry aus. Dort scheint zu stehen, dass Windows registriert ist.
HKLM\SOFTWARE\Microsoft\Windows( NT)\CurrentVersion\'; und den Wert von RegDone.
Ich prüfe ob der Wert von RegDone = '' oder nicht, wenn es so ist, dann ist es nicht registriert sonst ist es registiert.

Zu den Icons: ja, leider Fehlen bei manchen die Pfad, ähnlich auch bei den Dateitypen, da muss ich noch die Anführungstriche und andere Zeichen entfernen um den genauen Pfad zu ermitteln.
Zitat:
Ich habe ein DualMon System, also habe ich 2 Monitore mit zwei Auflösungen. Dies wird bisher noch nicht berücksichtigt. Willst du einen Code haben um die Grafikkartennamen (vom Treiber) und den Monitornamen zu bekommen an den Ausgängen?
Leider konnte ich in der Zeit nicht alles schaffen, aber ein Code der mir helfne könnte, kannst du mir durchaus geben. Wär schön.

Gruß
Mazel
Marcel Jänicke
  Mit Zitat antworten Zitat
Muetze1
 
#62
  Alt 20. Nov 2006, 17:46
Ok, kurzer Code dazu:

Delphi-Quellcode:
Procedure TForm1.FillMonitorList;
Var
  Cntr : Cardinal;
  Info : TDisplayDevice;
  AdapterName : PChar;
  OldPos : Integer;
Const
  DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = $00000001;
  DISPLAY_DEVICE_MULTI_DRIVER = $00000002;
  DISPLAY_DEVICE_PRIMARY_DEVICE = $00000004;
  DISPLAY_DEVICE_MIRRORING_DRIVER = $00000008;
  DISPLAY_DEVICE_VGA = $00000010;
Begin
  lbMonitorList.Items.Add('------------------ Displays ----------------');

  Cntr := 0;
  Info.cb := SizeOf(Info);
  While EnumDisplayDevices(Nil, Cntr, Info, 0) Do
  Begin
    lbMonitorList.Items.Add('* Device '+IntToStr(Cntr)+':');
    lbMonitorList.Items.Add(' DeviceName : '+Info.DeviceName);
    lbMonitorList.Items.Add(' DeviceString: '+Info.DeviceString);

    OldPos := lbMonitorList.Items.Add(' StateFlags: ');

    If ( Info.StateFlags And DISPLAY_DEVICE_ATTACHED_TO_DESKTOP ) = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP Then
      lbMonitorList.Items.Add(' + Display Device Attached To Desktop')
    Else
      lbMonitorList.Items.Add(' - Display Device Attached To Desktop');

    If ( Info.StateFlags And DISPLAY_DEVICE_MULTI_DRIVER ) = DISPLAY_DEVICE_MULTI_DRIVER Then
      lbMonitorList.Items.Add(' + Display Device Multi Driver')
    Else
      lbMonitorList.Items.Add(' - Display Device Multi Driver');

    If ( Info.StateFlags And DISPLAY_DEVICE_PRIMARY_DEVICE ) = DISPLAY_DEVICE_PRIMARY_DEVICE Then
      lbMonitorList.Items.Add(' + Display Device Primary Device')
    Else
      lbMonitorList.Items.Add(' - Display Device Primary Device');

    If ( Info.StateFlags And DISPLAY_DEVICE_MIRRORING_DRIVER ) = DISPLAY_DEVICE_MIRRORING_DRIVER Then
      lbMonitorList.Items.Add(' + Display Device Mirroring Driver')
    Else
      lbMonitorList.Items.Add(' - Display Device Mirroring Driver');

    If ( Info.StateFlags And DISPLAY_DEVICE_VGA ) = DISPLAY_DEVICE_VGA Then
      lbMonitorList.Items.Add(' + Display Device VGA')
    Else
      lbMonitorList.Items.Add(' - Display Device VGA');


    AdapterName := StrAlloc(SizeOf(Info.DeviceName));
    Try
      StrCopy(AdapterName, Info.DeviceName);
      EnumDisplayDevices(AdapterName, 0, Info, 0);
      lbMonitorList.Items.Insert(OldPos, ' Monitorname : ' + Info.DeviceString);
    Finally
      StrDispose(AdapterName);
    End;

    Inc(Cntr);
  End;
End;
lbMonitorList = TListBox

Und man möge mir verzeihen, aber es ist ein alter Code. Dadurch stehen dort noch Dinge wie StrAlloc() und StrDispose(). Das könntest du bei dir gleich abändern...
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

 
Turbo Delphi für Win32
 
#63
  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 Zitat antworten Zitat
Benutzerbild von Mazel
Mazel
 
#64
  Alt 24. Nov 2006, 07:24
Danke an Muetze1 und Martin K. Ich werde, sobald ich wieder Zeit dafür habe, die Codes verwenden um eine noch bessere Version zu bauen.

Danke nochmal

Gruß
Mazel
Marcel Jänicke
  Mit Zitat antworten Zitat
stonimahoni

 
Delphi 7 Professional
 
#65
  Alt 24. Nov 2006, 08:27
hi..


dein prog gefällt mir sehr gut. alle achtung

wenn du nun noch schaffst ( sofern du das überhaupt möchtest ), die smart werte und die temps der hdds (aller, zumal everest z.b. das irgendwie nicht schafft - bei aktuellen chips) und der cpu usw auszulesen und anzuzeigen, wird es einen festen platz bei mir einnehmen



ps.: den code stellst du nicht noch zur verfügung oder? würde mich echt mal interessieren wie du so diverses gelöst hast


big thx und mfg und vor allem : viel erfolg bei der weiterentwicklung


carsten
Carsten
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel
 
#66
  Alt 24. Nov 2006, 12:24
Danke für das Feedback
Zitat:
wenn du nun noch schaffst ( sofern du das überhaupt möchtest ), die smart werte und die temps der hdds (aller, zumal everest z.b. das irgendwie nicht schafft - bei aktuellen chips) und der cpu usw auszulesen und anzuzeigen, wird es einen festen platz bei mir einnehmen
Damit habe ich mich nun noch garnicht beschäftigt, da müsste ich mich ersteinmal einarbeiten.

Zu den Code: Ich kann jedem gerne bestimmte Teile aus meinem Programm geben, das ist kein Problem, nur, wenn ich den gesamten Code veröffentliche ist es nicht mehr Freeware sondern OpenSource, was mir nicht so gefällt. Aber wie gesagt, gerne gebe ich Funktionen oder Prozeduren, einfach fragen.

Gruß
Mazel
Marcel Jänicke
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#67
  Alt 14. Mai 2007, 20:34
Hi,
nice Tool. Ich bastel gerade auch an solch einem Tool. Ich probiere mich dabei es auf die Betriebssystem Win2000, Win2003, WinXp und WinVista zum laufen zu bekommen.

Ich habe gerade mal Dein aktuellste Version vom Tool unter Windows XP getestet und habe die folgende Fehlermeldung im Anhang erhalten.

Zitat von Mazel:
Zu den Code: Ich kann jedem gerne bestimmte Teile aus meinem Programm geben, das ist kein Problem, nur, wenn ich den gesamten Code veröffentliche ist es nicht mehr Freeware sondern OpenSource, was mir nicht so gefällt. Aber wie gesagt, gerne gebe ich Funktionen oder Prozeduren, einfach fragen.
Dazu würde mich eigentlich nur interessieren, wie Du die Speicherauslastung von den Processen ausliest und mir da eventuelle einen Tipp geben könntest. Ich bastel nämlich gerade an einem gleichen Programm. Unter .NET Framework habe ich es mittlerweile geschafft mit C#. Schreibe mir doch bitte einfach eine kurze PN, wie Du es gemacht hast, mit eventuellen Quellen, Links etc.

Danke für Deine Mühen im vorraus.
Miniaturansicht angehängter Grafiken
mypc-fehler_161.jpg  
Rolf Warnecke
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel
 
#68
  Alt 15. Mai 2007, 12:10
Danke dir für die Info.

Der Fehler bei den Systemverzeichnisen existiert schon lange, und ich habe bisher keine Zeit gefunden, den Fehler zu beheben, jetzt aber werde ich mich wieder an die Arbeit machen.

Zu deiner Frage, die Informationen des Speichers lese ich über das WMI Interface aus. Ich habe dir dazu eine PN geschickt mit einem Beispiel Programm, der aus Codefragmenten meines Programmes besteht.

Gruß
Mazel
Marcel Jänicke
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

 
Delphi XE8 Enterprise
 
#69
  Alt 20. Mai 2007, 11:40
Hi,

ich habe noch einen kleinen Fehler gefunden. Wird Dein Programm auf einem Rechner ausgeführt, welcher mehr als 2GB physikalischen Arbeitsspeicher beistzt, werden nur 2GB angezeigt.
Rolf Warnecke
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel
 
#70
  Alt 20. Mai 2007, 12:08
Oh, danke.

Das ist scheinbar bisher noch keinem aufgefallen. Ich denke mal dass das Programm welche getestet haben, die mehr als 2 GB haben.

Nun gut, ich werde mich darum kümmern, aber extra 1 GB zu meinem noch dazu kaufen werde ich nicht.

Gruß
Mazel
Marcel Jänicke
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 7 von 10   « Erste     567 89     Letzte »    


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 06:52 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