Автор | Сообщение |
|
| постоянный участник
|
Пост N: 1288
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.05.10 21:42. Заголовок: Как определить версию ОС Win7 ?
Всем привет ! Как определить версию ОС свежих систем Vista, Win7 32бит или 64бит ? Можно ли определить версию ОС если запускаешь программу в эмуляторе Windows под Lunix'ом ? Т.е. в какой системе запущено, в эмуляторе или нормальной ОС ?
|
|
|
Ответов - 25
, стр:
1
2
All
[только новые]
|
|
|
| постоянный участник
|
Пост N: 913
Зарегистрирован: 09.10.06
|
|
Отправлено: 19.05.10 22:41. Заголовок: Как определить верси..
цитата: | Как определить версию ОС свежих систем Vista, Win7 |
| Проверить, что возвращают функции os_isWinVista(), os_isWin2003(), os_isWin7() и т.п. Проверкой переменных 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()
|
|
|
|
| постоянный участник
|
Пост 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
|
|
|
|
| постоянный участник
|
Пост N: 1289
Зарегистрирован: 12.09.06
|
|
Отправлено: 19.05.10 23:00. Заголовок: Спасибо Петр !..
Спасибо Петр !
|
|
|
|
| постоянный участник
|
Пост N: 1290
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.05.10 16:38. Заголовок: Andrey пишет: os_is..
Andrey пишет: Нет такой функции -> Error: Unresolved external '_HB_FUN_OS_ISWIN7' referenced from ...... Я пользуюсь xHarbour 1.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 |
|
|
|
|
|
| Администратор
|
Пост N: 1449
Зарегистрирован: 23.05.05
|
|
Отправлено: 20.05.10 17:04. Заголовок: Эта функция добавлен..
Эта функция добавлена в xHarbour в ноябре 2009 года
|
|
|
|
| постоянный участник
|
Пост N: 1291
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.05.10 17:41. Заголовок: Добавил в свой проек..
Добавил в свой проект этот исходник. Теперь выдает: Error: Unresolved external '_hb_arraySetNL' referenced from Error: Unresolved external '_hb_arraySetC' referenced from
|
|
|
|
| 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
|
|
|
|
| постоянный участник
|
Пост N: 1292
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.05.10 18:06. Заголовок: Спасибо БОЛЬШОЕ, Гри..
Спасибо БОЛЬШОЕ, Григорий !
|
|
|
|
| постоянный участник
|
Пост N: 1293
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.05.10 18:13. Заголовок: А что за функция OS_..
А что за функция OS_ISUSERANADMIN ? Для чего она нужна ?
|
|
|
|
| постоянный участник
|
Пост N: 915
Зарегистрирован: 09.10.06
|
|
Отправлено: 20.05.10 19:20. Заголовок: Andrey пишет: OS_IS..
Andrey пишет: цитата: | OS_ISUSERANADMIN ? Для чего она нужна ? |
| С помощью этой функции вы могёте определить - текущий пользователь имеет права администратора или нет ИМХО, оставаться на xHb 1.0 плохая идея
|
|
|
|
|
| постоянный участник
|
Пост N: 1295
Зарегистрирован: 12.09.06
|
|
Отправлено: 20.05.10 22:30. Заголовок: Петр пишет: остават..
Петр пишет: цитата: | оставаться на xHb 1.0 плохая идея |
| Спасибо Петр ! Как с драйвером экрана разберусь, так перейду на 1.2 !
|
|
|
|
| |
Не зарегистрирован
Зарегистрирован: 01.01.70
|
|
Отправлено: 31.05.10 17:41. Заголовок: А нет ли готовой фун..
А нет ли готовой функции чтоб определить какая ОС установлена на компе ? Или придется перебирать ВСЕ вхождения: IF OS_ISWIN98 RETURN "WIN98" ..... IF OS_ISWIN2003 RETURN "WIN2003" IF OS_ISWIN7 RETURN "WIN7"
|
|
|
|
| |
Пост 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-ку еще ничего не появилось?
|
|
|
|
| Администратор
|
Пост N: 3939
Зарегистрирован: 23.05.05
|
|
Отправлено: 29.04.20 08:14. Заголовок: Уже есть функция HB_..
Уже есть функция HB_OSIS64BIT()
|
|
|
|
| |
Пост N: 662
Зарегистрирован: 08.07.06
|
|
Отправлено: 30.04.20 12:18. Заголовок: В 64-битных версиях ..
В 64-битных версиях Windows есть переменные окружения ProgramFiles(x86)=C:\Program Files (x86) ProgramW6432=C:\Program Files В 32-битных их нет.
|
|
|
|
| постоянный участник
|
Пост N: 7578
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.09.23 13:10. Заголовок: gfilatov2002 пишет: ..
gfilatov2002 пишет: цитата: | 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 |
| Использую эту функцию у себя. На Win10 выдаёт сейчас .F. при запуске. У меня админские права, а выдаёт .F. Почему ?
|
|
|
|
| постоянный участник
|
Пост N: 1674
Зарегистрирован: 27.01.07
|
|
Отправлено: 29.09.23 13:16. Заголовок: Andrey пишет: Испол..
Andrey пишет: цитата: | Использую эту функцию у себя. На Win10 выдаёт сейчас .F. при запуске. У меня админские права, а выдаёт .F. |
| А ты явно запусти от имени Администратора. Что будет?
|
|
|
|
| постоянный участник
|
Пост N: 7580
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.09.23 13:22. Заголовок: Не могу. На компе то..
Не могу. На компе только я.
|
|
|
|
| постоянный участник
|
Пост N: 7581
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.09.23 13:24. Заголовок: Как получить какие п..
Как получить какие права имеет юзер, т.е. где запускается моя программа ?
|
|
|
|
| постоянный участник
|
Пост N: 1675
Зарегистрирован: 27.01.07
|
|
Отправлено: 29.09.23 13:29. Заголовок: Andrey пишет: Не мо..
Andrey пишет: цитата: | Не могу. На компе только я |
| Чё тут мочь? Это неважно, что в винде ты числишься администратором. По-умолчанию, десятка не дает прав админа при запуске. Ты всё-таки проверь: ПраваяКнопкаМыши - Запустить от имени администратора.
|
|
|
|
|
| постоянный участник
|
Пост N: 7582
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.09.23 13:47. Заголовок: PSP пишет: По-умолч..
PSP пишет: цитата: | По-умолчанию, десятка не дает прав админа при запуске. Ты всё-таки проверь: ПраваяКнопкаМыши - Запустить от имени администратора. |
| Да, точно не даёт. Запуск от имени администратора выдаёт правильно .T. А я и не обращал на это внимание...
|
|
|
|
| постоянный участник
|
Пост N: 1676
Зарегистрирован: 27.01.07
|
|
Отправлено: 29.09.23 13:50. Заголовок: Andrey пишет: Да, т..
Andrey пишет: А теперь, если конечно хочешь, сделай изменения в реестре. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\ConsentPromptBehaviorAdmin поставь в 0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\EnableLUA поставь в 0 и перезагрузи комп. Это позволит использовать полные права всегда без запроса.
|
|
|
|
| постоянный участник
|
Пост N: 4410
Зарегистрирован: 17.02.12
|
|
Отправлено: 29.09.23 13:51. Заголовок: Andrey А тебе это з..
Andrey А тебе это зачем в задаче ? Систему хочешь снести с правами ? У тебя usera (и ты в том числе) с правами устанавливаемые для задачи, а не для системы, по мну так
|
|
|
|
| постоянный участник
|
Пост N: 7583
Зарегистрирован: 12.09.06
|
|
Отправлено: 29.09.23 14:16. Заголовок: PSP пишет: А теперь..
PSP пишет: цитата: | А теперь, если конечно хочешь, сделай изменения в реестре. |
| Нет, спасибо но не буду. SergKis пишет: цитата: | А тебе это зачем в задаче ? |
| Для установки драйверов HASP. А для обычных задач конечно это не надо.
|
|
|
Ответов - 25
, стр:
1
2
All
[только новые]
|
|