Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Программирование "удобняшек" на VBScript

Автор: Free_Soft
Дата сообщения: 09.09.2010 20:48
ComradG
ммм.. тот код сам месседжбоксом является. я просто хочу отказаться от екзешной утилиты и заменить ее скриптом. Синтаксис приведенного мной сценария:
message.vbs "текст" "заголовок окна" <символ, обозначающий иконку в сообщении> <кнопки> <таймаут>
например:
Код: message.vbs "Чтобы закрыть это окно, нажмите Ок." "Мой скрипт" I OK 30
Автор: ComradG
Дата сообщения: 09.09.2010 20:50
Rush
Про мусор я уже говорил. Прошу прощения за дерзость, но ты бы лучше еще пояснил Scaramanga куда именно этот кусок вставлять заранее
Free_Soft
КАКУЮ ИМЕННО?
Автор: Free_Soft
Дата сообщения: 09.09.2010 21:03
ComradG
ну в тексте выводимого сообщения. Скрипт широко применяется, текст подставляется из консоли, а не прописывается в самом сценарии
Автор: Rush
Дата сообщения: 09.09.2010 21:08
ComradG

Цитата:
ты бы лучше еще пояснил Scaramanga куда именно этот кусок вставлять заранее

Разберется.
Автор: ComradG
Дата сообщения: 09.09.2010 21:09
Free_Soft
В смсысле должен браться текст уже выведенный в консоль и после выводиться в мессагубокс? Эээ... По-моему, это просто извра, нежели необходимость.
Rush
Посмоторим
Автор: Free_Soft
Дата сообщения: 09.09.2010 21:15
ComradG
ну а что тут извращенного? в консольной программе с помощью этого сценария организован интерфейс, в зависимости от выполняемых функций в сообщение выводится разный текст. Текст НЕ ВВОДИТСЯ в консоль (в смысле я не набиваю его руками в окно консоли и не хочу, чтобы он потом появился в окне сообщения) - cmd сценарий лишь задает его для vbs скрипта. Извини, если туманно выражаюсь
Автор: ComradG
Дата сообщения: 09.09.2010 21:24
Free_Soft

Цитата:
Извини, если туманно выражаюсь

Да нет, не очень. Просто представить пока никак не могу подобное. По-моему лучше не заморачиваться и сделать в vbs'ке отдельную секцию с набором сообщений. А то, если я тебя правильно понимаю, придется дрюкаться с буфером.
Автор: Free_Soft
Дата сообщения: 09.09.2010 21:28
ComradG
Да зачем с буфером-то? код рабочий, все отлично работает, просто строку перенести надо. Извини снова, если опять друг друга не поняли. Msgbox.exe кстати умеет строки переносить, но у нее плохая совместимость с антивирусами. отсюда и пляски. А все сообщения в сценарий.... можно конечно. Только в скриптах я полный профан
Автор: ComradG
Дата сообщения: 09.09.2010 21:38
Free_Soft

Цитата:
можно конечно

Дык, в чем тогда дело? В случае с cscript'ом сообщения выводятся через echo, а в wscript - через msgbox. Я ж тебе привел пример.

Цитата:
Только в скриптах я полный профан

Все когда-то были такими.
Автор: Scaramanga
Дата сообщения: 09.09.2010 21:44

Цитата:
Плохо, когда все делается копипастом, без понимания.

Вчера первый раз взялся за VB да и вообще за програмироние.

Основа скрипта была взята с мелкософтовского сайта, там он выполнял функцию скана по сети и отправку на мыло, что разобрался за несколько часов - вырезал. Аналогично с остальными кусками кодов.

Добавлено:

Цитата:
Припиши к скрипту

Код:Dim SourceFilePath, DestFilePath, Zip, WsriptShell, strMailBody, FileSytemObject


и он отработает нормально.

спасибо все работает)
Автор: Free_Soft
Дата сообщения: 09.09.2010 21:52
ComradG
Все таки еще спрошу: с приведенным мной кодом можно такое проделать или нет?
Автор: Free_Soft
Дата сообщения: 10.09.2010 08:47
Вопрос снят, уже сам сделал
Автор: bomzzz
Дата сообщения: 10.09.2010 18:41
travian
да сделал я тебе уже без окон. все работает
Автор: cetael
Дата сообщения: 15.09.2010 13:42
Привет.

Есть скрипт для удаленно отключения компьютеров. Но требуется что до отключения компьютеров скрипт предупреждал пользователей например вот так: "Power failure. The computer will be automaticaly shutting down after 3 min. Please save your work" и через 3 минут отключал компьютеры.

