Определить разрядность запущенного TC

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Flasher
Скрипт не учитывает, как оказалось, разрядность системы. На х64 ОС он работает, а на х86 он выдает битность ТС - х64, т.к., суффикса "32" там у процесса нет.
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

gora писал(а):на х86 он выдает битность ТС - х64, т.к., суффикса "32" там у процесса нет.
У меня Win7x86, всё там есть.
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Flasher
Проверял на ХРх86, выдает битность ТС - х64
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

А, значит, с XP проблема. В Win7 как?
Что в окне на XP показывает?:

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

Set TCPath = CreateObject("Shell.Application").NameSpace(CreateObject("WScript.Shell").Environment("Process")("COMMANDER_PATH") & "\")
MsgBox TCPath.GetDetailsOf(TCPath.ParseName("Totalcmd.exe"), 34)
Аватара пользователя
gora
Сообщения: 442
Зарегистрирован: Чт дек 30, 2004 13:09
Откуда: Иваново

Сообщение gora »

Flasher
С данной строкой показывает:
XPx86 - пустое окно (ни чего не написано)
7x86 - Total Commander 32 bit
7x64 - Описание файла
Win7 SP1 Ultimate x64, TC8.52a x64
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

gora
Так, понятно. Значит, что я могу тут предложить:
1) Проверять только по присутсвию 64 на конце базового имени exe-ника.
2) Проверять версию OS, если XP, то - по имени, если нет, то - как обычно.
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

На AutoIt это сделать гораздо проще. Или нужно именно vbs?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Samwatas
Думаю, что автору как раз на AutoIt лучше.
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

Встроенные макросы:
@CPUArch - Returns "X86" when the CPU is a 32-bit CPU and "X64" when the CPU is 64-bit.
@OSArch - Returns one of the following: "X86", "IA64", "X64" - this is the architecture type of the currently running operating system.
@OSVersion - Returns one of the following: "WIN_2008R2", "WIN_7", "WIN_8", "WIN_2008", "WIN_VISTA", "WIN_2003", "WIN_XP", "WIN_XPe", "WIN_2000".
Однако автору нужно немного другое - http://www.autoitscript.com/forum/topic ... ions-udfs/ - набор UDF функций, среди которых такие:
; _ProcessIs32Bit() ; Returns True if Process is 32-bit (makes _ProcessIsWow64() use more simpler)
; _ProcessIs64Bit() ; Returns True if Process is 64-bit (makes _ProcessIsWow64() use more simpler)
Дальнейшее дело техники - смотрим путь к запущенному процессу тотала в переменных окружения и определяем его битность вышеуказанными функциями. Можно откомпилить скрипт как консольное приложение, возвращающее нужное значение.
Единственное неудобство откомпиленных скриптов - это размер (будет не меньше чем ~300 KB).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Samwatas
А определить путь exe-шника?
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

%COMMANDER_PATH%\%COMMANDER_EXE% (начиная с 8 версии)
Для предыдущих нужно будет чуть усложнить (при этом обеспечив гарантированное определение).
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Samwatas
А тему почитать? Начиная не просто с 8...
Гарантированное определение нужно для pb1-9.
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

Это все решаемо (и без %COMMANDER_EXE%)
Пока что неизвестно, устроит ли АвтоИт автора (и будет ли он писать сам, или ему потребуется помощь Автоитчиков), так что не стоит пока гнать лошадей.
Лично я бы на месте автора, если бы решил использовать Автоит, переписал бы всю логику на нем, избавившись от остальных батников и скриптов (так, что остался бы один откомпилированный скрипт, выполняющий всю необходимую работу).
Так что я предлагаю сперва дождаться ответа автора, а потом уже думать как это реализовать.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Samwatas писал(а):Пока что неизвестно, устроит ли АвтоИт автора (и будет ли он писать сам, или ему потребуется помощь Автоитчиков), так что не стоит пока гнать лошадей.
Каких лошадей, если человек постучался с конкретным вопросом? Там как раз AutoIt и применяется.
Samwatas писал(а):Лично я бы на месте автора, если бы решил использовать Автоит, переписал бы всю логику на нем, избавившись от остальных батников и скриптов
Наверняка gora мыслил аналочно, но, видимо, не всё там срослось.
Samwatas
Сообщения: 95
Зарегистрирован: Сб сен 12, 2009 20:26

Сообщение Samwatas »

Там как раз AutoIt и применяется.
Где? Я не ставил себе эту кнопку поскольку не нуждаюсь в таком функционале.

На конкретный вопрос (как определить битность тотала) я дал конкретный ответ (На Автоите можно использовать пользовательские ф-ции _ProcessIs32Bit() и _ProcessIs64Bit() - вполне возможно автор просто не знал о такой пользовательской библиотеке).
Если необходима конкретная реализация, то я могу завтра набросать что нибудь на эту тему.
Ответить