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

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

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

ShIvADeSt (12-07-2011 15:12): http://forum.ru-board.com/topic.cgi?forum=33&topic=11963#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

   

bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WshShell.Run(WScript.Name & " 1", 0, False)
рет код скопировалось из начала друго скрипа оно тут не нужно. а в vbstoexe команда wshellRun не работает если строку не начать с retcode =. так как у меня скрипты отключены и я никогда не запускал скрипты на компе мои коды могут быть нерабочими.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 17:30 23-09-2009
Starley25



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по выделению последней строки в текстовом файле очень сложен или как?

Всего записей: 117 | Зарегистр. 07-03-2005 | Отправлено: 18:00 23-09-2009
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 18:03 23-09-2009
Starley25



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

Всего записей: 117 | Зарегистр. 07-03-2005 | Отправлено: 18:08 23-09-2009 | Исправлено: Starley25, 18:09 23-09-2009
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 18:15 23-09-2009
SANIOK_AV



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

Цитата:
Цитата:WScript //H:CScript    Стандартный сервер сценариев заменяется на CScript.exe  
WScript //H:WScript    Стандартный сервер сценариев заменяется на WScript.exe (по умолчанию)  
 
Консольное окно - это окно CScript.  

 
ну а как мне вызывать мой скрипт?
 

Цитата:
WScript //H:CScript имя скрипта.vbs

?
 
bomzzz

Цитата:
CommandLine = Wscript.Arguments.Item(0)  
  If CommandLine = "" Then  
  Set WshShell = CreateObject("WScript.Shell")  
  WshShell.Run("MyScript.vbs 1", 0, False)    
  Wscript.Quit  
  End If  
.............код срипа MyScript.vbs..............  
 

 
как будет выглядеть мой скрипт полностью
если текст изначального скрипта таков:
 

Цитата:
dim Wsh, AppName
Set Wsh = Wscript.CreateObject("Wscript.Shell")
AppName="runas /profile /user:admin 123.bat"
Wsh.Run AppName
WScript.Sleep 4000
wsh.appActivate AppName
Wsh.SendKeys "qwerty~"

 
или это будут 2 отдельных файла?
 
mozers
bomzzz
 
P.S.: Прошу прощения за наивные вопросы...))
 
P.P.S.: или это runas это окно выводит...уже сам запутался....((  

Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 18:42 23-09-2009 | Исправлено: SANIOK_AV, 18:49 23-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
просто дописываешь после шапки что угодно. объявлять объекты по два раза можно одни и теже, если имена переменных совпадут тоже уже ничего не напортится. консольное окно мигнет в самом начале а потом его не будет. лучше в екзешник конвертнуть
 
 
WshShell.Run(WScript.Name & " 1", 0, False) лучше так, чтоб не быть привязанным к имени файла

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 18:47 23-09-2009 | Исправлено: bomzzz, 18:49 23-09-2009
bomzzz



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

Цитата:
 
Run(<Command>,<WindowStyle>,<WaitOnReturn>)  
Назначение:  
Создаёт новый независимый процесс, который запускает заданное приложение.  
Параметры:  
<Command> - строка, командная строка запуска приложения.
<WindowStyle> - необязательный, число. Определяет вид окна запускаемого приложения. Некоторые возможные значения:
0     Запуск в скрытом виде
1 - Активизирует и отображает окно.
2 - Активизирует окно и отображает его в свёрнутом виде.
3 - Активизирует окно и отображает его в максимизированном виде.
4     Запуск в обычном размере, в неактивном состоянии (без фокуса)
8     Обычный размер в неактивном состоянии, но в фокусе остается запустившее приложение
<WaitOnReturn> - необязательный, булево (число). True - сценарий возобновит работу только после завершения вызванного процесса. False (по умолчанию) - управление передаётся сразу обратно в сценарий.
Описание:  
Если параметр "WaitOnReturn" установлен в True, метод возвращает код выхода вызванного приложения. Иначе метод всегда возвращает ноль.  
Пример:  
Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "explorer /e,/root,""C:\Program Files"""
Другой пример:  
Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run("notepad", 1, True)
MsgBox "Обработка завершена! Код возврата - " & RetCode
 

 
возможно и не будет работать, я действую в логике исполняемых екзе программ. возможно при запуске скрипта в процессах отражается не скрипт а исполняемый его компонент виндовс, тогда надо прогу подкорректировать на запуск этого компонента с указанием запускаемого скрипта. для такой небольшой програмки (скрипта) нет смысла пользоваться таким приемом наверно. гораздо проще сконвертировать в екзе файл, а скрипты лучше вообще запретить.
алгоритм примерно такой - при апуске крипта проверяется командная строка,  
 CommandLine = Wscript.Arguments.Item(0)  
  If CommandLine = "" Then  
это то что мы пишем в ярлыке после имени программы (c:\MyProg.exe MyCommand) не могу сообразить какой пример был бы всем понятен и близок. если эта строка пуста - скрипт запустили ручками с рабочего стола например - то все выполнение сводится к самоперезапуску, но уже с непустой командной строкой и в скрытом режиме, на чем выполнение прекращается.  
WshShell.Run(WScript.Name & " 1", 0, False)  
Wscript.Quit      
будучи же запущен с командной строкой - осуществляется переход к исполнению кода скрипта.
WScript.Name - это имя самого скрипта
 

Цитата:
 
When you use the CScript //H or WScript //H command to change the default script host on a Windows XP-based computer, the operation may not work as expected. For example, if you use the CScript //H:CScript command, WScript is set as the default script host instead of CScript.
 
You may experience this issue in the following scenarios.
http://support.microsoft.com/kb/952033
 

вот в чем дело.....  разберись вот с этим. тогда окна похоже вообще никогда не будет
 
   
я бы даже вот тут поробовал это поменять
csscript консоль выдает, а wscript нет.
C:\WINDOWS\system32\cscript.exe
C:\WINDOWS\system32\wscript.exe

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 01:14 24-09-2009 | Исправлено: bomzzz, 07:15 24-09-2009
mozers



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SANIOK_AV
Цитата:
текст изначального скрипта таков:
Код:
dim Wsh, AppName
Set Wsh = Wscript.CreateObject("Wscript.Shell")
AppName="runas /profile /user:admin 123.bat"
Wsh.Run AppName
WScript.Sleep 4000
wsh.appActivate AppName
Wsh.SendKeys "qwerty~"

Вот только теперь, наконец то, стало понятно о чем мы говорим.
1. Консольное окошко у тебя возникает не потому что скрипт выполняется с помощью движка cscript, а потому что Wsh.Run у тебя запускает консольное приложение runas которое и создает окно.
2. Если скрыть окно runas, то скрипт не сработает, поскольку Wsh.SendKeys посылает символы только в активное окно.
3. Wsh.SendKeys - очень плохая команда, поскольку ее результат зависит от текущей раскладки клавиатуры и наличия активного окна (скорость появления и активации которого сильно зависит от многих причин).
4. У runas есть ключик /savecred с помощью которого можно сохранить однажды набранный пароль и не вводить его каждый раз заново.
5. Скрипт - неудачный. Запускать батник от имени другого пользователя надежнее и удобнее с помощью планировщика (Shedule) или WMI. (Примеров тут - навалом)  
6. Забудь ты про эту ковертацию в exe...
7. Фильтруй базар. Не все что сказано в этом форуме - истина...

Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 09:41 24-09-2009 | Исправлено: mozers, 09:44 24-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
 
 
с точки зрения безопасности вбс срипты лучше все таки отключить, к тому же от них никакого толку нету. лично у меня антивируса нету, поэтому все дыры которые можно заткнуты.  
для управления мышью и посылки клавиш - много всячиских программ Макросов. у которых в том числе есть ожидание появления запущенного окна - что делает более надежными эти манипуляции.
xstarter помоему это умеет.
наверно это (ожидание) можно реализовать и в скрипе.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 11:05 24-09-2009 | Исправлено: bomzzz, 11:24 24-09-2009
SANIOK_AV



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

Цитата:
разберись вот с этим. тогда окна похоже вообще никогда не будет  

дело в том что я скрипт собираюсь не только на своей машине запускать...
mozers

Цитата:
У runas есть ключик /savecred с помощью которого можно сохранить однажды набранный пароль и не вводить его каждый раз заново.

к сожалению вариант с сейвкредом не подходит в моей ситуации...

Цитата:
помощью планировщика (Shedule)

тоже не пойдёт...((

Цитата:
или WMI

как?

Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 11:23 24-09-2009
bomzzz



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

Цитата:
 
ECHO OFF
COLOR 9F
CLS
WMIC /?
PAUSE
 

вот такой батник запусти, а потом по ключам дальше ройся. так дела с вми обстоят. вот хорошие статьи , я сам еще только начал почитывать, но уже кучу полезного нарыл.
http://www.intuit.ru/department/os/compromtwin/12/1.html
http://www.script-coding.info/index.html
вот вчера меня мозерс подучил как бинарную инфу в реестр записывать на вбс скрипах с помощью вми
 
в настройки биос лучше не лазить без детального изучения прикладного материала

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 11:27 24-09-2009 | Исправлено: bomzzz, 11:32 24-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
WaitWindow.exe  2,00 КБ (2 048 байт)
прога работает следующим образом будучи просто запущена, она ничего не делает просто выходит. будучи запущена с командной строкой с /ИМЕНЕМ ОКНА, она сама выводит окно на экран в активном состоянии, делает его активным(!), на всякий случай, и выходит. возвращаемое значение - в случае если запущена без параметра - просто некое большое число. в случае удачного отрабатывания - окно появилось и сделалось активным возвращается 1. ожидает появление окна 60 секунд, но если комп будет тормозить это время пропорционально увеличится, так что даже многовато - в случае выхода времени ожидания код возврата 0.
теперь об ИМЕНИ ОКНА, это то что мы видим вот тута наверху на синеньком слева, сразу за иконкой
   
Калькулятор
пример WaitWindow.exe /Калькулятор
бывают ньюансы, например не смотря на то что у программы USDownloader мы видим  
Universal Share Downloader v1.3.5.3 использовать все равно надо Universal Share Downloader, случай частный - но все же в каждом конкретном случае может понадобится настройка. так как VBS скрипты не предпологают использование окон использовать как параметр класс окна мне показалось излишним. у консольных приложений в этом месте обычно путь к программе в досовском формате. не смотря на возможные пробелы в имени, использование кавычек не требуется - даже противопоказано.
WaitWindow.exe /Universal Share Downloader
WaitWindow.exe /C:\DOCUME~1\BOMZ\0016~1\NONAME.EXE
WaitWindow.exe /Download Master 5.5.13.1173
WaitWindow.exe  /NetTransport
может пригодится как раз для надежной отправки в окна всяких нажатий клавиш при помощи SendKey - запускать ее WshShell.Run вместо Sleep .  

Цитата:
 
Set WshShell = CreateObject("WScript.Shell")
RetCode = WshShell.Run("Calc.exe", 1, False)
RetCode = WshShell.Run("WaitWindow.exe /Калькулятор", 1, True)
True - ожидаем возвращения
 

чтоб проверить - загрузите процессор на 100 процентов, например начните архивировать фильм полтора два гига, или лучше в мазиле откройте 50 вкладок, чтоб оперативку подъедать начало и проверьте как связка будет работать.
проверил на калькуляторе, блокноте, даунлоад мастере, US даунлоадере, КМПлеере, консольном окне 16 битного приложения. в случае если запущено несколько окон одной программы - действия будут производится только с одним окном с таким приоритетом: с активным, с "верхним", с последним запущеным.  

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 14:50 24-09-2009 | Исправлено: bomzzz, 04:16 25-09-2009
Gavigor



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

Всего записей: 118 | Зарегистр. 27-04-2008 | Отправлено: 15:24 24-09-2009
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
гавигорка приветик    
 
косяк был в проге, причем конкретный - она срабатывала до вывода на экран окон многих программ, то есть срабатывала не на вывод (прорисовку) окна, а на регистрацию окна в системе. сходу функцию которая отслеживает состояние отражения окна на экране не нашел, но сделал просто что прога сама выводит окно на экран. проверил на десятке различных программ теперь все нормально.    
так даже лучи - время ожидания уменьшается
в даунлоадмастере теперь даже дожидается когда сплешскрин отработает.
 
WinClassShow.exe  2,50 КБ (2 560 байт)
программа отладчик, работает следующим образом, запускается с параметром имени окна

Цитата:
 
WaitWindow.exe /Universal Share Downloader
WaitWindow.exe /C:\DOCUME~1\BOMZ\0016~1\NONAME.EXE
WaitWindow.exe /Download Master 5.5.13.1173
WaitWindow.exe  /NetTransport  
 

изучаемую программу лучше всего запустить сразу, в противном случае ожидает появления окна 10 секунд. выдает следующие сообщения. на примере WinClassShow.exe /Download Master 5.5.13.1173
в случае если не дождалась появления окна  в течении 10 секунд (например если имя было неправильно определено)
   
в случае если было окно обнаружено выводит в сообщении класс окна (то есть мы определили имя окна правильно для наших целей) - некую внутренню константу виндовз
   
в случае если была запущена без параметра
   
 
в принципе можно добавить чтоб окно поверх других окон делалось - но это в принципе чревато косяками и накладками. и срабатывание на имя окна лучше - потому что в случае класса окна она бы срабатывала на все окна такого класса
 
альтернатива  
http://www.computerra.ru/gid/rtfm/system/272855/  
http://www.commandline.co.uk/cmdow/cmdow.zip
консольная утилита размером в 31 кб, включающая порядка 30 команд управления окнами приложений в операционных системах Windows NT4/2000/XP/2003 без использования мыши. Программа не требует установки и состоит всего из одного файла cmdow.exe, опции запуска которого разработчик разделил на четыре группы, в зависимости от области применения приложения.
Вот тут сразу правильные имена окон выводятся

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 15:31 24-09-2009 | Исправлено: bomzzz, 05:32 25-09-2009
mozers



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

Цитата:
помощью планировщика
тоже не пойдёт...((

А че так??? Религия не позволяет чтоли ? ИМХО - самый простой способ :
Код:
@echo off
SCHTASKS /CREATE /RU admin /RP passw /SC once /TN tmp /TR 123.bat /ST 00:00:00
SCHTASKS /RUN /TN tmp


Цитата:

Цитата:
или WMI
как?

Так. Только учти что
Цитата:
Объект SWbemLocator позволяет установить соединение с определённым пространством имён WMI на удалённом компьютере от имени заданной учётной записи или на локальном компьютере от имени текущей учётной записи.

Всего записей: 2187 | Зарегистр. 03-01-2002 | Отправлено: 10:39 25-09-2009
SANIOK_AV



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

Цитата:
@echo off  
SCHTASKS /CREATE /RU admin /RP passw /SC once /TN tmp /TR 123.bat /ST 00:00:00  
SCHTASKS /RUN /TN tmp  

супер!
если ставишь /SC once то задание после выполнения удаляется я так понял?
и почему время начала: /ST 00:00:00  ?
 
только вот опять пароль в открытом виде передаётся...(((

Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 12:30 25-09-2009
TYMAH3003

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А подскажите как с помощью скриппа выключить службы Винды к примеру "диспечер очереди печати"

Всего записей: 241 | Зарегистр. 15-03-2009 | Отправлено: 15:32 25-09-2009
bomzzz



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

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 16:02 25-09-2009
SANIOK_AV



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TYMAH3003
записать в реестр  
HKLM\SYSTEM\CurrentControlSet\Services\Spooler\Start: 0x00000004
(отключение службы (disable))
Добавлено:
 
наверное так:
 

Цитата:
Set WshShell = CreateObject("WScript.Shell")
myKey = "HKLM\SYSTEM\CurrentControlSet\Services\Spooler\Start"
WshShell.RegWrite myKey,4,"REG_DWORD"
Set WshShell = Nothing

 
 
Добавлено:
а если просто остановить службу то так:
 

Цитата:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
 
Set colServiceList = objWMIService.ExecQuery _
    ("Select * from Win32_Service where Name='spooler'")
 
For Each objService in colServiceList
    errReturn = objService.StopService()
Next

 
а батником вобще остановить просто:
 

Цитата:
net stop spooler


Всего записей: 485 | Зарегистр. 31-03-2009 | Отправлено: 16:25 25-09-2009 | Исправлено: SANIOK_AV, 16:54 25-09-2009
   

Страницы: 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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript
ShIvADeSt (12-07-2011 15:12): http://forum.ru-board.com/topic.cgi?forum=33&topic=11963#1


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru