Форум программистов, компьютерный форум, киберфорум
Наши страницы

Visual Basic .NET

Войти
Регистрация
Восстановить пароль
 
 
diller
Заблокирован
#1

Получение данных от выполняющегося VBS-скрипта - Visual Basic .NET

05.07.2015, 22:33. Просмотров 1202. Ответов 28
Метки нет (Все метки)

Здрасте, как передать данные полученные из vbs в windows form?
Или можно как в проекте указать запуск файла и передача данных в форму.

Заранее благодарен за ответ!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2015, 22:33
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Получение данных от выполняющегося VBS-скрипта (Visual Basic .NET):

Создание EXE из VBS скрипта - Visual Basic .NET
Всем добрый день! У меня есть скрипт который запускает EXCEL книгу со включенными макросами. Скрипт у меня в формате .vbs. Поставил себе...

Получение результата php-скрипта в строку - Visual Basic .NET
Привет всем. Пусть есть скрипт на сервере. Этому скрипту необходимо передать строковый параметр из моего приложения. Скрипт выводит...

Получение данных из cmd и vbs скриптов - C#
Здравствуйте! Подскажите как передать в программу то что вывел cmd или vbs скрипт, или хотя бы передать в файл

Передача данных в скрипт и получение данных из скрипта - jQuery
Здравствуйте! Мучаюсь с задачей уже 4й день, в силу незнанания/плохого знания jQuery. Читаю, пробую и даже уже начинаю немного...

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

Вставка данных буфера обмена в Excel из макроса, выполняющегося в Word - VBA
Мне нужно очень срочно сделать передачу данных из Word'а в Excel, мне казалось самым простым будет использовать буфер, но если можно не...

28
diadiavova
2835 / 1200 / 336
Регистрация: 11.04.2015
Сообщений: 2,247
Записей в блоге: 32
05.07.2015, 22:45 #2
Зависит от того, куда направляются полученные в скрипте данные. Если в StdOut, то все стандартно: запускаешь через wscript и перехватываешь выходной поток. В ином случае требуются дополнительные пояснения, что ты имеешь в виду, говоря о данных, полученных из vbs.
0
diller
Заблокирован
05.07.2015, 23:10  [ТС] #3
Visual Basic
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
Set WshShell = CreateObject("WScript.Shell")
regKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
DigitalProductId = WshShell.RegRead(regKey & "DigitalProductId")
 
 
Win8ProductKey = ConvertToKey(DigitalProductId)
 
 
 
MsgBox(Win8ProductKey)
 
