пдскажите как вывести на экран MountPoint выбранного диска?
Так это же графа "Disk" в формируемой таблице-меню! Если мы рассматриваем ghost.cmd и имя нужно получить после вызова CALL:flash_select $A $B $H $F, который делается в самом начале, то воспользуемся тем, что в переменной $B возвращается строка меню для выбранного диска. Все эти строки имели жесткий формат, поэтому известно что и откуда вырезать (2 символа с 12-ой позиции). Set $M=%$B:~12,2% Echo MountPoint:%$M%
@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
Сообщение отредактировал ded2007 - Суббота, 07.05.2011, 17:47
как можно вызвать диалог открытия файла без mhta.exe, оказываеться его в установочном wmi windows нету. Или если вы знаете vbs или js помочь написать этот небольшой скрипт.
Вот пример собственно скрипта для открытия диалога "File Open" и выдачи результата.
Можно сохранить этот пример в файле с расширением vbs, скажем open.vbs и запустить на исполнение прямо из командной строки: open.vbs При этом, ответ будет выдан в виде окна сообщения. Если хотим использовать эту конструкцию в командном файле, то запускать нужно командой cscript open.vbs так как при таком запуске результат пойдет в виде эха в командном окне. Осталось только отфильтровать "лишнюю" информацию от "полезной". for /f "tokens=*" %i in ('cscript.exe open.vbs ^| find "\"') do @echo %i Непосредственно в командном файле эта команда будет выглядить несколько иначе. Зато мы можем создать vbs-файл, запустить его, получить ответ, проанализировать его, убрать ставший ненужным vbs-файл и исполнить задуманный набор действий. Более того, можно оформить это в виде "подпрограммы" и иcпользовать ее многократно в своем командном файле.
@echo off Echo Сейчас Вам будет предложено выбрать ФАЙЛ №1 pause Call:dialog_open Set f1=%FILE_OPEN%&rem
echo. Echo Теперь укажите ФАЙЛ №2 pause Call:dialog_open Set f2=%FILE_OPEN%
echo. Echo --------------------------------------- Echo теперь можно что-нибудь сделать с файлами Echo ФАЙЛ №1: %f1% Echo и Echo ФАЙЛ №2: %f2% Echo --------------------------------------- pause
for /f "tokens=*" %%i in ('cscript.exe #a.vbs ^| find "\"') do set FILE_OPEN="%%i" del /q #a.vbs>nul 2>nul exit /b
Примечания: 1. Даже после "Диалога" Вам необходимо проверять наличие файла, т.к. пользователь имеет возможность исправлять имя файла прямо в диалоге. 2. Не уверен, что это будет работать в заявленной среде - "в установочном wmi windows". Просто не знаю что там есть и чего нет.
большое спасибо, именно что-то в таком роде мне и надо, только к сожалению при запуск выдает вот такое сообщение, как при запуске из установочного дистрибутива так и на установленной Seven x64, в других ОС непроверял D:\#a.vbs(1, 1) Ошибка выполнения Microsoft VBScript: Невозможно создание объекта контейнером ActiveX: 'UserAccounts.CommonDialog'
Добавлено (20.05.2011, 15:12) --------------------------------------------- вот и весь скрипт, на cmd только затруднения в указания файла, на vbs и js сколько не пытался все время какие-то ошибки выдает
Code
0<%~dp0pathiso.txt set /p "TPI=" FOR %%i IN (C D E F G H I J K L N M O P Q R S T U V W X Y Z) DO IF EXIST %%i:\%TPI% SET RPI=%%i:\%TPI% if "%RPI%"=="" открытие диалога выбора файла с присвоением переменной RPI имени выбранного файла rundll32.exe setupapi.dll,InstallHinfSection DefaultInstall 132 %~dp0imdisk.inf imdisk -a -f "%RPI%" -m #:
Ошибка выполнения Microsoft VBScript: Невозможно создание объекта контейнером ActiveX: 'UserAccounts.CommonDialog'
Тогда можно попробовать заменить в скрипте первую строку Set objD = CreateObject("UserAccounts.CommonDialog") на Set objD = CreateObject("MSComDlg.CommonDialog")
Если это сработает для примера open.vbs, то по аналогии корректируем open.cmd, т.е. в "подпрограмме" :dialog_open меняем строку echo Set objD=CreateObject("UserAccounts.CommonDialog")>#a.vbs на echo Set objD=CreateObject("MSComDlg.CommonDialog")>#a.vbs
При всем этом, нужно иметь виду, что в таком варианте необходимо присутствие библиотеки компонентов MSCOMDLG32.OCX, да еще и зарегистрированной. Надеюсь, что это не окажется слишком жестким условием
@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
непомагло, незнаю может у меня что-то с системой, на ней тоже не идет. вбил в google MSCOMDLG32.OCX, нашел только COMDLG32.OCX, скачал его и зарегистрировал все прошло нормально, а в установщике пишет что разрядность нета, хотя пробовал и x86 и x64, пробовал зарегистрировать пару других dll тоже вылезали ошибки, наверное всетаки забью на это дело 7/Vista, XP, 7/Vista
Может еще одно усилие? 1. Скачиваем приложенный архив с ocx 2. Распаковываем из архива в Windows\System32 3. Находим в этой же папке cmd.exe, щелкаем правой клавишей мышки и выбираем запуск как Администратор (насчет прав это важно, проконтролируйте, чтобы в заголовке окна присутствовало слово "Администратор") 4. Даем команду regsvr32 %Systemroot%\System32\comdlg32.ocx
я в принципе так и пробовал, еще раз попробовал сделал все точь в точь с тем Comdlg32 который загрузили вы и опять вылезает сообщение о разрядности, другой Comdlg32 брал из Seven x64, в Vist-е смотрел нету, разрядность установщика x64 под эту задачку сделал небольшую програмку, под Seven x86 идет под Vista x64 выдает сообщение что устройство не подключено :D, и так не только с моей но и с большинством программ, пробовал разобраться чего нехватает, нашел программу "Dependency Walker", она выдает список всех файлов которыми пользуеться программа(dll и.т.п.) и чего из этого нехватает, но с этим тоже невышло. У вас уже программа удачно компилирует темы на всех ОС, незнаю это как-то пересекаеться с той проблемой которой у вас перед этим возникала, но всетаки решил упомянуть ее, может пригодиться. 7/Vista, XP, 7/Vista
Сообщение отредактировал semen - Суббота, 21.05.2011, 01:39
Пошарил по Сети. Оказывается это действительно проблема и гарантированного решения не нашел. Все эти ограничения, как я понял, связаны с более развитой системой безопасности нового поколения Windows.
В этой связи даже появилась мысль передавать данные через Буфер Обмена. Изощрение что-то типа такого. Командный файл открывает HTML-страничку с единственной кнопкой "Обзор...", пользователь выбирает файл, результат помещается в буфер обмена, откуда командный файл берет данные. Но, похоже, что в этом направлении MS тоже поработал , т.к. появились какие-то ограничения на работу с буфером обмена посредство JavaScript :(
Мне кажется, что для командного файла не стоит городить такие сложные схемы, ведь такие файлы предназначены для более или менее опытных пользователей. Проще организовать запрос на путь к файлу Set /p file1=Укажите путь к файлу №1: Echo Вы выбрали файл %file1% Только пользователю предварительно нужно объяснить, что не нужно "вбивать" путь ручками, а можно скопировать путь в Explorer-е и вставить его в командном окне. Для XP есть удобная в этом плане утилита Path2Clipboard (может она и под x64 пойдет?), а Win7 сама предлагает скопировать путь в адресной строке Explorer-а.PS Версию Windows можно получить командой ver, а если необходимо разобрать ответ по косточкам, то можно сделать так:
Code
@echo off :::... REM Получить версию Windows. Получаем version и version_num for /f "tokens=*" %%i in ('ver') do call:ver %%i Echo Версия Windows %version% Echo Версия в нумерации MicroSoft: %version_num% :::... :::... :::... pause Exit /b
REM ========================= REM Разбор "по косточкам" REM ::: Получить Версию Windows :ver if "%1"=="" then Set version=Undefined&Rem set /a version=%1+0>nul 2>nul if :%version%:==:0: shift&goto:ver set version=%1&Rem set version=%version:~0,4%&Rem set version_num=%version:.=%&Rem set version=%version:5.0.=2000%&Rem set version=%version:5.1.=XP x86%&Rem set version=%version:5.2.=XP x64%&Rem set version=%version:6.0.=Vista%&Rem set version=%version:6.1.=7%&Rem set xVer=x86&Rem set a=%ProgramFiles(x86)%a set a=%a: =%&Rem set a=%a:(=%&Rem set a=%a:)=%&Rem if not :%a%:==:a: set xVer=x64&Rem if /i %version_num% GTR 59 set version=%version% %xVer%&Rem exit /b
@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
Сообщение отредактировал ded2007 - Суббота, 21.05.2011, 10:29
:dialog for /f "usebackq delims=" %%Q in (`@mshta "about:<FORM><INPUT type='file' name='qq'></FORM><script>document.forms[0].elements[0].click();var F=document.forms[0].elements[0].value;try {new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(F)};catch (e){};close();</script>" ^|MORE`) do set %1="%%Q"&REM
а диалог на сохранение
Code
:dialog_save rem echo Создаем скрипт a.vbs... set FILE_SAVE= echo Set objDialog = CreateObject( "SAFRCFileDlg.FileSave" )>#a.vbs echo objDialog.FileName = "">>#a.vbs echo objDialog.OpenFileSaveDlg>>#a.vbs echo WScript.Echo objDialog.FileName>>#a.vbs rem echo Работает скрипт a.vbs... for /f "tokens=*" %%i in ('cscript.exe #a.vbs ^| find "\"') do set FILE_SAVE="%%i" rem echo Удаляем скрипт a.vbs del /q #a.vbs>nul 2>nul
работает нормально. подскажите вчём может быть дело? есть подозрение что в winxpe чегото нехватает.
Сообщение отредактировал antey8 - Воскресенье, 22.05.2011, 09:28
не отрабатывает в winxpe :dialog for /f "usebackq delims=" %%Q in (`@mshta "about:<FORM><INPUT t
В этом примере мы использовали mshta.exe. MShta.exe это Microsoft HTML Application Host, приложение для запуска исполняемых html-модулей (файлов hta). Стало быть именно mshta.exe нужно интегрировать в пакет.
На случай если это затруднительно или невозможно: Чуть выше semen сообщал, что в WMI Windows это приложение отсутствует и мы попытались пробиться через VBScript. В его случае это не помогло, а вот Вам, наверное, могло бы помочь. Посмотрите пример с диалогом "FileOpen" на VBS.
@DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
Сообщение отредактировал ded2007 - Воскресенье, 22.05.2011, 10:30
В этом примере мы использовали mshta.exe. mshta.exe это Microsoft HTML Application Host, приложение для запуска html-модулей (файлов hta). Стало быть именно mshta.exe нужно интегрировать в пакет.
mshta.exe есть в system32 но диалог не появляется что ей ещо нада? я сборку сам собираю и могу добавлять всё необходимое
На случай если это затруднительно или невозможно: Чуть выше semen сообщал, что в WMI Windows это приложение отсутствует и мы попытались пробиться через VBScript. В его случае это не помогло, а вот Вам, наверное, могло бы помочь. Посмотрите пример с диалогом "FileOpen" на VBS.
вариант FileOpen уменя тоже не работает. но сохранение тоже vbs работает
Сообщение отредактировал antey8 - Воскресенье, 22.05.2011, 11:12
mshta.exe есть в system32 но диалог не появляется что ей ещо нада?
Давайте проведем эксперимент. Проверим работает ли самый простой вариант. 1. Нужно открыть консоль в той папке, где находится неработающий cmd-файл 2. Даем команду mshta "OK:" должно появиться пустое окно с заголовком "OK:". Для нас это означает, что mshta работает.
Quote (antey8)
вариант FileOpen уменя тоже не работает.
А что пишет? Можно скриншот? @DED-LEGO@ - конструктор для разработчиков GFX-тем ПОСМОТРЕТЬ
Сообщение отредактировал ded2007 - Воскресенье, 22.05.2011, 12:04