Nazwy systemów Windows(Nazwy produktów)

0

Pobieram nazwę produktów systemu Windows za pomocą tego http://4programmers.net/Delphi/Gotowce/Wersja_systemu_Windows
I tutaj moje pytanie, skąd mogę wiedzieć np. Jakie ma oznaczenie Windows 7 lub Vista?
Szukałem po tagu MSDN, ale nic nie znalazłem, być może źle szukałem.

  if (Pos(' Vista', OS.Product) or Pos(' 7', OS.Product) or Pos('Seven', OS.Product) or Pos('Se7en', OS.Product) or Pos('SeVen', OS.Product) or Pos('SeVeN', OS.Product) or Pos('SeveN', OS.Product)) <> 1 then
1

W tym kodzie masz to wszystko zawarte. Te nazwy są specyficzne dla tego jednego rozwiązania.

0

Yhym.. ok. Czyli to co ja wymyśliłem, zadziała na 100% i innych nazw nie ma, jak sądzę. (W tym wielkości poszczególnych liter)

0

A win rozróżnia wielkość liter, np w nazwach?;>

1

Wszystkie te nazwy są nadane w tej procedurze, do której podlinkowałeś. Takie dziwne porównywanie jest zupełnie bez sensu.

0

.NET

Environment.OSVersion wyswietli wersje kompilacki i service pack.

0

No dobra, a nie łatwiej po prostu dać że MajorVersion=6 (vista i se7en)? I czemu szukasz opisu procedur nie stworzonych przez MSDN na MSDN?!

0

Dopnę się jeszcze pod temat, bo ten warunek mnie drażni...

To:

if (Pos(' Vista', OS.Product) or Pos(' 7', OS.Product) or Pos('Seven', OS.Product) or Pos('Se7en', OS.Product) or Pos('SeVen', OS.Product) or Pos('SeVeN', OS.Product) or Pos('SeveN', OS.Product)) <> 1 then

polecam napisać po ludzku, czyli wykorzystując np. statyczną macierz nazw i napisać funkcję, która to sprawdzi, np. taką:

function IsWin7orVista(const Product: String): Boolean;
const
  WinNames: array [0 .. 3] of String[5] = ('VISTA', '7', 'SEVEN', 'SE7EN');
var
  I: Byte;
begin
  Result := False;

  for I := Low(WinNames) to High(WinNames) do
    if Pos(WinNames[I], UpperCase(Product)) <> 0 then
      begin
        Result := True;
        Break;
      end;
end;

dzięki której wielkość liter nie straszna;


Poza tym @kAzek podał Ci link do strony, na której masz tabelki z wszelkimi pomocnymi danymi (major version);

0

Nie należy sprawdzać systemu po nazwie systemu, tylko po wersji (major.minor).
Co do pytania jaka edycja systemu jaką ma wersję — wszystko widać w tym kodzie.

function IsWin7orVista(const Product: String): Boolean;
Czegoś takiego zdecydowanie nie należy robić. Poza szeroko znanymi wersjami istnieją edycje serwerowe i różne egzotyczne (Windows Embedded, Windows Home Server, Windows Thin PC, i kto wie co tam jeszcze).
Jeśli program ma wymagać visty, to sprawdzamy czy dwMajorVersion jest większa lub równa 6.

or Pos('Se7en', OS.Product)

co to jest? nie było Windowsa o nazwie "Se7en".

0

W TWinVersion, mam dać wvWinSeven z http://4programmers.net/Delphi/Gotowce/Wersja_systemu_Windows czy wvWin7 z http://wiki.delphi-jedi.org/wiki/JCL_Help:TWindowsVersion ?

Czy dobrze stosuję tą funkcję:

 if GetWinVersion in [wvWin7] then
  begin
  MessageBox(0,' %@#@ masz Win Se7eN!', 'Aplikacja', MB_OK + MB_ICONEXCLAMATION);
  end;

?

Jak dać zaprzeczenie w tej definicji? Nie potrafię nic znaleźć z tym IN żadnego manuala itp.

Na razie dałem

if GetWinVersion in [wvWin95, wvWin98, wvWin98SE, wvWinNT, wvWinME, wvWin2000, wvWin2003, wvWinXP] then
...
else // Jesli Vista lub 7, albo inne dziwactwa
...
0
camilost napisał(a)

