Autor Beitrag
Gahero
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 193

Win Vista HP 64bit
Delphi 2007 Pro
BeitragVerfasst: So 21.10.07 22:11 
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:

ausblenden volle Höhe 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'''''''''0nil);
    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...
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 21.10.07 23:36 
ausblenden volle Höhe 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;
{returns Windows folder, or null string on failure}
var Path: array[0..MAX_PATH - 1of char;
begin
  Result := '';
  if (0 = GetWindowsDirectory(Path, MAX_PATH)) then exit;
  Result := Trim(Path);
end;

function GetDiskName(const ADrive: Char): String;
var
  unused: Cardinal; //oder Integer (Delphi 3)
  buffer: array[0..19of Char;
begin
  Result:='';
  if (GetDriveType(PChar(Format('%S:\',[ADrive]) ) ) >1and
     (GetVolumeInformation(PChar(ADrive+':\'),
     @buffer[0], SizeOf(buffer), nil, unused, unused, nil0)) then
    Result := buffer
  else
    RaiseLastOSError;// Bis D5 RaiseLastWin32Error;
end;

procedure TForm1.Button10Click(Sender: TObject);
var Windrive : String;  d : Char;
begin
Memo1.Lines.Add(Getwindir);
if ((Length(GetWinDir) > 1and (GetWinDir[2] = ':'))
    then WinDrive := AnsiUpperCase(Copy(GetWinDir, 12))
  else WinDrive := 'C:';
Memo1.Lines.Add(Windrive);
d:= Windrive[1];
Memo1.Lines.Add(GetDiskname(d));
end;
Gahero Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 193

Win Vista HP 64bit
Delphi 2007 Pro
BeitragVerfasst: 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...
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 22.10.07 11:02 
Das findest Du im Anhang:
Einloggen, um Attachments anzusehen!
Gahero Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 193

Win Vista HP 64bit
Delphi 2007 Pro
BeitragVerfasst: 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...
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 22.10.07 16:34 
Note: '\\.\C:' required administrative permissions.

Hast Du Administrator-Rechte?
Gahero Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 193

Win Vista HP 64bit
Delphi 2007 Pro
BeitragVerfasst: Mo 22.10.07 16:40 
user profile iconhathor hat folgendes geschrieben:
Note: '\\.\C:' required administrative permissions.

Hast Du Administrator-Rechte?


Jo, ich benutze Xp grundsätzlich mit einem Administratorkonto...