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

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

Автор: megamozg13
Дата сообщения: 29.05.2007 15:40
strTXT = objHTM.ParentWindow.ClipboardData.GetData("text")
If strTXT <> "" Then WScript.Echo strTXT
Автор: AndVGri
Дата сообщения: 29.05.2007 16:05
megamozg13
И чем
Цитата:
WScript.Echo strTXT
отличается от
Цитата:
MsgBox strTXT

в плане отображения текстовой строки?
Автор: afandi
Дата сообщения: 29.05.2007 16:20

Цитата:
[/q]
[q]И чем
Цитата:
WScript.Echo strTXT
отличается от
Цитата:
MsgBox strTXT

в плане отображения текстовой строки?


Не знаю, но в какой то степени проблему решил так

Set ie=createobject("internetExplorer.application")
ie.navigate "about:blank"
ie.document.parentwindow.clipboardData.setData "Text", ""
.........
WshShell.SendKeys "^{INSERT}" '
strTXT = ie.document.parentwindow.clipboardData.getData("Text")
If strTXT <> "" Then MsgBox strTXT
Вот теперь текст копируется в буфер нормально и его можно записать в переменную strTXT
только к сожалению русский текст отбражается вот так "&#207;&#238;&#241;&#242;&#240;&#238;&#229;&#237;&#232;&#229; &#241;&#235;&#238;&#226;&#224;&#240;&#229;&#233; &#231;&#224;&#226;&#229;&#240;&#248;&#229;&#237;&#238; &#243;&#241;&#239;&#229;&#248;&#237;&#238;!" а не как положено, как решить сию проблему?


Добавлено:
что то текст с диактрическими символамы запостился с с кодами
На этой странице есть полное описание как работать с буфером
http://www.potolook.ru/blog/p,213/

Добавлено:
Все это конечно хорошо,
а как будет работать скрипт который запускаемы по расписанию на заблокированной (ctrl+alt+del) машине при использованию методов WshShell.SendKeys ?
Автор: ViSiToR
Дата сообщения: 05.06.2007 03:18
Функция IniRead - Позволяет читать из типичного Ini-файла данные, основываясь на имени файла, имени секции, и ключа:



Код: Function IniRead(IniFile, SectionName, Key, Default)
    Dim fso, hFile, Line, SplitArr
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FileExists(IniFile) Then
        IniRead = -1
        Exit Function
    End If

    Set hFile = fso.OpenTextFile(IniFile, 1, False)
    
    Do While hFile.AtEndOfStream <> True
        Line = hFile.ReadLine
        If StrComp("[" & SectionName & "]", Line, 1) = 0 Then
            While hFile.AtEndOfStream <> True
                Line = hFile.ReadLine
                SplitPos = InStr(Line, "=")-1
                If InStr(Line, "=") <> 0 Then
                    StrToComp = Left(Line, SplitPos)
                Else
                    StrToComp = Line
                End If
                If StrComp(StrToComp, Key, 1) = 0 And InStr(Line, "=") > 0 Then
                    SplitArr = Split(Line, "=")
                    CommentPos = InStr(SplitArr(1), ";")-1
                    If InStr(SplitArr(1), ";") <> 0 Then
                        IniRead = Left(SplitArr(1), CommentPos)
                    Else
                        IniRead = SplitArr(1)
                    End If
                    hFile.Close
                    Exit Function
                End If
            Wend
            IniRead = Default
            hFile.Close
            Exit Function
        End If
    Loop
    hFile.Close
    IniRead = Default
End Function
Автор: Rush
Дата сообщения: 05.06.2007 18:34
ViSiToR
Интересная функция, но несколько перегруженная лишним балластом.
По-моему, можно несколько упростить ее. Примерно так:

Код: Function IniRead(IniFile, SectionName, Key, Default)
Dim fso, hFile, Line, SplitArr, Value
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FileExists(IniFile) Then
IniRead = -1
Exit Function
End If
Set hFile = fso.OpenTextFile(IniFile, 1, False)
Do While Not (StrComp("[" & SectionName & "]", Line, 1) = 0 Or hFile.AtEndOfStream)
Line = Trim(hFile.ReadLine)
Loop
Do While Not hFile.AtEndOfStream
Line = Trim(hFile.ReadLine)
If Line <> Empty Then SplitArr = Split(Line, "=")
If (StrComp(SplitArr(0), Key, 1) = 0 And InStr(Line, "=") > 0) Or (InStr(Line, "[") = 1 And InStr(Line, "]") = Len(Line)) Then Exit Do
Loop
If hFile.AtEndOfStream Or (InStr(Line, "[") = 1 And InStr(Line, "]") = Len(Line)) Then
IniRead = Default
Else
Value = Split(SplitArr(1), ";")
IniRead = Value(0)
End If
hFile.Close
End Function
Автор: ViSiToR
Дата сообщения: 05.06.2007 22:27
Rush

Цитата:
По-моему, можно несколько упростить ее

Я знаю, спсаибо, но следует учитвать, что функции на VBS я пишу далеко не каждый день , а вообще то это моя первая построенная функция на более или менее серъёзном (для меня) уровне.

Просто была необходимость (хотя это был скорее интерес) сделать подобную функцию, и на моё же удивление, у меня получилось (покапавшись в справочнике по VBS).
Автор: Zver1978
Дата сообщения: 06.06.2007 09:53
Господа помогите плиз, есть сервак на нем создана гора папок с разными правами доступа и с разнымми группами юзеров, никто не знает какая папка к какой группе предназначена, попытался я скрипт написать,чтобы посмотреть какая папка к какой группе относится и какие права доступа и перенести полученную инфу в Эксель, но что то не выходит каменный цветок может кто заморачивался такой вещью! есть хоть какое-то подобие скрипта?
Автор: distance
Дата сообщения: 06.06.2007 10:07
кстати по поводу ini-файлов.
пользуюсь такой:

Код: String.prototype.trim = function() { return( this.replace(/^\s*/,"").replace( /\s*$/,"") ); }

Object.prototype.fromIni = function(iniFile)
{
    var reSection = /\s*\[([_\w\d]+)\]/;
    var reVariable = /\s*(.+?)\s*=\s*(.*?)(;|\\|$)/;
    var reComment = /^\s*(;|\\|$)/;
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var fp = fso.OpenTextFile(iniFile);
    var section = this;
    while (!fp.AtEndOfStream)
    {
        var arr;
        var buf = fp.ReadLine();
        // if comment?
        if (reComment.test(buf))
            continue;
        // if section?
        if ((arr = reSection.exec(buf)) != null)
        {
            this[arr[1]] = section = {};
        }
        // if variable?
        if ((arr = reVariable.exec(buf)) != null)
        {
            section[arr[1]] = arr[2].trim();
        }
    }
    fp.Close();
}
Автор: ViSiToR
Дата сообщения: 06.06.2007 10:17
distance

Цитата:
пользуюсь такой:

Если не ошибаюсь, это код JScript, синтаксис немного другой, и имя топика тоже немного другое подразумивает

Но думаю если по теме, то вариация на мою функцию от Rush самая удачная .
Автор: distance
Дата сообщения: 06.06.2007 10:55
ViSiToR

Цитата:
и имя топика тоже немного другое подразумивает

это дискриминация
я например с синтаксисом vbs полохо знаком, а на jscript удобняшки пишутся ничуть не хуже. думаю, тему стоило бы назвать что-то вроде "... с использованием Windows Script Host"
Автор: ViSiToR
Дата сообщения: 06.06.2007 11:07
distance

Цитата:
я например с синтаксисом vbs полохо знаком, а на jscript удобняшки пишутся ничуть не хуже

Я не сомневаюсь (на счёт последнего)...


Цитата:
тему стоило бы назвать что-то вроде "... с использованием Windows Script Host"


Имхо, путаницца получится.
Тогда уже лучше тему создать паралельную, с названием Программирование "удобняшек" на JScript
Автор: mozers
Дата сообщения: 06.06.2007 14:14
distance ViSiToR
Не могу удержаться:
Все, что приведено в этой теме - это WSH скрипты. На VBS или JS они написаны - совершенно не важно!
А если я выложу wsf скрипт в котором половина - на VBS, а половина на JS написана - мне новую тему создавать что ли???
Самое правильное было бы - изменить заголовок темы и сделать, наконец, шапку.
Автор: Sk1f
Дата сообщения: 07.06.2007 15:39
2Zver1978

Цитата:
Смотри информацию на microsofte о утилитах Ldifde,csvde и скрипт xcacls.vbs

Автор: bahoAKM
Дата сообщения: 28.06.2007 13:21
Можно ли VBS выводить окно типа прогресс
Автор: blackmanos
Дата сообщения: 01.07.2007 20:37
Народ всем привет у меня вопрос такой, есть веб страница на ней есть две кнопки обе type submit по полю name одинаковый отличаются только по value как можно выполнить submit нужной кнопки, а то на JS есть а вот как на VBS не знаю может кто подскажет??? Буду очень благодарен!!!
Автор: garniv
Дата сообщения: 06.07.2007 21:35
Существует ли возможность в VBS-скрипте запустить exe'шник и приостановить выполнение скрипта до того момента, когда это приложение будет закрыто?
Как я понимаю, мне нужен какой-то аналог команды CALL из *.bat .
Автор: ViSiToR
Дата сообщения: 06.07.2007 21:42
garniv

Цитата:
запустить exe'шник и приостановить выполнение скрипта до того момента, когда это приложение будет закрыто?


Можно так...


Код: Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("notepad.exe", 1, True)
Автор: GavLeXx
Дата сообщения: 12.07.2007 00:21
А кто-нибудь может подсказать, как можно в *.vbs использовать функции WinAPI ? Хочу, например, получить дескриптор активного окна, а как это сделать через GetForegroundWindow() ?
Автор: Female
Дата сообщения: 12.07.2007 08:00
Всем привет!
Скажите как обратиться к Моему компьютеру. Например, я хочу его переименовать.
Я нашла пример, там есть непонятная вещь: &H11&.
Автор: mozers
Дата сообщения: 13.07.2007 19:09
GavLeXx
Попробуй dynwrap.dll

Female
А что, найденный пример неработает?
Я думаю что если вам неизвестна шестнадцатеричная запись числа, то и многое другое будет непонятно...
Объект "Мой компьютер" я тоже не знаю...
Вообще, для решения простеньких задач я бы посоветовал использовать пакетные файлы.
Автор: Female
Дата сообщения: 14.07.2007 10:12
mozers
я прекрасно знаю шестнадцатеричную сс и многое другое тоже. )))
пример рабочий, просто для полного счастья мне надо каждую строку скрипта понять...
в общем там объявляется константа Const MY_COMPUTER = &H11&, и происходит следующее:
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(MY_COMPUTER)
Дальше просто меняется значение Name у папки.
И я не могу понять, откуда взялось это &H11&.
Автор: mozers
Дата сообщения: 14.07.2007 12:18
Female
Если честно, то я сам не понимаю причину появления & в конце числа &H11&

Почему каждой специальной папке назначено определенное числовое значение - это вопрос к Microsoft, поскольку "Shell.Application" - это explorer и тот кто заменил оболочку Windows на что то эстравагантное, данный пример работать не будет.

Сляпал маленький примерчик - думаю поможет разобраться с механизмом получения имен спец-папок:
SpecialFolders.vbs
Код: [no]' Выводит список всех специальных папок, существующих на Вашем компьютере[/no]
Set objShellApp = CreateObject([no]"Shell.Application"[/no])
On Error Resume Next
For i=0 to 256
Set objFolder = objShellApp.NameSpace(i)
WScript.Echo [no]"Title: "[/no] & objFolder.Title & vbNewLine & _
[no]"HEX: &H"[/no] & Hex(i) & vbNewLine & _
[no]"Path: "[/no] & objFolder.Self.Path & vbNewLine
Next
Автор: Elroir
Дата сообщения: 14.07.2007 12:45
Female
0x11h - это просто константа обозначающая объект My Computer.
Список констант можно посмотреть здесь - http://msdn2.microsoft.com/en-us/library/ms630424.aspx

Добавлено:
mozers
Не увидел, что ты уже ответил - страничку надо было обновить
Автор: Female
Дата сообщения: 14.07.2007 13:14
Elroir
mozers
Спасибо, ребята!
Я на самом деле только начала изучать VBScript и совсем мало в нем понимаю...
Можно задать ОЧЕНЬ глупый вопрос? )
Чем Visual Basic Script отличается от Visual Basic?

mozers
тебе отдельное спасибо! не лень же было столько писать! )))
Автор: mozers
Дата сообщения: 14.07.2007 16:08
Female
Перечисление отличий VBS от Visual Basic заняло бы целую странцу, поэтому лучше отвечу чем они похожи:
Синтаксис в большинстве случаев совпадает 1:1 и,.. пожалуй, все...
Все таки о главном отличии - скажу: VBS (как и JS) - скриптовые языки. Т.е. для создания рабочей программы не нужны навороченные средства разработки, линковщики и компиляторы.
Т.е. программа - это не закрытый для правки exe-файл, а открытый код, который любой может быстренько подправить "под себя".
Учитывая, что интерпритатор WSH мы получаем бесплатно с установкой Винды, то лучшего средства для создания простеньких программ прямо "на коленке" сложно представить
Автор: Female
Дата сообщения: 15.07.2007 03:16
mozers
ясно...
Автор: fl1pp3r
Дата сообщения: 05.08.2007 15:10
Есть такой скрипт копирования:

Код: InitialFolder = "C:\Documents and Settings\fl1pp3r\Desktop\" '
TargetFolder = "C:\test\"
ControlDate = CDate("01.08.2008")
'====================================================================
On Error Resume Next
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShellApp = CreateObject("Shell.Application")
LogPath = objFSO.GetParentFolderName(WScript.ScriptFullName)
Set LogStream = objFSO.OpenTextFile(LogPath & "\CopyLog.log", 8, True)
LogStream.WriteLine "Начало копирования " & Now()

CopyFiles InitialFolder
LogStream.WriteLine "Конец копирования: " & Now()
LogStream.Close

'
Sub CopyFiles(FolderPath)
On Error Resume Next
Set objFolderItems = objShellApp.NameSpace(FolderPath).Items()
For Each objFolderItem In objFolderItems
If objFolderItem.IsFolder And LCase(Right(objFolderItem.Name, 4)) <> ".zip" Then
CopyFiles objFolderItem.Path
Else
Set objFile = objFSO.GetFile(objFolderItem.Path)
If objFile.DateCreated < ControlDate Then
CopyFile objFolderItem.Path
End If
End If
Next
End Sub

'
Sub CopyFile(FilePath)
On Error Resume Next
SubPath = Mid(FilePath, Len(InitialFolder) + 1)
TargetPath = TargetFolder & SubPath
FolderPath = objFSO.GetParentFolderName(TargetPath)
If Not objFSO.FolderExists(FolderPath) Then
CreateFolder FolderPath
End If
'
If objFSO.FileExists(TargetPath) Then
Set objFile = objFSO.GetFile(TargetPath)
If objFile.Attributes And 1 Then
objFile.Attributes = objFile.Attributes - 1
End If
End If
objFSO.CopyFile FilePath, TargetPath, True
If Err.Number <> 0 Then
LogStream.WriteLine
LogStream.WriteLine FilePath
LogStream.WriteLine Err.Description
LogStream.WriteLine
Err.Clear
Else
LogStream.WriteLine TargetPath
End If
End Sub

Sub CreateFolder (FolderPath)
On Error Resume Next
ParentFolder = objFSO.GetParentFolderName(FolderPath)
If Not objFSO.FolderExists(ParentFolder) Then
CreateFolder ParentFolder
End If
objFSO.CreateFolder FolderPath
End Sub
Автор: fl1pp3r
Дата сообщения: 05.08.2007 18:18
Другими словами как написать %USERPROFILE% в vbscript?

Добавлено:
Нашел немного другой скрипт копирования, в нем все нормально работает:


Код: set fso=createobject("scripting.filesystemobject")
set WshShell = WScript.CreateObject("WScript.Shell")
fso.copyfolder WshShell.ExpandEnvironmentStrings("%USERPROFILE%") +"\Application Data\Desktop\", "D:\Путь к папке получателя"
Автор: tigranchik
Дата сообщения: 15.08.2007 16:26
Профессионалы, помогите пожалуйста дилетанту. Мне нужно перехватывать любое посылание на печать,
из Word, Adobe, IE.....
выбрасывать сообщение и после ОК предлагать выбрать принтер
Это очень сложно на написать на VB или VBscript?
Автор: Sun Ray
Дата сообщения: 19.08.2007 10:07
Подскажите по скриптам...
1) Нужно в раздел "Безопасность" каждого принтера добавить группу "Операторы печати" и дать доступ на управление прнтерами(полный доступ, этой группе).

2) Как можно добавлять компьютеры в домен(обычным способом), но при этом помещать их не только в группу "Компьютеры домена", но ещё в одну, к примеру "Рабочие станции", но при условии что в группу "Рабочие станции" будут заноситься комны введенные в домен под определенными пользователями. Или в определенные ОЮ, но так же в зависимости от юзера которы они вводятся в домен.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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