Jak dać zaprzeczenie w tej definicji? Nie potrafię nic znaleźć z tym IN żadnego manuala itp.

A słyszałeś kiedyś o czymś takim jak operator not? Skoro jest to operator zaprzeczenia to możesz nim przeczyć wszystko, zbiory też;

Więc jeśli masz taką instrukcję:

if GetWinVersion in [wvWin7] then

to możesz ją zaprzeczyć tak:

if not GetWinVersion in [wvWin7] then
1
camilost napisał(a)

Dziwne, bo wiem i próbowałem ;/ Sprawdź sobie sam ;x A w Kompedium nic nie ma nt. if ... in ;x

No i sprawdziłem i działa tak, jak napisałem w poprzednim poście, tyle że warunek z in musi być w nawiasie; Poza tym, w kompendium jest napisane w jaki sposób sprawdzić czy wartość istnieje w zbiorze, czy nie - trzeba mieć książkę, ja mam, więc podyktuję Ci:

Zaprzeczanie

Możesz zapytać: "co stanie się, gdy chcemy sprawdzić, czy dany element nie należy do zrioru?". W takim wypadku nie możemy zamiast operatora in wstawić out, ale możliwe jest zastosowanie operatora not, który jest zaprzeczeniem (o operatorach pisałem nieco wyżej).

if not (tcFiat in Cars) then {czynności}

Jeżeli element tcFiat nie należy do zbioru Cars, warunek zostanie spełniony.</dfn>

Z racji tej, że nie znam Twojej funkcji GetWinVersion nie mogę określić, co zwraca ta funkcja;

Dlatego:

  1. jeśli zwraca wartość zbioru, to musisz sprawdzić czy ta wartość jest w podanym przez Ciebie zbiorze,
  2. jeśli zwraca zbiór, to musisz sprawdzić czy podana przez Ciebie wartość jest w zwróconym przez funkcję zbiorze;
    Możesz to sprawdzić tak:
program NotOperandMyth;

{$APPTYPE CONSOLE}

type
  TWord = (wsDelphi, wsPascal, wsLazarus);
type
  TWordsSet = set of TWord;

  function GetWords(): TWordsSet;
  begin
    Result := [wsDelphi, wsLazarus];
  end;

  function GetPascalWord(): TWord;
  begin
    Result := wsPascal;
  end;

begin
  if not (wsPascal in GetWords) then
    WriteLn('Wartosc "wsPascal" nie wystepuje w zbiorze "[wsDelphi, wsLazarus]"!');

  if not (wsDelphi in GetWords) then
    WriteLn('Wartosc "wsDelphi" nie wystepuje w zbiorze "[wsDelphi, wsLazarus]"!');

  if not (GetPascalWord in [wsDelphi, wsLazarus]) then
    WriteLn('Wartosc "wsPascal" nie wystepuje w zbiorze "[wsDelphi, wsLazarus]"!');

  if not (GetPascalWord in [wsPascal]) then
    WriteLn('Wartosc "wsPascal" nie wystepuje w zbiorze "[wsPascal]"!');

  ReadLn;
end.

Czy dostałeś kiedykolwiek na wyjściu taką linię:

Wartosc "wsDelphi" nie wystepuje w zbiorze "[wsDelphi, wsLazarus]"!

lub taką:

Wartosc "wsPascal" nie wystepuje w zbiorze "[wsPascal]"!???

Bo ja zawsze dostaje takie linie:

Wartosc "wsPascal" nie wystepuje w zbiorze "[wsDelphi, wsLazarus]"!
Wartosc "wsPascal" nie wystepuje w zbiorze "[wsDelphi, wsLazarus]"!

Więc jak widać można negować za pomocą tego operatora;


Fakt, źle napisałem w poprzednim poście, ale tylko dlatego, że nie zapoznałem się w Twoją funkcją GetWinVersion; W każdym razie polecam zrobić sobie powtórkę ze zbiorów;

0

Nawias i wszystko jasne :)) Dzięki wielkie :) Możesz uzupełnić Kompedium :>

1 użytkowników online, w tym zalogowanych: 0, gości: 1