Avatar billede snowball Novice
28. november 2000 - 14:01 Der er 7 kommentarer og
2 løsninger

Startet fra WinNT eller Win9x

Hvordan kan jeg nemmest finde ud af om mit program bli\'r startet fra en WinNT PC eller en Win9x PC ???

Snowball
Avatar billede pellelil Nybegynder
28. november 2000 - 14:16 #1
Ved at kigge på \"VER_PLATFORM_XXX\". Nedenstående er fra før Windows ME, så jeg er ikke sikker på hvordan den skal se ud, men jeg gætter på at Win32MinorVersion er = 11 ?

<SNIP>
  _OsIs32s    := (Win32Platform = VER_PLATFORM_WIN32s);
  _OsIs95    := (Win32Platform = VER_PLATFORM_WIN32_WINDOWS);
  _OsIsW95    := (Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
                (Win32MajorVersion = 4) and (Win32MinorVersion <= 9);
  _OsIsW98    := (Win32Platform = VER_PLATFORM_WIN32_WINDOWS) and
                (Win32MajorVersion = 4) and (Win32MinorVersion >= 10);
  _OsIsNT    := (Win32Platform = VER_PLATFORM_WIN32_NT);
  _OsIsNT4    := (Win32Platform = VER_PLATFORM_WIN32_NT) and
                (Win32MajorVersion = 4);
  _OsIsNT5    := (Win32Platform = VER_PLATFORM_WIN32_NT) and
                (Win32MajorVersion = 5);
  _OsIsW2000  := (Win32Platform = VER_PLATFORM_WIN32_NT) and
                (Win32MajorVersion = 5);
</SNIP>
Avatar billede pellelil Nybegynder
28. november 2000 - 14:21 #2
Øhhh. Ovenstående sætter værdierne for nogle boolean\'s så måske du lige skulle definere disse først (hvis du vil bruge det lige som jeg selv gør):
<SNIP>
Var
  _OsIs32S    : Boolean;  // Windows 3.1x with 32s
  //---
  _OsIs95    : Boolean;  // Windows 95/98 (W95 or W98)
  _OsIsW95    : Boolean;  // Windows 95    (Only W95, not W98)
  _OsIsW98    : Boolean;  // Windows 98    (Only W98, not W95)
  //---
  _OsIsNT    : Boolean;  // Windows NT    (NT4 or W2000)
  _OsIsNT4    : Boolean;  // Windows NT4  (Only NT4, not W2000)
  _OsIsNT5    : Boolean;  // Windows NT5  (Only W2000, not NT4)
  _OsIsW2000  : Boolean;  // Same as NT5
</SNIP>
Avatar billede delphi Nybegynder
28. november 2000 - 14:30 #3
Jeg ville nok istedet gøre det noget i retning af følgende, hvor jeg spørger operativ systemet selv (med et kald til \'GetVersionEX\'.  Bemærk at jeg, som pellelil, ikke lige ved hvorledes Win 2000, ME etc vil svare, idet dokumentationen kun snakker Win 3.1, Win 95, Win 98 og Win NT.  I øvrigt kan du lige checkke op på parameteren TOSVersionInfo, der indeholder anden info, så som Minor og Major version (til fx. hvilken WinNT man benytter).

procedure TForm1.Button1Click(Sender: TObject);
Var
  VI    : TOSVersionInfo;
  OSStr : String;
begin
  VI.dwOSVersionInfoSize := SizeOf(VI);
  GetVersionEX(VI);
  If  (VI.dwPlatformID = VER_PLATFORM_WIN32s) Then
    OSStr := \'Windows 3.1\'
  Else If (VI.dwPlatformID = VER_PLATFORM_WIN32_WINDOWS) And
          (VI.dwMinorVersion = 0) Then
    OSStr := \'Windows 95\'
  Else If (VI.dwPlatformID = VER_PLATFORM_WIN32_WINDOWS) And
          (VI.dwMinorVersion > 0) Then
    OSStr := \'Windows 98\'
  Else If (VI.dwPlatformID = VER_PLATFORM_WIN32_NT) Then
      OSStr := \'Windows NT\'
  Else
    OSStr := \'Unknown OS System.\';

  Label1.Caption := OSStr;
end;


Delphi
Avatar billede pellelil Nybegynder
28. november 2000 - 14:39 #4
Delphi> Jeg ER sikker på hvordan W2K ser ud det er bare Windows ME jeg er i tvivl om.

Ydermere er der ingen grund til at \"gøre det så besværligt\". Delphi \"definere\" selv variablerne \"Win32Platform\" og fylder værdier i denne - dette sker rent faktisk i proceduren \"InitPlatformId\" (som ligger i SysUtils.pas)  :-)

Det \"helt simple\" vil være:
<SNIP>
  if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then // W95,W98..
  begin
  end;
  if Win32Platform = VER_PLATFORM_WIN32_NT then // NT4, NT5(W2K)
  begin
  end;
</SNIP>
Avatar billede snowball Novice
28. november 2000 - 14:42 #5
Jeg er ligeglad med WinME og alt det andet. Det eneste jeg skal vide er om programmet bli\'r startet fra NT eller 9x (eller faktisk kun Win95 for at være helt præcis!)

Prøver lige jeres forslag !

Snowball
Avatar billede pellelil Nybegynder
28. november 2000 - 14:45 #6
Det sidste eksempel, kigger på om det er W9x eller NTx (den er kigger ikke på \"sub-versionen\" af styresystemet).

Husk at USE \"SysUtils\".
Avatar billede snowball Novice
28. november 2000 - 14:51 #7
Begge svar er brugbare, men valgte at bruge pellelil\'s da det er det er det simpelste ;)

Snowball
Avatar billede delphi Nybegynder
28. november 2000 - 14:59 #8
JUHUUU 1 point til samlingen :)
Avatar billede snowball Novice
28. november 2000 - 15:09 #9
hehe...det kunne jo bruges det du svarede, så jeg synes ikke du skulle snydes helt for point ;)  Det er jo trods alt snart jul :P

Snowball
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester