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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
nicka



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
есть такие команды
 
adb install .\apk\notepad.apk
adb install .\apk\teamviewer.apk
adb install .\apk\angrybirds.apk
 
...
 
надо сделать vbs с выбором файла - и выбрать когда надо notepad.apk, потом teamviewer.apk и т.д.
 
можно реализовать?

Всего записей: 756 | Зарегистр. 01-10-2002 | Отправлено: 15:59 17-04-2012
chel78



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Доброго времени суток.
 может и не в тему пишу, но не знаю куда правильнее.
есть скрипт, который пишется в Excele  с помощью SAP.
  то есть в екселе стоит аддон, который подключается к SAP и пишет в Excel код скрипта, который потом можно многоразово запускать на выполнение с переменной. вопрос вот в чем. необходимо как то вставить паузу, в определенный момент выполнения скрипта. просто подождать при записи - результата не дает.
пример скрипта.
[img]  Uploaded with ImageShack.us[/img]

Код:
 
IsInput    ID    ScriptCode
START    001    
    002    MySession.findById("wnd[0]").resizeWorkingPane 65,28,false
x    003    MySession.findById("wnd[0]/usr/ctxtLIKP-VBELN").text = "74641979"
    004    MySession.findById("wnd[0]/usr/ctxtLIKP-VBELN").caretPosition = 8
    005    MySession.findById("wnd[0]").sendVKey 0
    006    MySession.findById("wnd[0]/mbar/menu[3]/menu[1]/menu[0]").select
    007    MySession.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3/ctxtDNAST-KSCHL[1,3]").text = "zua4"
    008    MySession.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3/ctxtDNAST-KSCHL[1,3]").setFocus
    009    MySession.findById("wnd[0]/usr/tblSAPDV70ATC_NAST3/ctxtDNAST-KSCHL[1,3]").caretPosition = 4
    010    MySession.findById("wnd[0]").sendVKey 0
    011    MySession.findById("wnd[0]/tbar[0]/btn[11]").press
    012    MySession.findById("wnd[0]/usr/chkNAST-DIMME").selected = true
    013    MySession.findById("wnd[0]/usr/ctxtNAST-LDEST").text = "locl"
    014    MySession.findById("wnd[0]/usr/txtNAST-ANZAL").text = "1"
    015    MySession.findById("wnd[0]/usr/chkNAST-DIMME").setFocus
    016    MySession.findById("wnd[0]").sendVKey 3
    017    MySession.findById("wnd[0]/tbar[0]/btn[11]").press
STOP    018    
 

 

Всего записей: 124 | Зарегистр. 19-01-2007 | Отправлено: 14:17 18-04-2012 | Исправлено: chel78, 14:21 18-04-2012
WestGott

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Привет всем
Извините что вопрос немножко не попадает в тему, но может тут наёдётся тот кто с этим сталкивался.
Я написал скрипт в языке JScript
Но как только дошёл до его обкатки в системах с включённым UAC упёрся в грабли, чтобы скрипт работал его нужно запускать с административными полномочиями.
А в контекстном меню для файлов с расширением "js" нет пункта "Запуск от имени администратора".
 
Погуглив тему наткнулся на код перезапуска скрипта с полномочиями администратора для VBScript.
 

Код:
 
If WScript.Arguments.Count = 0 Then
Set objShell = CreateObject("Shell.Application")
objShell.ShellExecute "wscript.exe", Chr(34) & WScript.ScriptFullName & Chr(34) & " Run", , "runas", 1
Else
 'Сюда пишем код скрипта
End If
 

 
На VBScript этот код работает.
Но тот же самый код переведённый в JScript напрочь отказывается работать.

Код:
 
if (WScript.Arguments.length == 0)
 {
   var objShell = WScript.CreateObject("Shell.Application");
 
   objShell.ShellExecute("wscript.exe", + "\"" + WScript.ScriptFullName +
    "\"" + " Run", "", "runas", 1);  
 }
else
 {  
   //Сюда пишем код скрипта
 }
 

 
Переписывать весь свой скрипт из js в vbs неохота.
Делать vbs-скрипт для запуска js-скрипта тоже не хочется.
Может есть кто, кто знает, как решить проблему перезапуска скрипта JScript от имени администратора?
 
Блин, написал пост.
Перечитал код, и увидел лишний символ плюс.
Убрал его и код заработал.
 
Вот рабочий код

Код:
 
if (WScript.Arguments.length == 0)
 {
   var objShell = WScript.CreateObject("Shell.Application");
 
   objShell.ShellExecute("wscript.exe", "\"" + WScript.ScriptFullName +
    "\"" + " Run", "", "runas", 1);  
 }
else
 {  
   //Сюда пишем код скрипта
 }
 

 
Уважаемые модераторы, я бы удалил своё сообщение, но не нашёл такой опции.
Поэтому к Вам просьба, либо удалите мой пост, либо перенесите в соответствующую тему.

Всего записей: 96 | Зарегистр. 10-04-2010 | Отправлено: 22:27 18-04-2012 | Исправлено: WestGott, 23:27 18-04-2012
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
nicka
 
можно реализовать через InternetExplorer.Application,  htm в vbs
 
chel78
команда ожидания: wscript.sleep(количество мсек)

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 11:51 19-04-2012
chel78



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

Цитата:
команда ожидания: wscript.sleep(количество мсек)

не катит, ошибку кажет.
 

Код:
"VBError --> Number: 424    Source: Microsoft VBScript runtime error    Description: Object required: 'wscript'    Line: 4    Column: 0"

 
Это по ходу для VBS,  а тут немного другое..  

Всего записей: 124 | Зарегистр. 19-01-2007 | Отправлено: 12:40 19-04-2012 | Исправлено: chel78, 13:15 19-04-2012
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, ошибка, если без vbs то можно так:

Код:
 
Application.Wait Now + TimeValue("00:00:10")
 


Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 13:51 19-04-2012
chel78



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

Цитата:
Да, ошибка, если без vbs то можно так:  
 
Код:
 
Application.Wait Now + TimeValue("00:00:10")  
 

 снова не оно.. ошибки не кажет, пишет сакцесс, но в итоге ничего не происходит

Всего записей: 124 | Зарегистр. 19-01-2007 | Отправлено: 15:40 19-04-2012
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
chel78
оно ничего писать не должно, просто ждёт время заданное параметром TimeValue
Если нужна явная пауза то можно вставить Msgbox "Pause", это будет висеть пока не нажмеш ОК.

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 18:38 19-04-2012
chel78



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

Цитата:
оно ничего писать не должно

 так оно и не делает ничего

Всего записей: 124 | Зарегистр. 19-01-2007 | Отправлено: 19:04 19-04-2012
johnysc3



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!  
Windows Server 2008 R2, VBS, терминальные пользователи без админ-прав.  
Подскажите, пожалуйста, как мне в скрипте vbs увидеть переменные окружения текущего пользователя, если я запускаю скрипт из планировщика с полными правами (галочка "Выполнять с наивысшими правами")?
Подробнее:  
Есть скрипт, меняющий временные папки для пользователей в терминале:  

Код:
const HKEY_CURRENT_USER = &H80000001  
strComputer = "."  
 
Set oReg=GetObject("winmgmts:{impersonationLevel=impersonate}!\\" &_  
strComputer & "\root\default:StdRegProv")  
 
strKeyPath = "Environment"  
strValue1Name = "TEMP"  
strValue1 = "t:\Temp\" & createobject("wscript.shell").expandenvironmentstrings("%username%")  
 
strValue2Name = "TMP"  
strValue2 = "t:\Temp\" & createobject("wscript.shell").expandenvironmentstrings("%username%")  
 
oReg.SetExpandedStringValue _  
HKEY_CURRENT_USER,strKeyPath,strValue1Name,strValue1  
 
oReg.SetExpandedStringValue _  
HKEY_CURRENT_USER,strKeyPath,strValue2Name,strValue2

Если я вношу терминального пользователя в группу админов, то скрипт запущенный под этим пользователем отрабатывает на ура. Если пользователь не в группе админов, то скрипт ничего не делает. Если я запускаю этот скрипт при входе пользователя планировщиком с админ-правами, то он и выполняется в контексте админа, т.е. меняет параметры у админа, а не у того пользователя под которым я вошел в терминал. А мне надо чтоб юзеры были без админ-прав, но и с временными папками шоб проблем не было, да и еще в этом скрипте много чего есть, но остальное не работает по этим же причинам. ЧЯДНТ?!

Всего записей: 72 | Зарегистр. 12-12-2006 | Отправлено: 16:54 23-04-2012
megamozg13



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
johnysc3
вот вырезка из моего основного логон скрипта, все в синтаксисе JavaScript:
 

Цитата:
Shell=WScript.CreateObject("WScript.Shell");
path=WScript.ScriptFullName.substr(0,WScript.ScriptFullName.length-WScript.ScriptName.length);
user=Shell.ExpandEnvironmentStrings("%USERNAME%"); user=user.toUpperCase();
comp=Shell.ExpandEnvironmentStrings("%COMPUTERNAME%"); comp=comp.toUpperCase();
 
 
if (comp=="SERVER"|comp=="SERVER2"){
  try {Shell.Run(path+"Set_TMP.js",0,true)} catch(e) {WScript.Echo("Ошибка автозагрузки: "+path+"Set_TMP.js\nОбратитесь к администратору")};
};

 
скрипт прописывания темпов для каждой сессии Set_TMP.js:

Цитата:
function STR0(x,y)
 { var str=x.toString(10); while (str.length<y){str="0"+str}; return (str);}
 
Sh=new ActiveXObject("WScript.Shell"); Fso=new ActiveXObject("Scripting.FileSystemObject");
username=Sh.ExpandEnvironmentStrings("%USERNAME%");   username=username.toUpperCase();
comp=Sh.ExpandEnvironmentStrings("%COMPUTERNAME%");   comp=comp.toUpperCase();
 
session=Sh.ExpandEnvironmentStrings("%SESSIONNAME%"); session=session.toUpperCase();
if (session.length>7) { session=session.substr(8); session=STR0(session,5); };
 
if (comp=="SERVER"){
  tmp_path="E:\\TMP\\";         if (!Fso.FolderExists(tmp_path)) Fso.CreateFolder(tmp_path);
  tmp_path="E:\\TMP\\"+session; if (!Fso.FolderExists(tmp_path)) Fso.CreateFolder(tmp_path);
  Sh.RegWrite("HKEY_CURRENT_USER\\Environment\\TEMP",tmp_path);
  Sh.RegWrite("HKEY_CURRENT_USER\\Environment\\TMP",tmp_path);
};  
 
if (comp=="SERVER2"){
  tmp_path="D:\\TMP\\";          if (!Fso.FolderExists(tmp_path)) Fso.CreateFolder(tmp_path);
  tmp_path="D:\\TMP\\"+session;  if (!Fso.FolderExists(tmp_path)) Fso.CreateFolder(tmp_path);
  Sh.RegWrite("HKEY_CURRENT_USER\\Environment\\TEMP",tmp_path);
  Sh.RegWrite("HKEY_CURRENT_USER\\Environment\\TMP",tmp_path);  
};  

 
вот эта может быть непонятная штука:

Цитата:
session=Sh.ExpandEnvironmentStrings("%SESSIONNAME%"); session=session.toUpperCase();
if (session.length>7) { session=session.substr(8); session=STR0(session,5); };
 

это проверка логина на консоль сервака, там выстреливает "CONSOLE" когда в других случаях "SESSIONNAME=RDP-Tcp#722" например

Всего записей: 313 | Зарегистр. 27-07-2004 | Отправлено: 17:04 23-04-2012 | Исправлено: megamozg13, 17:08 23-04-2012
johnysc3



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, но Sh.RegWrite("HKEY_CURRENT_USER\\Environment\\TEMP",tmp_path); не выполнится с ограниченными правами, а с админ правами - выполнит изменение переменной TEMP у админа. В этом суть проблемы.

Всего записей: 72 | Зарегистр. 12-12-2006 | Отправлено: 17:13 23-04-2012 | Исправлено: johnysc3, 17:19 23-04-2012
megamozg13



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
johnysc3 "HKEY_CURRENT_USER" в "курент юзер" всё должно работать и у вас.
а с админ правами, вы выполняете скрипты от имени админа, там конечно другие переменные окружения.

Всего записей: 313 | Зарегистр. 27-07-2004 | Отправлено: 17:19 23-04-2012 | Исправлено: megamozg13, 17:20 23-04-2012
johnysc3



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сделал запуск скрипта через gpedit.msc -> Конфигурация пользователя -> Конфигурация Windows -> Сценарии вход/выход -> вход в систему, и все заработало Всем спасибо, сам изначально закосячил со способом запуска - с планировщика не работает.

Всего записей: 72 | Зарегистр. 12-12-2006 | Отправлено: 18:18 23-04-2012
Kostenius

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, ру-бордовцы!
Озадачился на днях автоматизировать создание архива из выбранных файлов и папок с помощью кнопки на панели Total Commander. При нажатии кнопки вызывается .VBS файл с параметрами:  
%P (исходный путь);  
%S (имена всех выделенных файлов);  
%N (имя файла с расширением под курсором. Используется для задания имени создаваемого архива).  
и интерпретируется WSH. При успешном создании архива исходные файлы/папки автоматически удаляются.
После нескольких дней чтения документации и экспериментов (впервые создаю программу на объектно-ориентированном языке) родился следующий скрипт:

Код:
 
Dim objargs, i, farh, path
Set objargs = WScript.Arguments
For i=1 To objargs.Count-2  
farh = farh & Chr(34) & objargs(i) & Chr(34) & " "
Next
Set WshShell = CreateObject("WScript.Shell")
Set job = WshShell.Exec ("e:\progs\TotalCmd\plugins\arc\7za.exe a -tzip " &Chr(34)&objargs(objargs.Count-1) & ".zip"&Chr(34)& " "&farh)
    Do  
    WScript.Sleep 30  
    Loop While job.Status = 1
    path = Chr(34)&objargs(0)&Chr(34)    
    WshShell.Exec ("cmd /c cd /d " &path&"& del /f /q "& farh&"& rd /s /q "&farh)
 

При использовании скрипта обнаружилась проблема: после создания архива исходные файлы/папки удаляются через раз (в зависимости от исходного пути и имен файлов или все успешно удаляются или ничего не удаляется).
Вопросы:
1) Можно ли с помощью VBScript удалять файлы и папки без предварительного определения файл перед нами или папка?
2) При создании объекта File методом GetFile можно ли как-нибудь обойти требование использовать дойные слеши (\\) при задании пути? Это так неудобно, ведь везде используются одинарные!
3) Подскажите эффективный способ преобразовать путь файла с одинарными слешами в пусть с двойными слешами чтобы вставить в данный код:

Код:
 
Set FSO = CreateObject("Scripting.FileSystemObject")  
  For i=1  To objargs.Count-2  
    path = Chr(34)&objargs(0)&Chr(34)
    file = objargs(i)
    MsgBox (path&file)
    oFile = FSO.GetFile(Chr(34)&path&file&Chr(34))  
       If oFile.Attributes = 16  
       Then FSO.DeleteFolder path&file, 1  
       Else FSO.DeleteFile path&file, 1  
       End If
  Next
 

4) Существуют ли в VBA более простая замена Chr(34) наподобие символа экранирующего обратного слеша \ у BASH в Линуксе или в MS Access, который выводит следущий за ним символ как символьную константу?

Всего записей: 113 | Зарегистр. 06-12-2006 | Отправлено: 01:16 11-05-2012 | Исправлено: Kostenius, 01:26 11-05-2012
aanufriev

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

Всего записей: 1 | Зарегистр. 11-05-2012 | Отправлено: 11:48 11-05-2012
Vitalka84

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

Всего записей: 5 | Зарегистр. 11-05-2012 | Отправлено: 09:49 12-05-2012
Black_Lung



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
aanufriev
vbs не дружит с *.*, это лучше делать обычным cmd.  
 
Vitalka84
Убери dim с заданием типа, это в vbs не используется, команда dim только нужна для обявления масива.

Всего записей: 275 | Зарегистр. 09-10-2008 | Отправлено: 11:27 14-05-2012
ComradG



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Black_Lung
меняй диллера и не кури что попало!
Цитата:
команда dim только нужна для обявления масива.
разбежался об забор! тебе Option Explicit уже ни о чем не говорит? и ты вообще в курсе, что значит Dim? Dim - оператор обявления переменной с последующим резервированием для нее памяти.
Цитата:
vbs не дружит с *.*, это лучше делать обычным cmd
всю жизнь дружила, а пришел Black_Lung и переписал интерпретатор w\cscript, не уведомив при этом мелкософт читай msdn и не в води в заблуждение остальных своими высерами.

Всего записей: 2038 | Зарегистр. 05-07-2008 | Отправлено: 17:07 14-05-2012 | Исправлено: ComradG, 17:08 14-05-2012
Vitalka84

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

Цитата:
Vitalka84
Убери dim с заданием типа, это в vbs не используется, команда dim только нужна для обявления масива.

 
Не помогло... Ошибка осталась прежней... Есть ещё варианты?
 

Всего записей: 5 | Зарегистр. 11-05-2012 | Отправлено: 01:13 15-05-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 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