Einzelnen Beitrag anzeigen

Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#3

Re: Windows-CD erkennen

  Alt 17. Jan 2005, 04:36
Zitat von MathiasSimmack:
gibt´s da vllt. spezielle Dateien oder Daten auf der CD, die man ausliest und mit denen man ermitteln kann, was für ein Windows das ist
Du könntest z.B. die gepackte Kernel32 Datei entpacken und die Version auslesen. Mal ein kleines Beispiel:

Delphi-Quellcode:
function SetupDecompressOrCopyFile(SourceFileName, TargetFileName: PChar; CompressionType: Pointer)
  : DWORD; stdcall; external 'SETUPAPI.DLLname 'SetupDecompressOrCopyFileA';
Delphi-Quellcode:
function GetWinCDVersion(const I386Path: String; var Major, Minor, Build, Revision: Word): Boolean;
var
  TempFileName: array[0..MAX_PATH] of Char;
  SourceFileName: String;
  VerInfoSize: DWORD;
  VerInfo: Pointer;
  VerValue: PVSFixedFileInfo;
begin

  Result := False;
  SourceFileName := IncludeTrailingBackslash(I386Path) + 'KERNEL32.DL_';
  if FileExists(SourceFileName) then
    if GetTempPath(SizeOf(TempFileName), TempFileName) > 0 then
      if (GetTempFileName(TempFileName, nil, 0, TempFileName) > 0) and (GetLastError = NO_ERROR) then
        if SetupDecompressOrCopyFile(PChar(SourceFileName), TempFileName, nil) = NO_ERROR then
        begin
          VerInfoSize := GetFileVersionInfoSize(TempFileName, DWORD(nil^));
          if VerInfoSize > 0 then
          begin
            GetMem(VerInfo, VerInfoSize);
            try
              if GetFileVersionInfo(TempFileName, 0, VerInfoSize, VerInfo) then
                if VerQueryValue(VerInfo, '\', Pointer(VerValue), DWORD(nil^)) then
                  with VerValue^ do
                  begin
                    Major := dwFileVersionMS shr 16;
                    Minor := dwFileVersionMS and $FFFF;
                    Build := dwFileVersionLS shr 16;
                    Revision := dwFileVersionLS and $FFFF;
                    DeleteFile(TempFileName);
                    Result := True;
                  end;
            finally
              FreeMem(VerInfo);
            end;
          end;
        end;

end;
Das läuft so aber nur unter Windows NT/2k/XP/2k3. Auf 'ner Windows 9x CD musst du dir die CAB Dateien vornehmen. Kann dir aber leider nicht sagen, woran man erkennen kann ob es eine Workstation oder Server Version ist.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat