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

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

Автор: mozers
Дата сообщения: 05.12.2007 17:34
Tipulatoid
Пробегала как то давно подобная темка на RSDN...
Консольный вариант меня как то не впечатлил, поэтому, использовав эту идею, сделал HTA приложение: http://mozers.net.ru/files/JSCalc.rar


Добавлено:
Вот, нашел таки этот скрипт, который послужил мне отправной точкой: [more]JScript interpretator.js
Код: WScript.Echo([no]"JScript interpretator"[/no]);
WScript.Echo([no]"====================="[/no]);
WScript.Echo([no]"(c)2000 O.Mihailik\n"[/no]);

WScript.Echo([no]"type 'exit()' to finish.\n\n"[/no]);


var FS=new ActiveXObject([no]"Scripting.FileSystemObject"[/no]);
var console=FS.OpenTextFile([no]"con"[/no]);
var Finish=false;
var command;
var Shell=new ActiveXObject([no]"Wscript.Shell"[/no]);
var Network=new ActiveXObject([no]"Wscript.Network"[/no]);

function JSstring(str)
{ str=String(str);
var result=[no]""[/no];
for( var i=0;
i<str.length;
i++ )
{ if( str.substr(i,1)==[no]"\n"[/no] )
{ result+=[no]"\\n"[/no];
i++;
};
else if( str.substr(i,1)==[no]"\r"[/no] )
result+=[no]"\\r"[/no];
else if( str.substr(i,1)==[no]">"[/no] )
result+=[no]"\\076"[/no];
else if( str.substr(i,1)==[no]"\""[/no] )
result+=[no]"\\\""[/no];
else if( str.substr(i,1)==[no]"\'"[/no] )
result+=[no]"\\'"[/no];
else
result+=str.substr(i,1);
};
return result;
};

function exit()
{ Finish=true;
};

while( !Finish )
{ var command=console.ReadLine();
while( command.substr(command.length-1)==[no]"_"[/no] )
{ command=command.substr(0,command.length-1);
command+=[no]"\n"[/no]+console.ReadLine();
};
var result;
try
{ with( WScript ) with( Math ) with ( Shell ) with ( Network ) with ( FS )
result=eval(command);

if( result!=null )
WScript.Echo([no]" ="[/no]+String(result));
WScript.Echo([no]" O.K.\n"[/no]);
}
catch(error)
{ WScript.Echo([no]" ERROR:\b"[/no]);
WScript.Echo([no]" "[/no]+error.description+[no]"\n"[/no]); };
};
Автор: Tipulatoid
Дата сообщения: 05.12.2007 21:38
mozers
Отличная штука. Однако я думаю проводить вычисления из батника, потому мне нужно было, чтоб умел работать в пакетном режиме тоже, а не только в интерактивном. Написал письмо автору той статьи, он мне прислал ссылку То, что нужно!
mozers
Спасибо Вам.
Автор: Tipulatoid
Дата сообщения: 06.12.2007 06:47
Возможен ли скрипт, автоматически помещающий сообщения на форум? Я веду деловую игру по Интернету и каждый период мой батник подготавливает текстовый файл с отчетами, интересными всем участникам ветки. Хотелось бы скрипт, который бы:

1. Открывал текстовый файл report.txt
2. Копировал его содержимое в буфер обмена
3. Закрывал файл.
4. Открывал в браузере (Opera) страницу форума для добавления сообщения.
5. Делал паузу до нажатия пробела, чтоб можно было подождать загрузки страницы.
6. Передавал активному окну браузера 22 нажатия клавиши "Tab", чтоб
появился курсор в поле для ввода сообщения.
6. Вставлял содержимое буфера обмена.
7. Передавал активному окну еще 7 нажатий "Tab"
8. Передавал нажатие пробела или Enter.

Возможно ли средствами VBS? Если нет, то какой инструмент сгодится? Если кто-нибудь возьмется написать, буду ОЧЕНЬ благодарен и вышлю в PM URL страницы, логин и пароль для тестов.
Автор: mozers
Дата сообщения: 06.12.2007 09:43
Tipulatoid
Цитата:
Возможно ли средствами VBS?
ДА.

Цитата:
Если нет, то какой инструмент сгодится?
AutoIt

Цитата:
Если кто-нибудь возьмется написать
Имхо тут - учатся писать. Если кому то (не мне) будет интересно поупражнятся ...
Автор: ViSiToR
Дата сообщения: 06.12.2007 10:19
Tipulatoid

Цитата:
какой инструмент сгодится?

Имхо, для Opera - самое оптимальное, это кнопка с Javascript-кодом + внешний скрипт (AutoIt, VBS, или любой другой умеющий работать с файлами и буфером обмена).

