Примечание: Габр спрашивает о подходе, который может обойти ограничения GetVersionEx
. Код JCL использует GetVersionEx и, таким образом, подвержен уровню совместимости. Эта информация предназначена только для людей, которым не нужно обходить уровень совместимости.
Используя Jedi JCL, вы можете добавить модуль JclSysInfo и вызвать функцию GetWindowsVersion
. Возвращает перечислимый тип TWindowsVersion.
В настоящее время JCL содержит все поставляемые версии Windows и меняется каждый раз, когда Microsoft поставляет новую версию Windows в коробке:
TWindowsVersion =
(wvUnknown, wvWin95, wvWin95OSR2, wvWin98, wvWin98SE, wvWinME,
wvWinNT31, wvWinNT35, wvWinNT351, wvWinNT4, wvWin2000, wvWinXP,
wvWin2003, wvWinXP64, wvWin2003R2, wvWinVista, wvWinServer2008,
wvWin7, wvWinServer2008R2);
Если вы хотите знать, используете ли вы 64-битные окна 7 вместо 32-битного, затем вызовите JclSysInfo.IsWindows64
.
Обратите внимание, что JCL allso обрабатывает выпуски, такие как Pro, Ultimate и т. Д. Для этого вызова GetWindowsEdition и возвращает один из них:
TWindowsEdition =
(weUnknown, weWinXPHome, weWinXPPro, weWinXPHomeN, weWinXPProN, weWinXPHomeK,
weWinXPProK, weWinXPHomeKN, weWinXPProKN, weWinXPStarter, weWinXPMediaCenter,
weWinXPTablet, weWinVistaStarter, weWinVistaHomeBasic, weWinVistaHomeBasicN,
weWinVistaHomePremium, weWinVistaBusiness, weWinVistaBusinessN,
weWinVistaEnterprise, weWinVistaUltimate, weWin7Starter, weWin7HomeBasic,
weWin7HomePremium, weWin7Professional, weWin7Enterprise, weWin7Ultimate);
Для исторического интереса вы можете проверить издание уровня NT также с функцией NtProductType он возвращает:
TNtProductType = (ptUnknown, ptWorkStation, ptServer, ptAdvancedServer,
ptPersonal, ptProfessional, ptDatacenterServer,
ptEnterprise, ptWebEdition);
Обратите внимание, что «N редакций» обнаружены выше. Это версия Windows (для Европы), созданная в соответствии с антимонопольными правилами ЕС. Это довольно хорошая градация обнаружения внутри JCL.
Вот пример функции, которая поможет вам обнаружить Vista и сделать что-то особенное в Vista.
function IsSupported:Boolean;
begin
case GetWindowsVersion of
wvVista: result := false;
else
result := true;
end;
end;
Обратите внимание, что если вы хотите выполнить проверку «больше, чем», вам следует просто использовать другие методы. Также обратите внимание, что проверка версий часто может стать причиной поломки в будущем. Я обычно выбираю, чтобы предупредить пользователей и продолжить, чтобы мой двоичный код не стал фактическим источником поломки в будущем.
Недавно я попытался установить приложение, и установщик проверил свободное место на моем диске и не смог установить, потому что у меня было более 2 гигабайт свободного места. Значение 32-разрядного целого со знаком в установщике стало отрицательным, что нарушило установщик. Я должен был установить это в VM, чтобы заставить это работать. Добавление «умного кода» часто делает ваше приложение «глупее». Будьте осторожны.
Между прочим, я обнаружил, что из командной строки вы можете запустить WMIC.exe и набрать path Win32_OperatingSystem
(«Выбрать * из Win32_OperatingSystem» у меня не работает). В будущем, возможно, JCL может быть расширен для использования информации WMI.
Перемещать блоки с отступом очень просто, если для параметра установлено значение foldmethod = indent
. Например, если вы находитесь в строке def main ():
в следующем фрагменте:
def main():
+-- 35 lines: gps.init()-----------------------------------------------------
if __name__ == "__main__": main()
, тогда dj
берет на себя всю функцию main, и ее можно вставить в другое место.
Облегчает навигацию по блокам кода Python.
Ярлыки:
] t
- Перейти к началу блока ] e
- Перейти к концу блока ] v
- Выбрать блок (Visual Line Mode) ] <
- Сдвинуть блок влево ]>
- Сдвиг блока вправо ] #
- Выбор комментария ] u
- Раскомментировать выбор ] c
- Выбрать текущий / предыдущий класс ] d
- Выбрать текущую / предыдущую функцию ]
- Перейти к предыдущей строке с таким же / меньшим отступом ]
- Перейти к следующей строке с помощью тот же / нижний отступ extends %
:
%
- циклический переход через if / elif / else, try / except / catch,for / continue / break g%
- движение противоположно %
[%
- перейти к началу текущего блока кода ]%
- перейти к концу текущего блока кода Все вышеупомянутые движения работают с нормальным режимом, Визуальный режим и режим ожидания оператора, поэтому:
d]%
- удалить до конца текущего блока v]% d
- должны делать то же самое, проходя через визуальный режим, чтобы
вы можете увидеть, что удаляется V]% d
- выше, но с выделением строки