-----------------------------------------------------------------------------
Dim strComputer, OperationMode, strUsername, strPassword

'Remote computername or IP
strComputer="172.5.5.155"

'Specify the OperationMode (0 = Restart, 1 = Logoff, 2 = Shutdown)
OperationMode = 0

'Credentials
strUsername = "Administrator"
strPassword = "password"

'put computername into uppercase
strComputer = UCase(strComputer)

'Perform the operation on remote PC
Call OperationAction

Sub OperationAction
On Error GoTo 0
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer _
(strComputer, "root\cimv2", strUsername, strPassword)
objSWbemServices.Security_.ImpersonationLevel = 3

'Call WMI query to collect parameters for reboot action
'Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//"_
'& strComputer & "/root/cimv2").ExecQuery("select * from Win32_OperatingSystem"_
'& " where Primary=true")

Set OpSysSet = objSWbemServices.ExecQuery("select * from Win32_OperatingSystem"_
& " where Primary=true")

Dim OpSysSet, OpSys

'Set PC to reboot
If OperationMode = 0 Then
For each OpSys in OpSysSet
opSys.Reboot()
Next

'Set PC to logoff
ElseIf OperationMode = 1 Then

Const EWX_LOGOFF = 0
For each OpSys in OpSysSet
opSys.win32shutdown EWX_LOGOFF
Next

'Set PC to shutdown
ElseIf OperationMode = 2 Then
For each OpSys in OpSysSet
opSys.Shutdown()
Next

End If
End Sub
Автор: ComradG
Дата сообщения: 15.09.2010 14:17
cetael
Нужно добавить что-то вроде:

Код: WScript.Echo "Power failure. The computer will be automaticaly _
shutting down after 3 min. Please save your work"
WScript.Sleep время в миллисекундах
Автор: cetael
Дата сообщения: 15.09.2010 14:37
ComradG

Цитата:


Например можно так, но предупреждения не отобразится на мониторе пользователя, а наоборот отобразится на мониторе сервера. А требуется что именно пользователь был предупрежден. Ест варианты?. Заранее спасибо всем.
----------------------------------------------------

Dim strComputer, OperationMode, strUsername, strPassword

'Remote computername or IP
strComputer="172.5.5.155"

'Specify the OperationMode (0 = Restart, 1 = Logoff, 2 = Shutdown)
OperationMode = 2

'Credentials
strUsername = "Administrator"
strPassword = "password"

'put computername into uppercase
strComputer = UCase(strComputer)

'Perform the operation on remote PC
Call OperationAction

Sub OperationAction
On Error GoTo 0
Set objSWbemLocator = CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServices = objSWbemLocator.ConnectServer _
(strComputer, "root\cimv2", strUsername, strPassword)
objSWbemServices.Security_.ImpersonationLevel = 3

'Call WMI query to collect parameters for reboot action
'Set OpSysSet = GetObject("winmgmts:{(Shutdown)}//"_
'& strComputer & "/root/cimv2").ExecQuery("select * from Win32_OperatingSystem"_
'& " where Primary=true")

Set OpSysSet = objSWbemServices.ExecQuery("select * from Win32_OperatingSystem"_
& " where Primary=true")

Dim OpSysSet, OpSys

'Set PC to reboot
If OperationMode = 0 Then
For each OpSys in OpSysSet
opSys.Reboot()
Next

'Set PC to logoff
ElseIf OperationMode = 1 Then

Const EWX_LOGOFF = 0
For each OpSys in OpSysSet
opSys.win32shutdown EWX_LOGOFF
Next

'Set PC to shutdown
ElseIf OperationMode = 2 Then
For each OpSys in OpSysSet
WScript.Echo("Power failure. The computer will be automatically shutting down after 3 min. Please save your work.")
WScript.Sleep(180000)
opSys.Shutdown()
Next

End If
End Sub

Автор: ComradG
Дата сообщения: 15.09.2010 14:41
cetael
Попробуй вместо WScript.Echo использовать MsgBox.
Автор: cetael
Дата сообщения: 15.09.2010 14:47

Цитата:
ComradG



Цитата:
cetael
Попробуй вместо WScript.Echo использовать MsgBox.


Тоже самое. Уже попробовал. Не получается. Предупреждения только на сервере отобразится.
Автор: rusik_gluk
Дата сообщения: 16.09.2010 14:54
Помогите с парсингом тесктового файла. Имеется скрипт, который читает текстовый файл с тремя столбцами (разделитель ";") и что-то делает. Нужно переделать на четыре столбца. Помогите, плс, понять принцип. Часть скрипта чтения файла в листинге:


Код:
str = filetxt.ReadLine()
ipphone = ( mid ( str , 1 , InStr(str,";")-1) )
department = ( mid ( str , InStr(str,";") + 1 , InStr(InStr(str,";")+1,str,";") - InStr(str,";") -1 ) )
title = ( mid ( str , InStr(InStr(str,";")+1,str,";") +1 , len(str) - InStr(InStr(str,";"),str,";" ) -1 ) )
Автор: AndVGri
Дата сообщения: 17.09.2010 02:17
rusik_gluk
Dim subStr, i, vLast
subStr = Split(str, ";")
vLast = UBound(subStr)
For i = 0 To vLast
WScript.Echo(subStr(i))
Next
Автор: rusik_gluk
Дата сообщения: 17.09.2010 10:11
Спасибо, AndVGri
Как я понял, указанный код читает файл по разделителю. А это не совсем то что мне нужно. У меня четыре переменные (было три: ipphone, department и title), которым присваиваются значения прочитанного.

Добавлено:
Решил задачу таким вот образом:

Код:
Dim separator
separator = ";"
Dim separator_1
Dim separator_2
Dim separator_3

str = filetxt.ReadLine()
separator_1 = InStr(str,separator)
separator_2 = InStr(separator_1 + 1, str, separator)
separator_3 = InStr(separator_2 + 1, str, separator)

ipphone = mid(str, 1 ,separator_1-1)
department = mid(str, separator_1+1 , separator_2 - separator_1 - 1)
title = mid(str, separator_2+1 , separator_3 - separator_2 - 1)
other = mid(str, separator_3+1 , len(str) - separator_3 - 1 )
Автор: krasoff
Дата сообщения: 18.09.2010 11:51
господа, подскажите пожалуйста.
имеется код

Код:

Call Crt_Xcl
xlSheet2.Name = date1

Public Sub Crt_Xcl
Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlBook1 = xlApp.Workbooks.Open(source)
Set xlSheet1 = xlBook1.Worksheets("Sheet1")
xlSheet1.Copy, xlSheet1
Set xlSheet2 = xlBook1.Worksheets("Sheet1 (2)")
End Sub
Автор: bomzzz
Дата сообщения: 18.09.2010 12:00
отказаться от подпрограммы, которая в данном случае очевидно используется для лучшей читабельности кода в ущерб быстродействия. и в ключить эту часть кода в основную программу

Добавлено:
кстати кажется можно объявить переменные глобальными
Автор: AndVGri
Дата сообщения: 18.09.2010 12:22
rusik_gluk
Я привёл пример

subStr = Split(str, ";")
vLast = UBound(subStr)
If vLast > 2 Then
pphone = subStr(0)
department = subStr(1)
title = subStr(2)
other = subStr(3)
End If
Автор: krasoff
Дата сообщения: 19.09.2010 16:23

Цитата:
Добавлено:
кстати кажется можно объявить переменные глобальными

о! точно. объявил через Dim в начале кода и все поехало!
Спасибо bomzzz
Автор: BumerangII
Дата сообщения: 22.09.2010 13:11
Добрый день,

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

вот
Код: Option Explicit
Dim userVar, compVar, WshShell, WshSysEnv, Value
set WshShell = WScript.CreateObject("WScript.Shell")
Set WshSysEnv = WshShell.Environment("process")
userVar=WshShell.ExpandEnvironmentStrings("%USERNAME%")
compVar=WshShell.ExpandEnvironmentStrings("%COMPUTERNAME%")


if userVar="test" then

dim oShell
set oShell= Wscript.CreateObject("WScript.Shell")
oShell.Run "runas /noprofile /user:%COMPUTERNAME%\administrator ""reg.exe"" add ""HKLM\SOFTWARE\KN3"" \/v DefaultUserName \/t REG_SZ \/d admin \/f"""""
WScript.Sleep 100
oShell.Sendkeys "localadmin~"

Else
MsgBox compVar

End If

Wscript.Quit
Автор: ComradG
Дата сообщения: 22.09.2010 16:06
BumerangII
Дядь, а с чего ты взял, что из под гостя HKLM можно править?
Автор: BumerangII
Дата сообщения: 22.09.2010 16:28
ComradG
так я и хочу запустить с правами администратора и поправить
Автор: ComradG
Дата сообщения: 22.09.2010 16:42
BumerangII
А пароль админа-то вводишь?

Код: WSHShell.Run "runas.exe /user:%COMPUTERNAME%\USER /p:PASSWORD...
Автор: BumerangII
Дата сообщения: 22.09.2010 17:34
ComradG
runas не работает с ключем /p

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

Предыдущая тема: Работа в Delphi c CryptoApi


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.