Entwickler-Ecke
Windows API - Win Api - Festplattennamen + Speicherverbrauch
Gahero - So 21.10.07 22:11
Titel: Win Api - Festplattennamen + Speicherverbrauch
Hallo,
ich versuche schon seid Stunden mir den Namen der Festplatte anzeigen zu lassen, auf der Windows installiert ist. Für den zugriff auf die Win Klassen benutze ich folgende Funktion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| function GetWMIstring(wmiHost, wmiClass, wmiProperty: string): string; var Locator: ISWbemLocator; Services: ISWbemServices; SObject: ISWbemObject; ObjSet: ISWbemObjectSet; SProp: ISWbemProperty; Enum: IEnumVariant; Value: Cardinal; TempObj: OleVariant;
begin try Locator := CoSWbemLocator.Create; Services := Locator.ConnectServer(wmiHost, 'root\cimv2', '', '', '', '', 0, nil); ObjSet := Services.ExecQuery('SELECT * FROM ' + wmiClass, 'WQL', wbemFlagReturnImmediately and wbemFlagForwardOnly, nil); Enum := (ObjSet._NewEnum) as IEnumVariant; while (Enum.Next(1, TempObj, Value) = S_OK) do begin SObject := IUnknown(tempObj) as ISWBemObject; SProp := SObject.Properties_.Item(wmiProperty, 0); if VarIsNull(SProp.Get_Value) then result := '' else begin result := SProp.Get_Value; end; end; except on exception do result := ''; end; end; |
Ich habe nun in vielen Klassen Einträge gefunden, die mir den Festplattennamen (Produktname Bsp: WD2500YS) zurückgegeben, aber wenn ein USB-Stick oder Speicherlesegerät drin ist, wird dieses angezeigt, was ja nicht Sinn der Sache ist. Weiß jmd den richtigen Eintrag oder eine Möglichkeit wie ich zum erwünschten Ergebnis komme?
Desweiteren ist mir auch aufgefallen, dass beim Aufrufen der obigen Funktion der Speicher gefüllt wird,a ber nicht wieder geleert wird. Da ich diese Funktion in meinem Programm ziemlich oft aufrufe, steigt er Speicherverbrauch stark an. Wie kann man die Funktion abändern, damit er weniger verbraucht? Habe schon versucht verschiedene Sachen freizugeben, aber hat immer in einer Fehlermeldung geendet...
Delete - So 21.10.07 23:36
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| function GetWinDir: string;
var Path: array[0..MAX_PATH - 1] of char; begin Result := ''; if (0 = GetWindowsDirectory(Path, MAX_PATH)) then exit; Result := Trim(Path); end;
function GetDiskName(const ADrive: Char): String; var unused: Cardinal; buffer: array[0..19] of Char; begin Result:=''; if (GetDriveType(PChar(Format('%S:\',[ADrive]) ) ) >1) and (GetVolumeInformation(PChar(ADrive+':\'), @buffer[0], SizeOf(buffer), nil, unused, unused, nil, 0)) then Result := buffer else RaiseLastOSError;end;
procedure TForm1.Button10Click(Sender: TObject); var Windrive : String; d : Char; begin Memo1.Lines.Add(Getwindir); if ((Length(GetWinDir) > 1) and (GetWinDir[2] = ':')) then WinDrive := AnsiUpperCase(Copy(GetWinDir, 1, 2)) else WinDrive := 'C:'; Memo1.Lines.Add(Windrive); d:= Windrive[1]; Memo1.Lines.Add(GetDiskname(d)); end; |
Gahero - Mo 22.10.07 09:08
Danke für die Antwort, dass ist aber nicht dass was ich suche.
Ich brauche den Produktnamen der Festplatte. Also WD2500YS oder ähnliches.
Deine Funktionen geben mir den Laufwerksbuchstaben und den Windowspfad zurück...
Delete - Mo 22.10.07 11:02
Das findest Du im Anhang:
Gahero - Mo 22.10.07 16:20
Irgendwie läuft das nicht so wie es soll. Habs mir angesehen, soll wohl das Model, die Firmwareversion und die Seriennr ausgeben, aber beim starten werden die Labelbeschriftungen nicht geändert, obwohl die Prozedur beim Programmstart aufgerufen werden müsste...
Delete - Mo 22.10.07 16:34
Note: '\\.\C:' required administrative permissions.
Hast Du Administrator-Rechte?
Gahero - Mo 22.10.07 16:40
hathor hat folgendes geschrieben: |
Note: '\\.\C:' required administrative permissions.
Hast Du Administrator-Rechte? |
Jo, ich benutze Xp grundsätzlich mit einem Administratorkonto...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!