![]() |
Windows-CD erkennen
So, jetzt habe ich endlich mal wieder ein kleines Programm, das mich reizt :), und da brauche ich glatt mal Hilfe.
Ihr kennt doch diese Funktion, wenn man aufgefordert wird, die Windows-CD einzulegen, weil bspw. was nachträglich zu installieren ist. Und irgendwie erkennt das System die CD und fordert ggf. die richtige an. Ich würde etwas ähnliches gern nutzen, daher die Frage: Wie kann ich zweifelsfrei erkennen ob eine Windows 2000-, Windows XP- oder meinetwegen auch Win 2003-CD im Laufwerk liegt? 2000 und XP wären mir am wichtigsten, denn die kann ich notfalls zum Testen organisieren. Ich habe das mal bei einem Programm gesehen, das in einem Label anzeigte, um welche Version es sich handelt. Da stand dann so was wie "Windows XP Professional", glaube ich :gruebel: Es hat jedenfalls gestimmt. Gibt es da irgendeine API-Erkennungsfunktion, die euch bekannt ist und die man nutzen kann? Keine Ahnung, 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 ... Na ja, so was jedenfalls. :) Ich hab´s erst mal in diese Sparte geschrieben. Wenn es API- oder ähnliche Funktionen gibt, kann ein Mod den Beitrag dann ja gern verschieben. |
Re: Windows-CD erkennen
Guck mal in diese beiden dateien deiner Windows CD:
Zitat:
Zitat:
|
Re: Windows-CD erkennen
Zitat:
Delphi-Quellcode:
function SetupDecompressOrCopyFile(SourceFileName, TargetFileName: PChar; CompressionType: Pointer)
: DWORD; stdcall; external 'SETUPAPI.DLL' name 'SetupDecompressOrCopyFileA';
Delphi-Quellcode:
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.
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; |
Re: Windows-CD erkennen
Ich könnte auch die Versionsnummer des Setup im Root prüfen. Na ja, ich werde mir das mal durch den Kopf gehen lassen.
Ich muss erst mal noch ein Aktualisierungsproblem in dem Programm fixen. Es startet via "ShellExecuteAndWait" (von Assa) ein paar Programme, wird dadurch aber nicht aktualisiert (das Fenster, meine ich). Das sieht natürlich unschön aus, wenn man was anderes drüber packt, usw. Ihr wisst schon. Das ist erst mal wichtiger. :) Edit-PS: trotzdem Danke erst mal bis hier. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz