Как определить разрядность Windows: 32 или 64

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
soft42
Бывалый
Сообщения: 78
Зарегистрирован: 09 Октябрь 2012, 12:54
Откуда: Кемерово

Как определить разрядность Windows: 32 или 64

Сообщение soft42 »

При инсталляции программы часто необходимо установить еще и драйвер. А драйвера как правило бывают 32-битные и 64-битные. Отсюда и вопрос. Просмотрел несколько инсталляторов, нет у них такого функционала, что если Виндовс-32, то инсталлируем это, если 64 - устанавливаем то-то. Может кто-то задавался этим вопросом? Пока проблема переложена на пользователя. Если драйвер говорит, что не подходит к этой Windows, то пользователь сам запускает другую сборку драйвера. Это не есть хорошо :mrgreen:
Заранее извиняюсь, если вопрос был. Честно просмотрел десяток последних страниц - не увидел :(
С уважением, Soft42
Аватара пользователя
soft42
Бывалый
Сообщения: 78
Зарегистрирован: 09 Октябрь 2012, 12:54
Откуда: Кемерово

Re: Как определить разрядность Windows: 32 или 64

Сообщение soft42 »

Порылся в Инете. Есть несколько способов... Склоняюсь к использованию SHGetSpecialFolderPath. Вроде как самый надежный метод :mrgreen:
С уважением, Soft42
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3301
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 51 раз
Контактная информация:

Re: Как определить разрядность Windows: 32 или 64

Сообщение Дед Пахом »

Тоже стало любопытно. Склоняюсь к способу с функцией IsWow64Process.
С уважением, ДП
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2584
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Re: Как определить разрядность Windows: 32 или 64

Сообщение Губин Игорь »

soft42 писал(а): Просмотрел несколько инсталляторов, нет у них такого функционала, что если Виндовс-32, то инсталлируем это, если 64 - устанавливаем то-то. Может кто-то задавался этим вопросом?
InnoSetup http://www.jrsoftware.org тебе в помощь.
Это я только кажусь дураком! На самом деле я полный идиот!
Аватара пользователя
soft42
Бывалый
Сообщения: 78
Зарегистрирован: 09 Октябрь 2012, 12:54
Откуда: Кемерово

Re: Как определить разрядность Windows: 32 или 64

Сообщение soft42 »

InnoSetup http://www.jrsoftware.org тебе в помощь.
Чесно говоря, не совсем понял. Слаб я в англицком. Да и менять инсталлятор не хочется. Написал программку из 3 строк (1 Мб :mrgreen: ). Инсталлятор запускает программёшку, она определяет разрядность и в соответствии с результатом активирует 32-битный или 64-битный драйвер :D .
Проверил на 3 компах, вроде корректно работает.
С уважением, Soft42
Аватара пользователя
Губин Игорь
Шубуршун
Сообщения: 2584
Зарегистрирован: 16 Сентябрь 2005, 16:35
Откуда: Москва
Благодарил (а): 3 раза
Поблагодарили: 26 раз

Re: Как определить разрядность Windows: 32 или 64

Сообщение Губин Игорь »

Ну, ежели не хочешь, не меняй.
Это я только кажусь дураком! На самом деле я полный идиот!
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Как определить разрядность Windows: 32 или 64

Сообщение Developer »

Привет всем!

Обращаюсь к знатокам с просьбой портировать рабочий проект с C++ в рабочий проект с получением exe на Clarion с целью определения запущено ли 32-х битное приложение в Windows x64 с помощью WoW64 через функцию Windows API IsWow64Process.

Заранее благодарю!
Вложения
IsWow64Process_example.rar
(44.97 КБ) 252 скачивания
С Уважением, Developer
kreator
✯ Ветеран ✯
Сообщения: 5180
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Как определить разрядность Windows: 32 или 64

Сообщение kreator »

Вот так попробуйте (сам не пробовал, без надобности пока):

Код: Выделить всё

SYSTEM{PROP:WindowsVersion,7}  !- Returns '1' if program is running on 64 bit Windows, otherwise an empty string
We are hard at work… for you. :)
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3301
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 15 раз
Поблагодарили: 51 раз
Контактная информация:

Как определить разрядность Windows: 32 или 64

Сообщение Дед Пахом »

kreator писал(а): Вот так попробуйте (сам не пробовал, без надобности пока):

Код: Выделить всё

SYSTEM{PROP:WindowsVersion,7}  !- Returns '1' if program is running on 64 bit Windows, otherwise an empty string
Вроде работает, на Win10 64 возвращает 1.
С уважением, ДП
kreator
✯ Ветеран ✯
Сообщения: 5180
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Как определить разрядность Windows: 32 или 64

Сообщение kreator »

Я же говорю - "Clean & Elegant Language (©)" :mrgreen: .
We are hard at work… for you. :)
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Как определить разрядность Windows: 32 или 64

Сообщение Developer »

