On-line: гостей 0. Всего: 0 [подробнее..]
АвторСообщение
постоянный участник




Пост N: 1288
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.05.10 21:42. Заголовок: Как определить версию ОС Win7 ?


Всем привет !
Как определить версию ОС свежих систем Vista, Win7 32бит или 64бит ?
Можно ли определить версию ОС если запускаешь программу в эмуляторе Windows под Lunix'ом ?
Т.е. в какой системе запущено, в эмуляторе или нормальной ОС ?

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 16 [только новые]


постоянный участник


Пост N: 913
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 19.05.10 22:41. Заголовок: Как определить верси..



 цитата:
Как определить версию ОС свежих систем Vista, Win7


Проверить, что возвращают функции os_isWinVista(), os_isWin2003(), os_isWin7() и т.п.

 цитата:
32бит или 64бит


Проверкой переменных PROCESSOR_ARCHITECTURE и PROCESSOR_ARCHITEW6432
Что и как нужно проверять (взял из нета)

 цитата:
1) PROCESSOR_ARCHITECTURE=x86 и PROCESSOR_ARCHITEW6432 не определен - 32-х разрядная система
2) PROCESSOR_ARCHITECTURE=AMD64 и PROCESSOR_ARCHITEW6432 не определен - 64-х разрядная система на базе x64, программа запущена в родном режиме (64-х битном)
3) PROCESSOR_ARCHITECTURE=IA64 и PROCESSOR_ARCHITEW6432 не определен - 64-х разрядная система на базе Itanium, программа запущена в родном режиме (64-х битном)
4) PROCESSOR_ARCHITECTURE=x86 и PROCESSOR_ARCHITEW6432=AMD64 - 64-х разрядная система на базе x64, программа запущена в режиме x86
4) PROCESSOR_ARCHITECTURE=x86 и PROCESSOR_ARCHITEW6432=IA64 - 64-х разрядная система на базе Itanium, программа запущена в режиме эмуляции x86


Алгоритм только для x64 от Microsoft:

 цитата:
IF ((PROCESSOR_ARCHITECTURE == AMD64) OR
(PROCESSOR_ARCHITEW6432 == AMD64)) THEN
// 64-х битная ОС
ELSE
// 32-х битная ОС
END IF


На всякий случай напомню: проверять с помощью GetEnv()

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 914
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 19.05.10 22:51. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно ли определить версию ОС если запускаешь программу в эмуляторе Windows под Lunix'ом ?
Т.е. в какой системе запущено, в эмуляторе или нормальной ОС ?


Здесь два разных вопроса, а не вопрос и его уточнение. К тому же не указывается какой используется эмулятор, а их не один и даже не два.
Отвечу для Wine. С помощью настройки конфигурационных файлов вы можете попробовать убедить запускаемую программу, что она выполняется именно в определенной версии Win.
Для проверки того, выполняется программа в Wine или нет лучше воспользоваться сл. кодом

procedure main() 

? is_wine()

return

#pragma begindump

#include "hbapi.h"
#include "windows.h"

#ifdef __XHARBOUR__
#define HB_FALSE FALSE
#endif

HB_FUNC( IS_WINE )
{
HMODULE module = GetModuleHandle("ntdll.dll");

if (!module)
hb_retl( HB_FALSE );
else
hb_retl( GetProcAddress(module, "wine_server_call") != NULL );
}
#pragma enddump





Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1289
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 19.05.10 23:00. Заголовок: Спасибо Петр !..


Спасибо Петр !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1290
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.05.10 16:38. Заголовок: Andrey пишет: os_is..


Andrey пишет:

 цитата:
os_isWin7()



Нет такой функции -> Error: Unresolved external '_HB_FUN_OS_ISWIN7' referenced from ......
Я пользуюсь xHarbour 1.0.0 Перейти на другую версию пока не могу !

Можно ли отдельную С-ную вставку получить ?
Или откуда взять можно ?

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 54
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.05.10 17:00. Заголовок: Andrey пишет: Можно..


Andrey пишет:

 цитата:
Можно ли отдельную С-ную вставку получить ?


Лови

 цитата:
#pragma BEGINDUMP

#include <windows.h>
#define HB_OS_WIN_USED
#include "hbapiitm.h"

static void getwinver( OSVERSIONINFO * pOSvi )
{
pOSvi->dwOSVersionInfoSize = sizeof( OSVERSIONINFO );
GetVersionEx ( pOSvi );
}

HB_FUNC( OS_ISWINNT )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT );
}

HB_FUNC( OS_ISWIN9X )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS );
}

HB_FUNC( OS_ISWIN95 )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS
&& osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0 );
}

HB_FUNC( OS_ISWIN98 )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS
&& osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10 );
}

HB_FUNC( OS_ISWINME )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS
&& osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90 );
}

HB_FUNC( OS_ISWINNT351 )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT
&& osvi.dwMajorVersion == 3 && osvi.dwMinorVersion == 51 );
}

HB_FUNC( OS_ISWINNT4 )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT
&& osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0 );
}

HB_FUNC( OS_ISWIN2000 )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 );
}

HB_FUNC( OS_ISWINXP )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 );
}

HB_FUNC( OS_ISWIN2003 )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 );
}

HB_FUNC( OS_ISWINVISTA )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 );
}

HB_FUNC( OS_ISWIN7 )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 1 );
}

HB_FUNC( OS_ISWTSCLIENT )
{
int iResult = FALSE;
OSVERSIONINFO osvi;
getwinver( &osvi );
if ( osvi.dwPlatformId == VER_PLATFORM_WIN32_NT && osvi.dwMajorVersion >= 4 )
{
// Only supported on NT Ver 4.0 SP3 & higher
#ifndef SM_REMOTESESSION
#define SM_REMOTESESSION 0x1000
#endif
iResult = GetSystemMetrics(SM_REMOTESESSION) ;
}
hb_retl( iResult );
}

HB_FUNC( OS_ISWIN2000_OR_LATER )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwMajorVersion >= 5 );
}

HB_FUNC( OS_ISWINXP_OR_LATER )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwMajorVersion > 5 || (osvi.dwMajorVersion==5 && osvi.dwMinorVersion >= 1) );
}
HB_FUNC( OS_ISWINVISTA_OR_LATER )
{
OSVERSIONINFO osvi;
getwinver( &osvi );
hb_retl( osvi.dwMajorVersion >= 6 );
}

HB_FUNC( OS_VERSIONINFO )
{
OSVERSIONINFO osvi;
PHB_ITEM pArray = hb_itemArrayNew( 5 );
getwinver( &osvi );
hb_arraySetNL( pArray, 1, osvi.dwMajorVersion );
hb_arraySetNL( pArray, 2, osvi.dwMinorVersion );
if ( osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS )
{
osvi.dwBuildNumber = LOWORD( osvi.dwBuildNumber );
}
hb_arraySetNL( pArray, 3, osvi.dwBuildNumber );
/*
#define VER_PLATFORM_WIN32s 0
#define VER_PLATFORM_WIN32_WINDOWS 1
#define VER_PLATFORM_WIN32_NT 2
*/
hb_arraySetNL( pArray, 4, osvi.dwPlatformId );
hb_arraySetC( pArray, 5, osvi.szCSDVersion );
hb_itemRelease( hb_itemReturn( pArray) );
}

HB_FUNC( OS_ISUSERANADMIN ) // 24/11/09 11:43
{
BOOL iResult = FALSE ;
typedef int (WINAPI *USERADMIN)( void );
HINSTANCE hLib;
USERADMIN ProcAdd;
hLib = LoadLibrary("shell32.dll");
if (hLib != NULL)
{
ProcAdd = ( USERADMIN ) GetProcAddress(hLib, "IsUserAnAdmin");
if (NULL != ProcAdd)
{
iResult = (ProcAdd)() ;
}
FreeLibrary( hLib );
}
hb_retl( iResult ) ;
}

#pragma ENDDUMP



Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 1449
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 20.05.10 17:04. Заголовок: Эта функция добавлен..


Эта функция добавлена в xHarbour в ноябре 2009 года

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1291
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.05.10 17:41. Заголовок: Добавил в свой проек..


Добавил в свой проект этот исходник.

Теперь выдает:
Error: Unresolved external '_hb_arraySetNL' referenced from
Error: Unresolved external '_hb_arraySetC' referenced from



Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 55
Зарегистрирован: 11.02.10
ссылка на сообщение  Отправлено: 20.05.10 17:52. Заголовок: Andrey пишет: Error..


Andrey пишет:

 цитата:
Error: Unresolved external '_hb_arraySetNL' referenced from
Error: Unresolved external '_hb_arraySetC' referenced from


Просто удали из своего исходника функцию OS_VERSIONINFO

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1292
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.05.10 18:06. Заголовок: Спасибо БОЛЬШОЕ, Гри..


Спасибо БОЛЬШОЕ, Григорий !

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1293
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.05.10 18:13. Заголовок: А что за функция OS_..


А что за функция OS_ISUSERANADMIN ?
Для чего она нужна ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 915
Зарегистрирован: 09.10.06
ссылка на сообщение  Отправлено: 20.05.10 19:20. Заголовок: Andrey пишет: OS_IS..


Andrey пишет:

 цитата:
OS_ISUSERANADMIN ?
Для чего она нужна ?


С помощью этой функции вы могёте определить - текущий пользователь имеет права администратора или нет
ИМХО, оставаться на xHb 1.0 плохая идея

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1295
Зарегистрирован: 12.09.06
ссылка на сообщение  Отправлено: 20.05.10 22:30. Заголовок: Петр пишет: остават..


Петр пишет:

 цитата:
оставаться на xHb 1.0 плохая идея



Спасибо Петр !
Как с драйвером экрана разберусь, так перейду на 1.2 !


Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
Зарегистрирован: 01.01.70
ссылка на сообщение  Отправлено: 31.05.10 17:41. Заголовок: А нет ли готовой фун..


А нет ли готовой функции чтоб определить какая ОС установлена на компе ?

Или придется перебирать ВСЕ вхождения:

IF OS_ISWIN98
RETURN "WIN98"
.....
IF OS_ISWIN2003
RETURN "WIN2003"

IF OS_ISWIN7
RETURN "WIN7"


Спасибо: 0 
Цитата Ответить





Пост N: 248
Зарегистрирован: 05.11.05
ссылка на сообщение  Отправлено: 29.04.20 07:45. Заголовок: Не появилось нового ..


Не появилось нового способа отличить 32-х от 64-х разрядной?

Петр пишет:

 цитата:
1) PROCESSOR_ARCHITECTURE=x86 и PROCESSOR_ARCHITEW6432 не определен - 32-х разрядная система



У меня это показывает на 64-х.

Петр пишет:

 цитата:
Проверить, что возвращают функции os_isWinVista(), os_isWin2003(), os_isWin7() и т.п.



Видимо, os_isWinXP() тоже есть. За неимением XP под рукой проверить на ней не могу, но на 7-ке, она возвращает .F.
А под 10-ку еще ничего не появилось?

Спасибо: 0 
ПрофильЦитата Ответить
Администратор




Пост N: 3939
Зарегистрирован: 23.05.05
ссылка на сообщение  Отправлено: 29.04.20 08:14. Заголовок: Уже есть функция HB_..


Уже есть функция HB_OSIS64BIT()

Спасибо: 1 
ПрофильЦитата Ответить





Пост N: 662
Зарегистрирован: 08.07.06
ссылка на сообщение  Отправлено: 30.04.20 12:18. Заголовок: В 64-битных версиях ..


В 64-битных версиях Windows есть переменные окружения
ProgramFiles(x86)=C:\Program Files (x86)
ProgramW6432=C:\Program Files

В 32-битных их нет.

Спасибо: 1 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 335
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет