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é! :)