Kreator и Дед Пахом спасибо за отклик и помощь :D

Вот по Вашей наводке обнаружил:

https://clarionhub.com/t/did-you-know-a ... h-poll/473


Проверю на разных версиях Windows и сообщу о результатах!

А просьбу портировать Windows API IsWow64Process оставляю: есть много вопросов связанных с Windows API уже решенных на C++, С# и Delphi, которые просто необходимо портировать в Clarion для решения специфических задач :wink:

Необходимы хорошие образцы примеров портирования из C++, С# и Delphi в Clarion :)

Да и знания в C++, C# и Delphi всегда в помощь и для Clarion :wink:

Да и ещё по этой теме, решение данного вопроса есть в новой версии IceTips ITUtilities - вот только, к сожалению, для нас в свободном доступе их нет - а жаль, как видно из описаний в них есть решения на часто возникающие вопросы связанные решение которых связано Windows API.
С Уважением, Developer
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Как определить разрядность Windows: 32 или 64

Сообщение Developer »

Проверил - на Clarion 10.0.0.11975 - функция

SYSTEM{PROP:WindowsVersion,1} - SYSTEM{PROP:WindowsVersion,10}

отлично работает только с версии Clarion 10.0.0.11897 :D

При компиляции в Clarion 7 - Clarion 10 включая версию Clarion 10.0.0.11822 функция одинаково работает на Windows 7 x64 но возвращаемые значения некорректны :(

На этих же версиях Clarion некорректно работает на Windows 8-10 :(

Отличный аналог и возможная альтернатива IsWow64Process :wink:
kreator писал(а): Я же говорю - "Clean & Elegant Language (©)"
Kreator и Дед Пахом спасибо Вам за помощь! :D
С Уважением, Developer
Shur
Ветеран
Сообщения: 384
Зарегистрирован: 02 Июль 2011, 18:49

Как определить разрядность Windows: 32 или 64

Сообщение Shur »

Developer, я дико извиняюсь, понял только что на Clarion 10.0.0.11975 всё нормально. Остальное как-то не просёк.
Можете ли составить табличку по результатам, где по одной оси версии Клариона, а по другой оси версии Windows?
Хотя, может это лишнее, если у всех базовая версия 10.0.0.11975?
kreator
✯ Ветеран ✯
Сообщения: 5180
Зарегистрирован: 28 Май 2009, 15:54
Откуда: Москва
Благодарил (а): 11 раз
Поблагодарили: 26 раз

Как определить разрядность Windows: 32 или 64

Сообщение kreator »

Shur писал(а):Developer, я дико извиняюсь, понял только что на Clarion 10.0.0.11975 всё нормально. Остальное как-то не просёк.
Можете ли составить табличку по результатам, где по одной оси версии Клариона, а по другой оси версии Windows?
Хотя, может это лишнее, если у всех базовая версия 10.0.0.11975?
Мне кажется, здесь какое-то недопонимание. Этот prop не новый, как-то всегда работал. Не может быть уж таких глобальных проблем. Я использую system{prop:WindowsVersion,8} и system{prop:WindowsVersion,9} и достаточно давно, проблем вроде никогда не было.
We are hard at work… for you. :)
Developer
Ветеран
Сообщения: 551
Зарегистрирован: 26 Март 2012, 17:18

Как определить разрядность Windows: 32 или 64

Сообщение Developer »

Ситуация такая, ранее до версии Clarion 10.0.0.11897 функция существовала ещё с Clarion 6 в виде SYSTEM{PROP:WindowsVersion}
Функция работала, но только на последних версиях Windows результат был некорректен :(

Начиная с версии Clarion 10.0.0.11897 функция возвращает корректный результат на всех существующих версиях Windows :D

Код: Выделить всё

The SYSTEM{PROP:WindowsVersion} supports passing an optional index parameter from 1 to 10:

SYSTEM{PROP:WindowsVersion,1}  ! - The Clarion description of the Windows version  (same value as without an index parameter)
SYSTEM{PROP:WindowsVersion,2}  ! - Description of Windows version from Windows itself
SYSTEM{PROP:WindowsVersion,3}  ! - Major version number
SYSTEM{PROP:WindowsVersion,4}  ! - Minor version number
SYSTEM{PROP:WindowsVersion,5}  ! - Build number
SYSTEM{PROP:WindowsVersion,6}  ! - Service pack number
SYSTEM{PROP:WindowsVersion,7}  ! - Returns '1' if program is running on 64 bit Windows, otherwise an empty string
SYSTEM{PROP:WindowsVersion,8}  ! - Returns '1' if program is running on a server version of Windows, otherwise an empty string
SYSTEM{PROP:WindowsVersion,9}  ! - Equate value representing the Windows version (separate for client and server versions)
SYSTEM{PROP:WindowsVersion,10} ! - Equate value representing the Windows edition
С Уважением, Developer
Ответить