Если всё это сделать одним скриптом, то будет не очень надёжно, на AutoIt могу помочь написать, там ничего сложного
Автор: Tipulatoid
Дата сообщения: 06.12.2007 12:15
ViSiToR
Помогите, если не сложно. Насколько я понял, AutoIt скрипт можно скомпилировать в exe - файл и будет он работать без всякого доп. софта или библиотек. Правильно? Информацию о форуме скинул в PM.
Автор: ViSiToR
Дата сообщения: 06.12.2007 13:41
Tipulatoid

Цитата:
AutoIt скрипт можно скомпилировать в exe - файл и будет он работать без всякого доп. софта или библиотек. Правильно?


Верно... скрипт отправил в PM, если что можем обсуждать в теме по AutoIt, я если честно PM недолюбливаю, не очень удобно там (предпросмотра нет, и вообще, не чувствую там комфортности ).
Автор: gen4gen
Дата сообщения: 06.12.2007 19:20
ViSiToR, парой-тройкой постов выше я спрашивал о том, можно ли средствами VBS закрывать приложения (именно корректно закрывать, а не убивать). К сожалению, никто так и не ответил.

Возможно ли эту проблему решить средствами AutoIt? Пробовал поковырять сам, но ничего не получилось. Могу ли попросить Вас написать скрипт для AutoIt, если конечно он сгодится для этого?

Спасибо.
Автор: ViSiToR
Дата сообщения: 06.12.2007 20:07
gen4gen

Цитата:
Возможно ли эту проблему решить средствами AutoIt?

Да (если у приложения имеется окно/а), но не будем офтопить , возможно помогу в соответствующем топике (запостите туда вопрос).
Автор: Desytroyed
Дата сообщения: 07.12.2007 18:13
Привет.
Есть пример, написанный на WSH, как патчить бинарник. Мне надо тоже самое на VBS без использования сторонних библиотек.. Такое возможно?
Задача следующая. Есть 32 переменных (каждая из них HEX значение), их надо сохранить именно в бинарник. Что то типа
0000: 12 2A 4F FF 0A BA 12 34 54 5A 45 18 02 09 FB BB
0010: 34 34 55... и тд.
Автор: Smitis
Дата сообщения: 10.12.2007 20:46
Desytroyed

Цитата:
Есть пример, написанный на WSH, как патчить бинарник. Мне надо тоже самое на VBS без использования сторонних библиотек.. Такое возможно?

VBS это и есть WSH
Автор: Sun Ray
Дата сообщения: 11.12.2007 06:36
Как проверить шару на наличие?
Нужно проверить что шара существует, шара с доступом на чтение для всех. Следовательно можно юзать только гостевой вход в удаленную систему, но вот думаю как бы без wmi обойтись...
Автор: ripev
Дата сообщения: 14.12.2007 10:40
Господа, не могли бы вы подсказать?

Где мне найти или подскажите если не трудно скрипт который проверяя папку1 будет копировать в папку2 файлы созданные за последний день до момента запуска скрипта. Без графического интерфейса и оповещений.

Заранее благодарю.
Автор: megamozg13
Дата сообщения: 14.12.2007 10:55
ripev
помечу:
1) цэ яваскрипт.
2) возможно будет долго обрабатывать папки с большим кол-м файлов, особенно по сети...

Цитата:

var fso=new ActiveXObject("Scripting.FileSystemObject"); // Общий обьект ф. системы
var s_dir="C:\\Folder1"; // каталог, отправитель
var d_dir="C:\\Folder2"; // каталог, получатель

drv=fso.GetFolder(s_dir); // Открываем каталог
fc = new Enumerator(drv.Files); // Получаем файлы в каталоге
// Перебор всех файлов
for (; !fc.atEnd(); fc.moveNext())
{
s_file=fc.item();
c_file=fso.GetFile(s_file); //Открываем текущий файл
f_name=c_file.Name; //Имя файла
d_file=d_dir+f_name;
// копирование только новых
if (!fso.FileExists(d_file)) fso.CopyFile(s_file,d_file);
}


Автор: ripev
Дата сообщения: 14.12.2007 11:16
megamozg13
Вот что получилось



Выполняю в XP и Висте
Автор: megamozg13
Дата сообщения: 14.12.2007 11:19
ripev
во первых - "copy.js"
во вторых - в путях обязательно двойной бэкслеш "\\"
Автор: ripev
Дата сообщения: 14.12.2007 11:36
megamozg13

Я наверно придираюсь, но скрипт правильно отработал (положил файлы в c:\Folder2) толко после того как я заменил:

Код: var d_dir="C:\\Folder2"; // каталог, получатель
Автор: megamozg13
Дата сообщения: 14.12.2007 11:50
ripev
ну извиняй что не проверил, т.к. делал тебе вырезку куска кода...
Автор: ripev
Дата сообщения: 14.12.2007 12:02
megamozg13
Все отлично. Просто я не волоку в этом ни%рена. Попробовал путем подбора. Тем более помогло то, что ты указал на обязательное использование двойных слешей - \\
Автор: alur2005
Дата сообщения: 15.12.2007 11:30
Вот скрипт ,Подскажите как файл 1.txt скопировать на рабочий стол.

Const OverwriteExisting = TRUE
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.CopyFile "C:\111\1.txt" , "D:\", OverwriteExisting
Автор: megamozg13
Дата сообщения: 15.12.2007 11:43
alur2005

цепляй через перменные из "set", например в яваскрипт:

Цитата:
user=Shell.ExpandEnvironmentStrings("%USERPROFILE%");

ну а далее добавить к пути "Desktop" либо "Рабочий стол" в зависимости от локализации.

Автор: alur2005
Дата сообщения: 15.12.2007 13:26
megamozg13

все разобрался

Const OverwriteExisting = TRUE

set WhShell = CreateObject("WScript.Shell")
strDesktop = WhShell.SpecialFolders("Desktop")

Set FSO = CreateObject("Scripting.FileSystemObject")

FSO.CopyFile "C:\111\1.txt", strdesktop & "\", OverwriteExisting
Автор: Nagual
Дата сообщения: 16.12.2007 06:47
alur2005, то же самое одной строкой
Код: CreateObject([no]"Scripting.FileSystemObject"[/no]).CopyFile[no]"C:\111\1.txt"[/no],CreateObject([no]"WScript.Shell"[/no]).SpecialFolders([no]"Desktop"[/no])&[no]"\"[/no],1
Автор: Sun Ray
Дата сообщения: 18.12.2007 14:21
Как на VBS можно сравнить пару файлов подобно линксевому diff?
Автор: jONES1979
Дата сообщения: 18.12.2007 21:24
Sun Ray

Цитата:
Как на VBS можно сравнить пару файлов подобно линксевому diff?

вероятно вызвав программу "подобную линксевому diff" с нужными параметрами
Автор: chainick2006
Дата сообщения: 20.12.2007 12:06
Вопрос: как можно получить список зарегистрированных в системе COM-объектов или получить часть этого списка объектов с опр. именами. Что я имею ввиду. Установил я программу, которая зарегистривала свои объекты. Создать их можно, например, так:

Set obj1 = CreateObject("AT.Application")
или
Set obj2 = CreateObject("AT.Device")

т.е. как я понял АТ – это сервер, а Application и Device – объекты этого сервера. Так вот, в документации к программе описаны только несколько объектов. Когда я запустил редактор PrimalScript, то увидел значительно больше доступных объектов установленной программы. Т.е. разработчик заведомо дал не полную документацию. Вот и вопрос: как получить список всех доступных объектов сервера АТ и получить список всех членов (методы, свойства) нужного мне объекта, например, AT.Application?
Может можно как-то заюзать файлы с расширением *.tlb?



Автор: ViSiToR
Дата сообщения: 28.12.2007 00:25
На основе предложенных вариантов, сделал функцию:


Код: 'Функция для отображения системного диалога сохранения
Function FileSaveDialog(sTitle, sInitDir, sFilter, sDefaultName)
    Set obj = CreateObject("MSComDlg.CommonDialog")
    obj.Filter = sFilter
    obj.MaxFileSize = 256
    obj.DialogTitle = sTitle
    obj.FileName = sDefaultName
    obj.InitDir= sInitDir
    obj.ShowSave
    FileSaveDialog = obj.FileName
End Function
Автор: pazdak
Дата сообщения: 28.12.2007 09:07
ViSiToR
Странно, а я всегда думал, что это должно работать:

Цитата:
ShowSave method. Displays the Save As dialog box. Returns True if a file was selected and False if the user clicked the Cancel button.


Автор: ViSiToR
Дата сообщения: 28.12.2007 10:40
pazdak

Цитата:
это должно работать

Не работает - Всегда возвращает "" (пустую строку)...
Автор: AndVGri
Дата сообщения: 28.12.2007 15:21
ViSiToR
Вот ещё версия

Код:
Function FileSaveDialog(sTitle, sInitDir, sFilter, sDefaultName)
    On Error Resume Next
    Dim obj
Set obj = CreateObject("MSComDlg.CommonDialog")
obj.Filter = sFilter
obj.MaxFileSize = 256
obj.DialogTitle = sTitle
obj.FileName = sDefaultName
obj.InitDir= sInitDir
obj.CancelError = True
Err.Clear
obj.ShowSave
If Err.Number = 32755 Then
    MsgBox "Нажата отмена"
    FileSaveDialog = ""
ElseIf Err.Number <> 0 Then
    'Обработка прочих ошибок
Else
FileSaveDialog = obj.FileName
End If
End Function

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

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


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