Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
diller
Заблокирован
1

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

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

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

Заранее благодарен за ответ!
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2015, 22:33
Ответы с готовыми решениями:

Создание EXE из VBS скрипта
Всем добрый день! У меня есть скрипт который запускает EXCEL книгу со...

Получение результата php-скрипта в строку
Привет всем. Пусть есть скрипт на сервере. Этому скрипту необходимо передать...

Получение данных из cmd и vbs скриптов
Здравствуйте! Подскажите как передать в программу то что вывел cmd или vbs...

Менять скорость передачи данных TCP/IP из скрипта? (VBS,WSH,BAT, PowerShall)
Hi guys and ladies ) Есть необходимость в написании следующего скрипта, ПО,...

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

28
diadiavova
3951 / 1381 / 428
Регистрация: 11.04.2015
Сообщений: 2,575
Записей в блоге: 35
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
3951 / 1381 / 428
Регистрация: 11.04.2015
Сообщений: 2,575
Записей в блоге: 35
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
3951 / 1381 / 428
Регистрация: 11.04.2015
Сообщений: 2,575
Записей в блоге: 35
06.07.2015, 08:49 7
Цитата Сообщение от diller Посмотреть сообщение
дело все в том что не получается преобразовать этот vbs в vb.net :-(
Потом посмотрю, что можно сделать.
Цитата Сообщение от diller Посмотреть сообщение
Ошибочка :-(
Вероятно проблема с правами доступа. У меня все показало, но я на семерке пробовал. Попробуй запустить программу с правами администратора. Но если у тебя доступа нет при запуске скрипта с правами администратора, то его не будет и при программном запуске.
0
diller
Заблокирован
06.07.2015, 09:45  [ТС] 8
если я запускаю его сам с рабочего стола то все нормально, если запускаю с тотала, то ошибка!
Ошибка так появляется если запускаю с правами админа
0
diadiavova
3951 / 1381 / 428
Регистрация: 11.04.2015
Сообщений: 2,575
Записей в блоге: 35
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
3951 / 1381 / 428
Регистрация: 11.04.2015
Сообщений: 2,575
Записей в блоге: 35
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
1555 / 1434 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
06.07.2015, 10:56 13
diller, После Return, за ним идущий код не выполняется
И у тебя вызов странный. В форме вызови саму функцию, а не из функции присваивай значение в текстбокс
0
diadiavova
3951 / 1381 / 428
Регистрация: 11.04.2015
Сообщений: 2,575
Записей в блоге: 35
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-скрипта  
diadiavova
3951 / 1381 / 428
Регистрация: 11.04.2015
Сообщений: 2,575
Записей в блоге: 35
06.07.2015, 11:12 16
В аттаче консольное приложение, которое у меня работает. Если у тебя работать не будет, тогда не знаю в чем дело, скорей всего с правами проблема.
0
Вложения
Тип файла: rar runvbs.rar (57.6 Кб, 9 просмотров)
diller
Заблокирован
06.07.2015, 11:18  [ТС] 17
Нет он то запустился, выдал то что нужно.
0
Миниатюры
Получение данных от выполняющегося VBS-скрипта  
diadiavova
3951 / 1381 / 428
Регистрация: 11.04.2015
Сообщений: 2,575
Записей в блоге: 35
06.07.2015, 11:20 18
Цитата Сообщение от diller Посмотреть сообщение
Нет он то запустился, выдал то что нужно.
Ну так посмотри в код, где ты ошибся и исправь у себя.
0
diller
Заблокирован
06.07.2015, 11:25  [ТС] 19
Это нормально что он так отображет(картинка)?

А так, создал новый проект.
Создал модуль, назвал так как у Вас
Вставил код
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 Function ExtractKey()
        Dim rk = Registry.LocalMachine.OpenSubKey("SOFTWARE\Microsoft\Windows NT\CurrentVersion\")
        Dim kv = rk.GetValue("DigitalProductId")
        ' Form1.TextBox1.Text = ConvertToKey(kv)
        Return ConvertToKey(kv)
    End Function
 
    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
В форме создал textbox1
в загрузке формы пишу
vb.net
1
2
3
4
5
6
Public Class Form1
 
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        TextBox1.Text = ExtractKey()
    End Sub
End Class
И результат нулевой
0
Миниатюры
Получение данных от выполняющегося VBS-скрипта  
diadiavova
3951 / 1381 / 428
Регистрация: 11.04.2015
Сообщений: 2,575
Записей в блоге: 35
06.07.2015, 11:30 20
Цитата Сообщение от diller Посмотреть сообщение
Это нормально что он так отображет(картинка)?
Это не страшно. Можно просто объявить все переменные и все будет в порядке, но я не стал этого делать, а просто скопировал код функции без изменения. Что до винформ-проекта, то можно было и выложить, конечно, ну да ладно, сейчас попробую сделать.
0
06.07.2015, 11:30
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2015, 11:30

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

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

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


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

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

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