Este artigo visa explicar como verificar qual versão do Windows está sendo utilizada.
Muitos artigos e dicas semelhantes existem, no entanto, ao ver que todos elas estão desatualizadas ou com informaões incompletas e/ou errôneas, resolvi escrever este artigo, que acredito que possui as informaões mais atualizadas.
O processo de verificaão do Windows é bastante simples, necessitando a utilizaão de apenas uma funão da API do Windows, no entanto, para um bom nível de conhecimento, estarei explicando Passo-a-passo, e, para os mais apressados, no final do artigo, escrevi uma funão prática que retorna a versão do Windows numa string. :-)
Por utilizar funões da API do Windows, certifique-se que a unit WINDOWS est declarada na seão USES do seu programa:
uses windows;
Tendo certeza disso, declare uma variável com do tipo TOSVersionInfo. Será nesta variável que o Windows armazenará todas as informaões sobre a versão do Sistema Operacional.
var VersionInfo: TOSVersionInfo;
Agora que nossa variável est declarada, bastaria que nós chamemos o procedimento GetVersionEx, passando esta variável como parâmetro, no entanto, o Windows pede que nós digamos o tamanho do nosso registro (esta variável no caso), armazenando este valor nele mesmo, através da variável dwOSVersionInfoSize, como é mostrado a seguir:
VersionInfo.dwOSVersionInfoSize:=SizeOf(VersionInfo);
Agora sim, podemos chamar com segurança nosso procedimento que nos dirá a versão do Windows utilizada:
GetVersionEx(VersionInfo);
Pronto! Nessa variável, nós podemos acessar os seguintes valores:
VersionInfo.dwPlatformId
VersionInfo.dwMajorVersion
VersionInfo.dwMinorVersion
VersionInfo.dwBuildNumber
VersionInfo.szCSDVersion
Destes valores, os que realmente irão nos interessar serão os três primeiros dwPlatformId, dwMajorVersion e dwMinorVersion, cujos valores serão preenchidos de acordo com a seguinte tabela:
|--------------------------------------------------------------|
| | 95 | 98 | Me | NT 3.51 | NT 4.0 | 2000 | XP |
|----------------|----|----|----|---------|--------|------|----|
| PlatformID | 1 | 1 | 1 | 2 | 2 | 2 | 2 |
| Major Version | 4 | 4 | 4 | 3 | 4 | 5 | 5 |
| Minor Version | 0 | 10 | 90 | 0 | 0 | 0 | 1 |
|--------------------------------------------------------------|
>>>>>>>> Fonte: Microsoft
As demais variáveis como, dwBuildNumber e szCSDVersion, retornam informaões mais precisas sobre o sistema operacional, como por exemplo, no PC que estou utilizando a variável szCSDVersion retorna uma "Null-terminated string" (string terminada em nulo, ou seja, terminada com o caractere #0) com a informaão: "Service Pack 1", em outro PC que possuo aqui com Windows 98 (Primeira edião, se eu não me engano), o valor ' A ' é retornado.
Logo, como havia dito no início do artigo segue aqui anexa minha funão para retornar a versão do Windows:
function WinVersion: string;
var
VersionInfo: TOSVersionInfo;
begin
VersionInfo.dwOSVersionInfoSize:=SizeOf(VersionInfo);
GetVersionEx(VersionInfo);
Result:='';
with VersionInfo do
begin
case dwPlatformId of
1:
case dwMinorVersion of
0: Result:='Windows 95';
10: Result:='Windows 98';
90: Result:='Windows Me';
end;
2:
case dwMajorVersion of
3: Result:='Windows NT 3.51';
4: Result:='Windows NT 4.0';
5:
case dwMinorVersion of
0: Result:='Windows 2000';
1: Result:='Windows XP';
end;
end;
end;
end;
if (Result='') then
Result:='Sistema operacional desconhecido.';
end;
// EXEMPLO DE UTILIZAÃO
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(WinVersion);
end;
Vocês devem ter notado que não existe nada sobre o Windows 3.1, e resolvi não incluí-lo mesmo, pois tal informaão é totalmente relevante, tendo esta versão do Windows como espécie para museus. Apesar que, deixo a disposião outro link para o site da Microsoft que aborda esta informaão(também em inglês): http://support.microsoft.com/kb/92936/
Diego de Queiroz Macedo
Estudante de Ciência da Computaão
Dúvidas