Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: как определить програмно тип windows ? Добавлено: 21.03.04 00:20  

Автор вопроса:  MasterYan | Web-сайт: vc-studio.org/ | ICQ: 167425994 
как определить програмно тип windows ?

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 Alex(S)



Вопросов: 8
Ответов: 31
 Web-сайт: sapr7.by.ru
 Профиль | | #1
Добавлено: 21.03.04 01:08

Попробуй следующее:

Public Type OSVERSIONINFO
    dwOSVersionInfoSize As Long
    dwMajorVersion As Long
    dwMinorVersion As Long
    dwBuildNumber As Long
    dwPlatformId As Long
    szCSDVersion As String * 128
End Type
Public Declare Function GetVersionEx Lib "Kernel32" Alias "GetVersionExA" (ByRef lpVersionInformation As OSVERSIONINFO) As Long

OSV.dwOSVersionInfoSize = Len(OSV)

    GetVersionEx OSV

Далее тебе нужно следующее OSV.dwPlatformId - здесь и записан код типа ОС

1-Win9x&ME

2-WinNT

Ответить

Номер ответа: 2
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #2 Добавлено: 21.03.04 11:07

Но ведь есть еще встроенная в VB6 функция!

 

Environ(11) или Environ("OS")  

Ответить

Номер ответа: 3
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #3
Добавлено: 21.03.04 19:51

WinXP в режиме совместимости надувает обе эти функции. Попробуй читать из реестра (HKLM\Software\Microsoft\Windows\CurrentVersion), либо можно это сделать на асме взяв стартовое значение регистра cs, если не ошибаюсь. Кроме всего прочего, насколько я помню, у WinNT хандлы процессов идут положительные, а у Win9x - отрицательные.

Ответить

Номер ответа: 4
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #4 Добавлено: 22.03.04 15:52

Ты ,Sharp, уж извини, но на моей памяти ты уже второй раз с этим асмом!

 

НЕ ВСЕ ЕГО ЗНАЮТ! 

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 22.03.04 17:34

Дык учи. Без знания асма - программист не программист

Ответить

Номер ответа: 6
Автор ответа:
 lostdragon2000



Вопросов: 4
Ответов: 7
 Web-сайт: www.shatki.info
 Профиль | | #6
Добавлено: 25.03.04 08:12

Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long

Private Type OSVERSIONINFO

dwOSVersionInfoSize As Long

dwMajorVersion As Long

dwMinorVersion As Long

dwBuildNumber As Long

dwPlatformId As Long

szCSDVersion As String * 128

End Type

'Windows version constants

Private Const WIN_VER_MAJ_9XNT4 = 4 'Windows 95/98/ME/NT4

Private Const WIN_VER_MAJ_NT3 = 3 'Windows NT3

Private Const WIN_VER_MAJ_2KXP = 5 'Windows NT5

Private Const WIN_VER_MIN_95 = 0 'Win95 minor

Private Const WIN_VER_MIN_98 = 10 'Win98 minor

Private Const WIN_VER_MIN_ME = 90 'WinME minor

Private Const WIN_VER_MIN_NT3 = 51 'WinNT3.51 minor

Private Const WIN_VER_MIN_NT4 = 0 'WinNT4 minor

Private Const WIN_VER_MIN_2K = 0 'Win2k minor

Private Const WIN_VER_MIN_XP = 1 'WinXP(Whistler) minor

'Platform ID

Private Const VER_PLATFORM_WIN32s = 0 'Win32s

Private Const VER_PLATFORM_WIN32_WINDOWS = 1 'Windows 9x

Private Const VER_PLATFORM_WIN32_NT = 2 'Windows NT

Private Sub Get_OperatingSystem()

Dim StrTemp As String

Dim StrSP As String

Dim osInfo As OSVERSIONINFO

Dim lngL As Long

On Error GoTo ErrorHandler

strSysInfo = strSysInfo '& ""

'Preset the size of the structure

osInfo.dwOSVersionInfoSize = Len(osInfo)

lngL = GetVersionEx(osInfo)

If lngL <> 0 Then

Select Case osInfo.dwMajorVersion

Case WIN_VER_MAJ_9XNT4

If osInfo.dwPlatformId = VER_PLATFORM_WIN32_WINDOWS Then

'Windows 9x Kernel, figure out which edition

If osInfo.dwMinorVersion = WIN_VER_MIN_95 Then

StrTemp = "Windows 95 "

ElseIf osInfo.dwMinorVersion = WIN_VER_MIN_98 Then

StrTemp = "Windows 98 "

ElseIf osInfo.dwMinorVersion = WIN_VER_MIN_ME Then

StrTemp = "Windows ME "

Else

StrTemp = "Unknown Microsoft Windows 9x system "

End If

Else

'NT4 kernel

If osInfo.dwMinorVersion = WIN_VER_MIN_NT4 Then

StrTemp = "Windows NT 4 "

Else

StrTemp = "Unknown NT 4-based version "

End If

End If

Case WIN_VER_MAJ_NT3

StrTemp = "Windows NT 3." & osInfo.dwMinorVersion & " "

Case WIN_VER_MAJ_2KXP

If osInfo.dwMinorVersion = WIN_VER_MIN_2K Then

StrTemp = "Windows 2000 "

ElseIf osInfo.dwMinorVersion = WIN_VER_MIN_XP Then

StrTemp = "Windows XP "

Else

StrTemp = "Unknown Windows NT 5 system "

End If

Case Else

StrTemp = "Unknown Windows system"

End Select

'Get service pack level information

StrSP = " " & StripTerm(osInfo.szCSDVersion)

StrTemp = StrTemp & StrSP & vbCrLf 'strip the rest of the buffer 'get only the actual data

StrTemp = StrTemp & " " & CStr(osInfo.dwMajorVersion) & "." & Format(CStr(osInfo.dwMinorVersion), "00") & "." & CStr(osInfo.dwBuildNumber) & vbCrLf

Else

StrTemp = "Unable to get version information. GetVersionEx returned " & lngL & vbCrLf

End If

'Сообщение об Операционной системе и версии

strSysInfo = strSysInfo & StrTemp

Exit Sub

ErrorHandler:

strSysInfo = strSysInfo & "Error Get_OperatingSystem" & vbCrLf

End Sub

Ответить

Номер ответа: 7
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #7 Добавлено: 26.03.04 16:00
То Sharp: Ни фига! мой ХР не врет функцие Environ в режиме совместимости! Всегда Win_NT!

Ответить

Номер ответа: 8
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #8
Добавлено: 27.03.04 21:05

Professional или Home? Какую ось ставил для совместимости?

2lostdragon2000: не нравится мне твой код :) Нехороший он какой-то...

Ответить

Номер ответа: 9
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #9 Добавлено: 28.03.04 09:02

У меня Professional

Слушай! на теме ActiveX DLL я сказал, что нельзя без АПИ

в VB6 менять обой

Я был не прав?

Ответить

Номер ответа: 10
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #10
Добавлено: 28.03.04 10:57

Любопытно... Я тоже проверял на WinXP Pro

А с чем был режим совместимости?

Можно и без API (по крайней мере в 98) - обои прописаны, кажется, в system.ini

Ответить

Номер ответа: 11
Автор ответа:
 dNW



Вопросов: 30
Ответов: 683
 Профиль | | #11 Добавлено: 28.03.04 11:49

Я откомпилировал ЕХЕ с тремя строчками

 

Private sub Command1_Click()

msgbox Environ("os")

end sub

 

А потом запустил этот ЕХЕ со всеми видами совместимости (Win95,Win98/ME,Win2000,Win NT 4 )

Ответить

Номер ответа: 12
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #12
Добавлено: 28.03.04 18:57

Проверять ломает, поверим на слово :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам