открытие диалога выбора файла без mshta.exe (на cmd или js,vbs)
как можно открыть диалог выбора файла с последующией записью в переменную без использования mshta.exe? связано с отсутствием этой программы в той среде из которой будет запускаться скрипт. На js, vbs всречал но к сожалению несмог разобраться в коде + незнаю как реализовать на них остальную часть.
|
среда - стандартный установщик windows Vista, вот список файлов и каталогов из моей версии
system32 syswow64 all
|
AUTO-NEK, это был вопрос ))
1-й вариант подходит только для XP;
2-й только при наличии соответствующих библиотек - нужно тестить
P.S. AFAIK других вариантов на WSH нет
|
что это вопрос я понял но решил что возможно вы знакомы с той версией PE из которой производиться установка Vist-ы, поэтому так ответил и на всякий случай загрузил список файлов, сам ответить на вопрос о com объектах затрудняюсь
|
AUTO-NEK, универсального способа нет - выбирать вам
Цитата:
сам ответить на вопрос о com объектах затрудняюсь »
|
нужно просто проверить, работает ли какой-нибудь из представленных по ссылке примеров в вашем случае
|
пробовал все варианты нетребующих загрузки дополнительных файлов, неодин не сработал. Но некоторые из них у меня и на обычной ОС несработали. Просто копировал код в файл и давал соответствующие раксширение. Думал что должен сработать вариант с MSCOMDLG32.OCX. Только непонял какое должно быть у него расширение ocx или dll. Если dll то он присутствует. Или вариант при котором придеться закинуть еще пару файлов? Пробовал закидывать mshta, но он несработал, хотя ошибок тоже невыдавал. Как я понимаю недостает каких-то компонентов которыми пользуеться он сам, на этом и остановился.
|
Цитата:
Цитата AUTO-NEK
Думал что должен сработать вариант с MSCOMDLG32.OCX. Только непонял какое должно быть у него расширение ocx или dll. »
|
1. «.ocx».
2. Не факт, что сработает на этапе PE/RE, ибо в загруженном реестре должны быть записи о регистрации компонента — тоже нужно проверять.
3. Требует лицензирования (наличие в загруженном реестре определённого значения).
|
с помошью скрипта этоже можно сделать, тоесть сначала зарегистрировать, потом уже воспользоваться им, например аплеты панели управления получаеться устанавить. Мне впринципе всеравно как это реализовывать, пробовал воспользоваться програмкой для этого дела на x86 работает, а на x64 постоянно чегото нехватает, думал со скриптами проще будет, если есть какие-нибудь предложения по реализации прошу поделиться ими. С языками программирования незнаком.
нет всетаки с регистрацией компонентов проблема
|
Цитата:
Цитата AUTO-NEK
Мне впринципе всеравно как это реализовывать, пробовал воспользоваться програмкой для этого дела на x86 работает, а на x64 постоянно чегото нехватает, думал со скриптами проще будет, если есть какие-нибудь предложения по реализации прошу поделиться ими. С языками программирования незнаком. »
|
Думаю лучшим решением будет отдельная утилита командной строки (EXE), которая вызывает API функцию GetOpenFileName() библиотеки Comdlg32.dll и возвращает результат в выходной поток или переменную окружения. Некоторые скриптовые языки типа Autohotkey/AutoIT могут создавать EXE но неизвестно как они поведут себя в PE среде - надо проверять. Идеальный вариант - Си/ASM, но это, наверное, уже в соседнюю ветку (Программирование).
|
с этими скриптовыми языками незнаком, совместимость проверил только путем компиляции простого окна в Autohotkey 64, окно удачно запустилось.
оказываеться тут и ветка auto-script есть, надеюсь там есть такие же профессионалы как тут )
но думаю желающих полностью сделать скрипт или программу за незнакомого человека ненайдеться
если есть программа на которой можно это реализовать, но к сожалению только 32х разрядная и она корректно работает только в 32-х разрядной среде(дело не в программе а в самой среде), как ее можно заставить работать на 64х разрядной версии.
|
Цитата:
Цитата AUTO-NEK
проверил только путем компиляции простого окна в Autohotkey 64 »
|
в таком случае лучше начинать с примера для ф-ции FileSelectFile
Цитата:
Цитата AUTO-NEK
думаю желающих полностью сделать скрипт или программу за незнакомого человека ненайдеться »
|
там будет скрипт в несколько строк (чего не скажешь про Си)
Цитата:
Цитата AUTO-NEK
если есть программа на которой можно это реализовать, но к сожалению только 32х разрядная и она корректно работает только в 32-х разрядной среде(дело не в программе а в самой среде), как ее можно заставить работать на 64х разрядной версии »
|
зависит от программы, в общем случае 32-битная должна работать на x64
|
спасибо за наводку
нестал заморачиваться сделал просто сохранение имени выбранного файла в текстовый файл, а cmd уже оттуда достану, если это кому нибудь понадобиться, то текст скрипта такой
читать дальше »
FileSelectFile, SelectedFile, 3, , Open a file, Text Documents (*.txt; *.doc)
if SelectedFile =
MsgBox, The user didn't select anything.
else
FileAppend, %SelectedFile%, %A_ScriptDir%\Saved File.txt
Цитата:
Цитата amel27
зависит от программы, в общем случае 32-битная должна работать на x64 »
|
да но в этом случае думаю просто нехватает dll, в папке syswow64 нет ни одной, а сама программа на обычной 64x семерке работает нормально, вот она
|
Думаю, дело не в разрядности, а в том, что прога слишком навороченная для PE-окружения, задействовано много подсистем, часть из которых может быть просто отключена. В качестве инфы для размышлений прилагаю список библиотек, от которых зависит прога (не факт, что они нужны сразу и все).
читать дальше »
Код:
ACTIVEDS.DLL
ADSLDPC.DLL
ADVAPI32.DLL
ADVPACK.DLL
APPHELP.DLL
ATL.DLL
AUTHZ.DLL
BROWSEUI.DLL
CABINET.DLL
CDFVIEW.DLL
CERTCLI.DLL
CFGMGR32.DLL
CLBCATQ.DLL
CLUSAPI.DLL
COMCTL32.DLL
COMDLG32.DLL
COMRES.DLL
CREDUI.DLL
CRYPT32.DLL
CRYPTUI.DLL
CSCDLL.DLL
DBGHELP.DLL
DEVMGR.DLL
DHCPCSVC.DLL
DNSAPI.DLL
DUSER.DLL
EFSADU.DLL
ESENT.DLL
GDI32.DLL
GDIPLUS.DLL
HLINK.DLL
HNETCFG.DLL
IEFRAME.DLL
IERTUTIL.DLL
IESHIMS.DLL
IEUI.DLL
IMAGEHLP.DLL
IMGUTIL.DLL
IMM32.DLL
INETCOMM.DLL
IPHLPAPI.DLL
KERNEL32.DLL
LINKINFO.DLL
LZ32.DLL
MFC42U.DLL
MLANG.DLL
MOBSYNC.DLL
MOUNT.EXE
MPR.DLL
MPRAPI.DLL
MPRUI.DLL
MSASN1.DLL
MSFEEDS.DLL
MSGINA.DLL
MSHTML.DLL
MSI.DLL
MSIMG32.DLL
MSLS31.DLL
MSOERT2.DLL
MSRATING.DLL
MSSIGN32.DLL
MSVCP60.DLL
MSVCRT.DLL
MSWSOCK.DLL
NETAPI32.DLL
NETCFGX.DLL
NETMAN.DLL
NETPLWIZ.DLL
NETRAP.DLL
NETSHELL.DLL
NETUI0.DLL
NETUI1.DLL
NETUI2.DLL
NORMALIZ.DLL
NTDLL.DLL
NTDSAPI.DLL
NTLANMAN.DLL
OCCACHE.DLL
ODBC32.DLL
OLE32.DLL
OLEACC.DLL
OLEAUT32.DLL
OLEDLG.DLL
POWRPROF.DLL
PRINTUI.DLL
PSAPI.DLL
QUERY.DLL
RASAPI32.DLL
RASDLG.DLL
RASMAN.DLL
REGAPI.DLL
RPCRT4.DLL
RTUTILS.DLL
SAMLIB.DLL
SCECLI.DLL
SECUR32.DLL
SETUPAPI.DLL
SHDOCVW.DLL
SHELL32.DLL
SHLWAPI.DLL
SHSVCS.DLL
TAPI32.DLL
URLMON.DLL
USER32.DLL
USERENV.DLL
USP10.DLL
UTILDLL.DLL
UXTHEME.DLL
VERSION.DLL
W32TOPL.DLL
WER.DLL
WINHTTP.DLL
WININET.DLL
WINIPSEC.DLL
WINMM.DLL
WINSCARD.DLL
WINSPOOL.DRV
WINSTA.DLL
WINTRUST.DLL
WLDAP32.DLL
WMI.DLL
WS2_32.DLL
WS2HELP.DLL
WSOCK32.DLL
WTSAPI32.DLL
WZCDLG.DLL
WZCSAPI.DLL
WZCSVC.DLL
XMLLITE.DLL
|
Да с библиотеками конечно перебор ), собирал в HIASM-е, но на winpe seven x86 запускалась. Правда сам pe несовсем оригинальный, а с интегрированным microsoft Dart, незнаю может и еще что-то добавили. Тему считаю решенной, правда не так элегантно как бы хотелось.
amel27 спасибо за помощь.
|
Время: 06:21.
© OSzone.net 2001-