Comment implémenter une fonction qui retournera le nom du système d'exploitation? Détecter l'environnement où le programme fonctionnant sur? P>
Win2000 / XP / Vista / Win7 etc ...? P>
7 Réponses :
quelque chose comme ceci: Il n'est vraiment pas nécessaire d'appeler getversionex code> car
sysutils.pas code> a
initplatformid < / code> dans sa clause code> d'initialisation code>. D'où les constantes globales
win32majorversion code> et
win32minorversion code> (et amis) seront déjà remplacées. P> p>
Faites très attention à ce que vous faites avec des numéros de version distincts / mineurs. Voir blogs.msdn.com/b/oldnewthing/archive /2004/02/13/72476.aspx
Earwicker @ Daniel: Oui, je sais que ce n'est pas l'histoire complète (ce qui est la raison pour laquelle je l'ai écrit « quelque chose comme ça »). Mais il est certainement un bon début.
Celui-ci est également manquant de la détection du système d'exploitation du serveur.
@Warren P: Oui, je sais que ce n'est pas l'histoire complète (c'est pourquoi j'ai écrit "quelque chose comme ça"). Mais c'est certainement un bon départ.
@Purscience: "Win32" est le nom de l'API Windows, même si le système d'exploitation est 64 bits.
Aussi alternative à l'API Win32, vous pouvez utiliser le WMI win32_operatingsystem code>
classe.
Vous pouvez écrire une fonction simple comme celle-ci pour extraire le nom de la version Windows de fonctionnement. P>
program GetWMI_Win32_OperatingSystem; {$APPTYPE CONSOLE} uses SysUtils ,ActiveX ,ComObj ,Variants; Procedure GetWin32_OperatingSystem; var objWMIService : OLEVariant; colItems : OLEVariant; colItem : OLEVariant; oEnum : IEnumvariant; iValue : LongWord; function GetWMIObject(const objectName: String): IDispatch; var chEaten: Integer; BindCtx: IBindCtx; Moniker: IMoniker; begin OleCheck(CreateBindCtx(0, bindCtx)); OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker)); OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result)); end; begin objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2'); colItems := objWMIService.ExecQuery('SELECT * FROM Win32_OperatingSystem','WQL',0); oEnum := IUnknown(colItems._NewEnum) as IEnumVariant; if oEnum.Next(1, colItem, iValue) = 0 then begin Writeln('Caption '+colItem.Caption); Writeln('Version '+colItem.Version); Writeln('BuildNumber '+colItem.BuildNumber); Writeln('BuildType '+colItem.BuildType); Writeln('CodeSet '+colItem.CodeSet); Writeln('CountryCode '+colItem.CountryCode); Writeln('BootDevice '+colItem.BootDevice); Writeln; end; end; function GetWin32_OSName:string; var objWMIService : OLEVariant; colItems : OLEVariant; colItem : OLEVariant; oEnum : IEnumvariant; iValue : LongWord; function GetWMIObject(const objectName: String): IDispatch; var chEaten: Integer; BindCtx: IBindCtx; Moniker: IMoniker; begin OleCheck(CreateBindCtx(0, bindCtx)); OleCheck(MkParseDisplayName(BindCtx, StringToOleStr(objectName), chEaten, Moniker)); OleCheck(Moniker.BindToObject(BindCtx, nil, IDispatch, Result)); end; begin objWMIService := GetWMIObject('winmgmts:\\localhost\root\cimv2'); colItems := objWMIService.ExecQuery('SELECT Caption FROM Win32_OperatingSystem','WQL',0); oEnum := IUnknown(colItems._NewEnum) as IEnumVariant; if oEnum.Next(1, colItem, iValue) = 0 then Result:=colItem.Caption; end; begin try CoInitialize(nil); try GetWin32_OperatingSystem; //Writeln(GetWin32_OSName); Readln; finally CoUninitialize; end; except on E:Exception do Begin Writeln(E.Classname, ': ', E.Message); Readln; End; end; end.
Getwin32_osname était ce que je cherche depuis 2000 :) shorty et meilleur. Merci de sauvegarder ma journée.
Notez que cela n'est pris en charge que sur Vista ou supérieur.
Je l'utilise dans mes programmes: où p>
FYI: Il manque des systèmes d'exploitation Windows Server.
Si vous souhaitez obtenir plus d'informations sur le système d'exploitation, vous pouvez utiliser WMI (le code de Rruz l'utiliser pour le nom). Pour plus d'informations, vous pouvez utiliser le composant coperatingsysteminfo fort> de glibwmi (de Sourceforge ou WebPage d'auteur (mine) ;-d). Texte alt http://a.imageshack.us/img594/1660/coperatinsysteminfo .png p>
Cordialement p>
Toute la bibliothèque est gratuite et Sourve Code disponible. Pour le système d'exploitation, vous pouvez obtenir ces propriétés: p>
function OS_IsWindowsXP: Boolean; begin Result:= (Win32MajorVersion= 5) AND (Win32MinorVersion= 1); end; function OS_IsWindowsXPUp: Boolean; begin Result:= ((Win32MajorVersion = 5) AND (Win32MinorVersion>= 1)) OR (Win32MajorVersion>= 6); end; function OS_IsWindowsVista: Boolean; begin Result:= (Win32MajorVersion= 6) AND (Win32MinorVersion= 0); end; function OS_IsWindowsVistaUp: Boolean; begin Result:= (Win32MajorVersion>= 6); end; function OS_IsWindows7: Boolean; begin Result:= (Win32MajorVersion= 6) AND (Win32MinorVersion= 1); end; function OS_IsWindows7Up: Boolean; begin Result:= ((Win32MajorVersion = 6) AND (Win32MinorVersion>= 1)) { Any version 6 equal and above Win7 } OR (Win32MajorVersion>= 7); { Any version above 6 } end; function OS_IsWindows8: Boolean; begin Result:= (Win32MajorVersion = 6) AND (Win32MinorVersion= 2); end; function OS_IsWindows8Up: Boolean; begin Result:= ((Win32MajorVersion = 6) AND (Win32MinorVersion>= 2)) OR (Win32MajorVersion>= 7); end;
depuis Delphi Xe2 Vous pouvez utiliser l'enregistrement Par exemple: p> Vous avez peu de propriétés d'enregistrement disponibles pour utiliser: Pour comparer la version actuelle du système avec définis une, utilisez la version Tosversion code>. Remarque, qu'il s'agit d'un enregistrement global et Vous ne pouvez pas créer de variables de tosverion a>.
mineur code>,
majeur code> ,
build code>,
architecture code> fourni avec
plate-forme code> que vous pouvez utiliser pour vous assurer que le système d'exploitation est Windows. P>
vérifier code>. P> p>
Je pense que l'OP a eu plus d'informations qu'il aurait pu avoir rêvé! :)