Function ConvertToKey(regKey)
    Const KeyOffset = 52
    isWin8 = (regKey(66) \ 6) And 1
    regKey(66) = (regKey(66) And &HF7) Or ((isWin8 And 2) * 4)
    j = 24
    Chars = "BCDFGHJKMPQRTVWXY2346789"
    Do
        Cur = 0
        y = 14
        Do
            Cur = Cur * 256
            Cur = regKey(y + KeyOffset) + Cur
            regKey(y + KeyOffset) = (Cur \ 24)
            Cur = Cur Mod 24
            y = y -1
        Loop While y >= 0
        j = j -1
        winKeyOutput = Mid(Chars, Cur + 1, 1) & winKeyOutput
        Last = Cur
    Loop While j >= 0
    If (isWin8 = 1) Then
        keypart1 = Mid(winKeyOutput, 2, Last)
        insert = "N"
        winKeyOutput = Replace(winKeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
        If Last = 0 Then winKeyOutput = insert & winKeyOutput
    End If
    a = Mid(winKeyOutput, 1, 5)
    b = Mid(winKeyOutput, 6, 5)
    c = Mid(winKeyOutput, 11, 5)
    d = Mid(winKeyOutput, 16, 5)
    e = Mid(winKeyOutput, 21, 5)
    ConvertToKey = a & "-" & b & "-" & c & "-" & d & "-" & e
End Function
0
diadiavova
2835 / 1200 / 336
Регистрация: 11.04.2015
Сообщений: 2,247
Записей в блоге: 32
05.07.2015, 23:38 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вывод с помощью мессаджбокс надо заменить на запись в стдаут
Visual Basic
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
Set WshShell = CreateObject("WScript.Shell")
regKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
DigitalProductId = WshShell.RegRead(regKey & "DigitalProductId")
 
 
Win8ProductKey = ConvertToKey(DigitalProductId)
 
 
 
WScript.StdOut.Write Win8ProductKey
 
Function ConvertToKey(regKey)
    Const KeyOffset = 52
    isWin8 = (regKey(66) \ 6) And 1
    regKey(66) = (regKey(66) And &HF7) Or ((isWin8 And 2) * 4)
    j = 24
    Chars = "BCDFGHJKMPQRTVWXY2346789"
    Do
        Cur = 0
        y = 14
        Do
            Cur = Cur * 256
            Cur = regKey(y + KeyOffset) + Cur
            regKey(y + KeyOffset) = (Cur \ 24)
            Cur = Cur Mod 24
            y = y -1
        Loop While y >= 0
        j = j -1
        winKeyOutput = Mid(Chars, Cur + 1, 1) & winKeyOutput
        Last = Cur
    Loop While j >= 0
    If (isWin8 = 1) Then
        keypart1 = Mid(winKeyOutput, 2, Last)
        insert = "N"
        winKeyOutput = Replace(winKeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
        If Last = 0 Then winKeyOutput = insert & winKeyOutput
    End If
    a = Mid(winKeyOutput, 1, 5)
    b = Mid(winKeyOutput, 6, 5)
    c = Mid(winKeyOutput, 11, 5)
    d = Mid(winKeyOutput, 16, 5)
    e = Mid(winKeyOutput, 21, 5)
    ConvertToKey = a & "-" & b & "-" & c & "-" & d & "-" & e
End Function
Из программы на вбнет вызывается это так
vb.net
1
2
3
4
5
6
7
8
9
10
11
        Dim psi As New ProcessStartInfo
        With psi
            .FileName = "wscript"
            .Arguments = """C:\pathToScript\script.vbs""" ' Здесь реальный адрес скрипта
            .RedirectStandardOutput = True
            .CreateNoWindow = True
            .UseShellExecute = False
        End With
        Dim proc = Process.Start(psi)
 
        Console.WriteLine(proc.StandardOutput.ReadToEnd)
Добавлено через 1 минуту
Хотя получить данные из реестра можно и напрямую из программы. Так что непонятно зачем вообще все эти сложности.
3
diller
Заблокирован
06.07.2015, 08:14  [ТС] #5
дело все в том что не получается преобразовать этот vbs в vb.net :-(
0
diller
Заблокирован
06.07.2015, 08:29  [ТС] #6
Ошибочка :-(
0
Миниатюры
Получение данных от выполняющегося VBS-скрипта  
diadiavova
2835 / 1200 / 336
Регистрация: 11.04.2015
Сообщений: 2,247
Записей в блоге: 32
06.07.2015, 08:49 #7
Цитата Сообщение от diller Посмотреть сообщение
дело все в том что не получается преобразовать этот vbs в vb.net :-(
Потом посмотрю, что можно сделать.
Цитата Сообщение от diller Посмотреть сообщение
Ошибочка :-(
Вероятно проблема с правами доступа. У меня все показало, но я на семерке пробовал. Попробуй запустить программу с правами администратора. Но если у тебя доступа нет при запуске скрипта с правами администратора, то его не будет и при программном запуске.
0
diller
Заблокирован
06.07.2015, 09:45  [ТС] #8
если я запускаю его сам с рабочего стола то все нормально, если запускаю с тотала, то ошибка!
Ошибка так появляется если запускаю с правами админа
0
diadiavova
2835 / 1200 / 336
Регистрация: 11.04.2015
Сообщений: 2,247
Записей в блоге: 32
06.07.2015, 10:09 #9
diller, по поводу прав ничего сказать не могу, поскольку у меня работает и на семерке и на восьмерке и вопросов никаких не возникает. Что до переноса кода на VB.Net, то он там практически не меняется, по крайней мере функция.
vb.net
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
Option Explicit Off
Imports Microsoft.Win32
Module VbsImp
 
    Public Sub ExtractKey()
        Dim rk = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\")
        Dim kv = rk.GetValue("DigitalProductId")
        Console.WriteLine(ConvertToKey(kv))
    End Sub
 
    Function ConvertToKey(regKey)
        Const KeyOffset = 52
        isWin8 = (regKey(66) \ 6) And 1
        regKey(66) = (regKey(66) And &HF7) Or ((isWin8 And 2) * 4)
        j = 24
        Chars = "BCDFGHJKMPQRTVWXY2346789"
        Do
            Cur = 0
            y = 14
            Do
                Cur = Cur * 256
                Cur = regKey(y + KeyOffset) + Cur
                regKey(y + KeyOffset) = (Cur \ 24)
                Cur = Cur Mod 24
                y = y - 1
            Loop While y >= 0
            j = j - 1
            winKeyOutput = Mid(Chars, Cur + 1, 1) & winKeyOutput
            Last = Cur
        Loop While j >= 0
        If (isWin8 = 1) Then
            keypart1 = Mid(winKeyOutput, 2, Last)
            insert = "N"
            winKeyOutput = Replace(winKeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
            If Last = 0 Then winKeyOutput = insert & winKeyOutput
        End If
        a = Mid(winKeyOutput, 1, 5)
        b = Mid(winKeyOutput, 6, 5)
        c = Mid(winKeyOutput, 11, 5)
        d = Mid(winKeyOutput, 16, 5)
        e = Mid(winKeyOutput, 21, 5)
        ConvertToKey = a & "-" & b & "-" & c & "-" & d & "-" & e
    End Function
 
End Module
0
diller
Заблокирован
06.07.2015, 10:27  [ТС] #10
Как я понял.
Создаю модуль, вставляю код, указываю вместо
vb.net
1
Console.WriteLine(ConvertToKey(kv))
Вывод в textbox ( т.к. у меня почему не появляется консоль :-( )
vb.net
1
Form1.TextBox20.Text = ConvertToKey(kv)
И не чего не вставляется :-(
0
diadiavova
2835 / 1200 / 336
Регистрация: 11.04.2015
Сообщений: 2,247
Записей в блоге: 32
06.07.2015, 10:29 #11
Цитата Сообщение от diller Посмотреть сообщение
И не чего не вставляется :-(
Ну естественно, что ж ты у саба пытаешься значение получить?
vb.net
1
2
3
4
5
    Public Function ExtractKey()
        Dim rk = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\")
        Dim kv = rk.GetValue("DigitalProductId")
        Return ConvertToKey(kv)
    End Function
Вот так перепиши этот метод и можешь вызывать.
0
diller
Заблокирован
06.07.2015, 10:54  [ТС] #12
Пусто. :-(
0
Миниатюры
Получение данных от выполняющегося VBS-скрипта  
edward_freedom
1542 / 1421 / 261
Регистрация: 01.10.2011
Сообщений: 2,549
06.07.2015, 10:56 #13
diller, После Return, за ним идущий код не выполняется
И у тебя вызов странный. В форме вызови саму функцию, а не из функции присваивай значение в текстбокс
0
diadiavova
2835 / 1200 / 336
Регистрация: 11.04.2015
Сообщений: 2,247
Записей в блоге: 32
06.07.2015, 10:59 #14
diller, блин, что ты творишь? Зачем ты ставишь присвоение текстовому полю значение после ретурна? Ретурн - последний оператор функции, после него ничего не происходит. Ты хотел присвоить текстбоксу значение, возвращаемое функцией - я тебе показал, как надо переписать функцию, для того, чтобы это было возможно. А ты что делаешь?

Добавлено через 1 минуту
Опиши функцию, как я показал без изменений, а присваивание выполняй в другом месте
vb.net
1
Form1.TextBox20.Text = ExtractKey()
0
diller
Заблокирован
06.07.2015, 11:07  [ТС] #15
Вставил и опять пусто.
0
Миниатюры
Получение данных от выполняющегося VBS-скрипта  
06.07.2015, 11:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2015, 11:07
Привет! Вот еще темы с ответами:

Запуск Vbs скрипта - VBA
Добрый день, есть код на VBA, который берет из заданной директории надстройку для (.xlam) и устанавливает ее(автоматически, вместо юзера...

Запуск скрипта VBS - VBA
Здравствуйте. Нужно запустить vbs скрипт из word. Можете написать полный макрос на VB для запуска vbs скрипта?

Запуск VBS-скрипта из батника - CMD/BAT
Не не не, я не совсем нуб =) В бат-файле несколько раз вызывается вбс-скрипт. Но что самое неприятное - каждый раз при его вызове через...

Запуск файла с vbs скрипта - VBScript/JScript
Как запустить какой-либо файл с vbs скрипта? Прописал путь таким образом но не всегда он срабатывает set...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru