Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопросы, задачи и их решения по VBScript.

 
Мануал (english, 600 Кб). | Зеркало
MS Scripting 5.6 (700 КБ), включает последнюю версию VBS. Владельцам XP/2000(?) должен быть не нужен. | Зеркало
Немного на wikiпедии.
Предыдущие части: 1
 
Смежные темы:
Сценарии Windows
Командная строка, батники\сценарии (bat, cmd)
Скрипты KiXtart

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:12 12-07-2011 | Исправлено: Smitis, 23:28 26-02-2018
zawakened



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Alex_Piggy
Само собой аргументы коммандной строки можно обработать, и запустить необходимую процедуру при определенном аргументе, такой вариант конечно пойдет и работать будет, но вопрос был именно напрямую вызвать процедуру из файла-скрипта

Всего записей: 430 | Зарегистр. 04-07-2010 | Отправлено: 08:41 20-05-2013
LordHomyak

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zawakened
Интерес чисто теоретический, или вам нельзя менять содержимое файла-скрипта?
 
Как вариант, вызов через скрипт-переходник:
 
переходник:  
Код VBS: adapter.vbs
 
Управляемый скрипт с процедурами, для примера должен быть в папке с переходником.
Код VBS: remote_script.vbs
 
Вызов:  wscript -e:vbs adapter.vbs test1

Всего записей: 45 | Зарегистр. 10-02-2010 | Отправлено: 09:40 20-05-2013 | Исправлено: LordHomyak, 09:41 20-05-2013
zawakened



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LordHomyak
Да уже, скорее всего, более теоретический, на самом деле поразил тот факт, что вещь вроде как и элементарнейшая, а на практике невозможная =) В любом случае спасибо за советы!

Всего записей: 430 | Зарегистр. 04-07-2010 | Отправлено: 11:35 20-05-2013
LordHomyak

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zawakened
 
Я не случайно спросил про:
Цитата:
или вам нельзя менять содержимое файла-скрипта?

 
Если вы можете физически дописать в скрипт код переходника то будет,  
так как в вашем посте на прошлой странице.
Код:
wscript -e:vbs testscript.vbs test1

wscript -e:vbs - не обязательны если вызов ассотиативный
 
Да и сам переходник попроще будет.
Код:
Execute WScript.Arguments(0)
WScript.Quit
 
Sub test1()
    MsgBox "TEST 1"
End Sub
 
Sub test2()
    MsgBox "TEST 2"
End Sub

 
Стандартных средств (например ключа в wscript) насколько я знаю нет.

Всего записей: 45 | Зарегистр. 10-02-2010 | Отправлено: 11:45 20-05-2013 | Исправлено: LordHomyak, 11:52 20-05-2013
zawakened



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LordHomyak

Цитата:
Execute WScript.Arguments(0)  WScript.Quit   

А вот это кстати очень просто и со вкусом Прямо благодарствую

Всего записей: 430 | Зарегистр. 04-07-2010 | Отправлено: 11:57 20-05-2013
Astra55



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Есть ли способ записи/удаления ключей реестра с помощью VBScript в защищенных ветках типа HKEY_LOCAL_MACHINE\SYSTEM, в частности, интересуют разделы ControlSet00x, CurrentControlSet. Если есть, подскажите, шибко нужно. Не для вирусов!

----------
Per warez ad scientiam

Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 14:10 20-05-2013
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Astra55
Какой windows? xp и 7 в CurrentControlSet пишет точно также как и в другие ветки, под админом естественно.

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 14:20 20-05-2013
Astra55



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Black_Lung
Win XP SP3. Желательно получить разрешения на запись/удаление под любой учеткой. Теперь про админов - нет, не пишет, зачем бы я спрашивал? Вопрос в том, какой это админ? Если дефолтный, то может и будет писать, я же не под ним работаю, требуется под созданной учеткой админа. Например, нужны  запись/удаление в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root и HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services. Руками разрешение дается, само собой, но вопрос в скрипте, который это сделает.

----------
Per warez ad scientiam

Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 14:51 20-05-2013
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Astra55
Возможно что-то в вашем компе специально убрало разрешение на запись
 
Задать разрешение для всех можно c помощью отдельной внешней программы subinacl

Код:
subinacl  /noverbose /subkeyreg HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root /grant=Everyone
. И конечно у юзера должен быть доступ на запись разрешения.

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 16:08 20-05-2013
zawakened



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Astra55
Тут, скорее всего лучше копнуть в сторону утилиты SubInACL
Код:
subinacl.exe /keyreg HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Shared Tools\Graphics Filters /grant="domain users"=f

 
Еще во все версии Windows встроенна утилита regini.exe, возможности которой жутко ограничены, но тем не менее во многих случаях их хватает.

Код:
' Create a temp file with the script that regini.exe will use
'
set oFSO = CreateObject("Scripting.FileSystemObject")
strFileName = oFSO.GetTempName
set oFile = oFSO.CreateTextFile(strFileName)
oFile.WriteLine "HKEY_LOCAL_MACHINE\Software\Classes\AlejaCMaTypelib [1 5 7 11 17]"
oFile.WriteLine "HKEY_LOCAL_MACHINE\Software\AlejaCMaCo\AlejaCMaApp [1 5 7 11 17]"
oFile.Close
 
' Change registry permissions with regini.exe
'
set oShell = CreateObject("WScript.Shell")
oShell.Run "regini " & strFileName, 8, true
 
' Delete temp file
'
oFSO.DeleteFile strFileName
 
WScript.Echo "Done!"
И описание волшеных циферок, которые в квадратных скобках - Подробнее...
 
Добавлено:
А вообще в VBScript, по-моему, доступный путь - это использовать ADsSecurity.dll из пакета ADSI SDK, но эта тропа ведёт через Большие Матюки =)

Всего записей: 430 | Зарегистр. 04-07-2010 | Отправлено: 16:20 20-05-2013 | Исправлено: zawakened, 16:30 20-05-2013
Astra55



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Спасибо за столь любопытную инфу, отправляюсь ее переваривать. Потом отпишусь о результатах.

----------
Per warez ad scientiam

Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 16:46 20-05-2013
Ustas007

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите, пожалуйста, создать скрипт.
Нужно при старте системы задержать запуск программы на 10 секунд и при этом процесс должен быть не видим.

Всего записей: 42 | Зарегистр. 03-07-2006 | Отправлено: 19:23 25-05-2013
LordHomyak

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
доброй ночи, Ustas007
 
для примера запуск блокнота Код VBS
 
скрипт в автозапуск.

Всего записей: 45 | Зарегистр. 10-02-2010 | Отправлено: 01:04 26-05-2013 | Исправлено: LordHomyak, 01:09 26-05-2013
Astra55



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Реестр пока отложился, на первый план вышла такая задача:
----------------------
Function OnFirstParentExit
Set fso = CreateObject("Scripting.FileSystemObject")
If fso.FileExists("C:\Documents and Settings\Admin\Application Data\Notepad\file.xxx") Then
  fso.DeleteFile"C:\Documents and Settings\Admin\Application Data\Notepad\file.xxx", TRUE
End If
End Function
----------------------
Это скрипт удаления файла в виртуальном контейнере ThinApp, все работает, никаких проблем. Но мне нужно заменить абсолютный путь на относительный, а вот это не получается. Должно быть нечто вроде:
If fso.FileExists("%AppData%\Notepad\file.xxx")
Что нужно изменить, чтобы скрипт понял насчет относительного пути к файлу?

----------
Per warez ad scientiam

Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 17:02 03-06-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Добрый день, Astra55

Код:
 
Set WshShell = CreateObject("WScript.Shell")
FileName = WshShell.ExpandEnvironmentStrings("%AppData%\Notepad\file.xxx")
MsgBox FileName
 

Соответственно,  
If fso.FileExists(WshShell.ExpandEnvironmentStrings("%AppData%\Notepad\file.xxx"))

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 19:46 03-06-2013
Astra55



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alex_Piggy
Можно весь скрипт с изменениями полностью? Что-то не получается, выдает ошибки.

----------
Per warez ad scientiam

Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 20:14 03-06-2013 | Исправлено: Astra55, 20:14 03-06-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Astra55
Странно... То, что ниже, сохранить как VBS.
Единственное что - и FSO и WshShell наверное лучше определять не в функции, а в начале программы как паблик (чтобы не пересоздавать для каждой функции).

Код:
 
Public fso, wshShell
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
 
OnFirstParentExit
 
Function OnFirstParentExit
  FileName = WshShell.ExpandEnvironmentStrings("%AppData%\Notepad\file.xxx")
  If fso.FileExists(FileName) Then  
    fso.DeleteFile FileName, TRUE
  End If
End Function
 


Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 20:39 03-06-2013
Astra55



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alex_Piggy
Не работает. Ошибок не выдает, но и файл не удаляет. Вот проверка в реальных условиях:

Код:
Function OnLastProcessExit
Set fso = CreateObject("Scripting.FileSystemObject")
Set WshShell = CreateObject("WScript.Shell")
  FileName = WshShell.ExpandEnvironmentStrings("%Local AppData%\Compare++\Compare++_2_0.ini")
  If fso.FileExists(FileName) Then  
    fso.DeleteFile FileName, TRUE
  End If
End Function

Строчку с пабликом пришлось убрать, выдавалась ошибка при запуске программы, до работы скрипта дело не доходило, он запускается при выходе.

----------
Per warez ad scientiam

Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 21:04 03-06-2013
Alex_Piggy

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Astra55
Да, файл не удаляется. IMHO, лишний пробел в %Local AppData% - должно быть %LocalAppData%
Исправил, проверил (дописав первой строкой "OnLastProcessExit" ) - работает.
Код:
 
OnLastProcessExit
Function OnLastProcessExit  
 Set fso = CreateObject("Scripting.FileSystemObject")  
 Set WshShell = CreateObject("WScript.Shell")  
   FileName = WshShell.ExpandEnvironmentStrings("%LocalAppData%\Compare++\Compare++_2_0.ini")  
   If fso.FileExists(FileName) Then  
     fso.DeleteFile FileName, TRUE  
   End If  
End Function
 

Из-за чего проблемы с Public - не понимаю. Какая ошибка?

Всего записей: 1891 | Зарегистр. 07-08-2002 | Отправлено: 21:12 03-06-2013
Astra55



Platinum Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Alex_Piggy
Пробел есть в имени папки виртуальной системы, имя изменить невозможно. Если есть ThinApp, то могу прислать в ПМ проект, чтобы мы долго и нудно не переписывались, если Вы можете разобраться за несколько минут у себя на компе.

----------
Per warez ad scientiam

Всего записей: 11717 | Зарегистр. 16-05-2003 | Отправлено: 21:28 03-06-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru