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

» Программирование "удобняшек" на VBScript (Часть 2)

Автор: inile
Дата сообщения: 13.02.2015 08:38
LordHomyak
Нужно, чтобы с позиции от 0 до 700 по вертикали возвращало на сохраненную позицию, а не перекидывало на самый верх с запоминанием новой позиции. Образно говоря, надо расширить Top до 700px.
Автор: LordHomyak
Дата сообщения: 13.02.2015 14:03
inile

Код: javascript:(function(d,scrT){scrT=d.documentElement.scrollTop||d.body.scrollTop;if(scrT>700){localStorage['bmk_'+d.location.href]=scrT;scrollTo(0,0)}else{scrollTo(0,localStorage['bmk_'+d.location.href]||0)}})(document)
Автор: inile
Дата сообщения: 13.02.2015 15:59
LordHomyak
То, что надо!


Цитата:
Если вместо 700 подставить d.documentElement.clientHeight, допуск будет меняться в зависимости от высоты видимой части страницы.
В этом случае у меня ни в одной позиции не работает scrollTo(0,0)
Автор: LordHomyak
Дата сообщения: 13.02.2015 21:31
inile
Хм, впервые вижу, чтобы ф-я document.documentElement.clientHeight возвращала высоту всей страницы. И такое именно на этом форуме.
Стандартная связка:
Код: (window.innerHeight||d.documentElement.clientHeight||d.body.clientHeight)
Автор: inile
Дата сообщения: 13.02.2015 22:30
LordHomyak

Цитата:
Полный скрипт будет таким:

Цитата:
Хотя из-за localStorage я бы оставил только window.innerHeight

Оба варианта работают. Спасибо.

Автор: defragmentator
Дата сообщения: 16.02.2015 22:10
Доброго времени суток!
Все слышали про "WindowsKey.vbs" (Определение ключа установленной системы Windows через VBScript). Кто не слышал - не беда.
Этот скрипт выводит информационное окно с версией ОС и ключом Microsoft.
Мне пришло в голову немного поправить этот скрипт и дать ему новые возможности. Для этого мне нужна Ваша помощь. Я хотел бы реализовать этот скрипт так, что-бы после его запуска не выводилась информация на экран монитора, а результат выполнения vbs скрипта записывался в txt файл. Возможно кто-то уже модифицировал данный скрипт под себя или реализовывал через bat или exe файлы. Прошу поделится фантазией. Необходима юзабельность в Win от 7 до 10.
Всем спасибо жду варики...

Скрипт WindowsKey.vbs:

Код:

Set WshShell = CreateObject("WScript.Shell")
regKey = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
DigitalProductId = WshShell.RegRead(regKey & "DigitalProductId")
Win8ProductName = "Windows Product Name: " & WshShell.RegRead(regKey & "ProductName") & vbNewLine
Win8ProductID = "Windows Product ID: " & WshShell.RegRead(regKey & "ProductID") & vbNewLine
Win8ProductKey = ConvertToKey(DigitalProductId)
strProductKey ="Windows 8 Key: " & Win8ProductKey
Win8ProductID = Win8ProductName & Win8ProductID & strProductKey
MsgBox(Win8ProductKey)
MsgBox(Win8ProductID)
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
Автор: king_stiven
Дата сообщения: 17.02.2015 11:16
Можно ли програмно нажать на кнопку проги, сама прога всегда находится в области уведомлений в виде значка, при клике на которй раскрывается? Кнопки при получении прогой ссылки сначала нет, потом, когда ссылка преобразуется в прямую ссылку, кнопка появляется и прога открывается.
сайт проги
http://www.svp-team.com/wiki/SVPtube
http://www.svp-team.com/files/svptube-1.2.5.zip

Вот пока что нашёл

var WSHShell = new ActiveXObject('WScript.Shell');

do {
var act_success = WSHShell.AppActivate('Alarm DB Logger Manager');
WScript.Sleep(50);
} while (!act_success);

WScript.Sleep (500);
WSHShell.SendKeys ("{TAB}");
WScript.Sleep (100);
WSHShell.SendKeys ("{ENTER}");






...вот чтобы учесть случаи потери окном фокуса, а вероятность эта остается в любом случае, и никто не даст гарантии что пользователь в этот момент мышой не шевельнет и по клаве не клацнет, и чтобы иметь возможность посылать нажатие даже свернтутому приложению, используйте: сообщение SendMessage/PostMessage (с BM_Click = $00F5) с предварительным поиском окна по заголовку FindWindow(nil, 'Alarm DB Logger Manager'), последующим поиском окна кнопки по FindWindowEx().
WinAPI функции можно вызывать в VBS через DynWrapper.



Вот это вот:

сообщение SendMessage/PostMessage (с BM_Click = $00F5) с предварительным поиском окна по заголовку FindWindow(nil, 'Alarm DB Logger Manager'), последующим поиском окна кнопки по FindWindowEx().


относится к VBS или чеоез DynWrapper работает?

Автор: loban_ser
Дата сообщения: 17.02.2015 17:22
defragmentator
[more=>>>]
Код: Option Explicit

Dim strComputer, objWMIService, objItem, Caption, colItems

Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
Set colItems = objWMIService.ExecQuery("Select * from Win32_OperatingSystem",,48)
For Each objItem in colItems
Caption = objItem.Caption
Next

If InStr(Caption,"Windows") > 0 Then
    Dim objshell,path,DigitalID, Result
Dim fil
    Set objshell = CreateObject("WScript.Shell")
    'Set registry key path
    Path = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"
    'Registry key value
    DigitalID = objshell.RegRead(Path & "DigitalProductId")
    Dim ProductName,ProductID,ProductKey,ProductData
    'Get ProductName, ProductID, ProductKey
    ProductName = "Product Name: " & objshell.RegRead(Path & "ProductName")
fil = objshell.RegRead(Path & "ProductName")
    ProductID = "Product ID: " & objshell.RegRead(Path & "ProductID")
    ProductKey = "Installed Key: " & ConvertToKey(DigitalID)
    ProductData = ProductName & vbNewLine & ProductID & vbNewLine & ProductKey
    'Show messbox if save to a file
    'If vbYes = MsgBox(ProductData & vblf & vblf & "Save to a file?", vbYesNo + vbQuestion, "BackUp Windows Key Information") then
     Save ProductData
    'End If

Else
    MsgBox "Please run this script in Windows 8.x"    
End If


'Convert binary to chars
Function ConvertToKey(Key)
Const KeyOffset = 52
Dim isWin8, Maps, i, j, Current, KeyOutput, Last, keypart1, insert
'Check if OS is Windows 8
isWin8 = (Key(66) \ 6) And 1
Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4)
i = 24
Maps = "BCDFGHJKMPQRTVWXY2346789"
Do
    Current= 0
j = 14
Do
Current = Current* 256
Current = Key(j + KeyOffset) + Current
Key(j + KeyOffset) = (Current \ 24)
Current=Current Mod 24
j = j -1
Loop While j >= 0
i = i -1
KeyOutput = Mid(Maps,Current+ 1, 1) & KeyOutput
Last = Current
Loop While i >= 0
keypart1 = Mid(KeyOutput, 2, Last)
insert = "N"
KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0)
If Last = 0 Then KeyOutput = insert & KeyOutput
ConvertToKey = Mid(KeyOutput, 1, 5) & "-" & Mid(KeyOutput, 6, 5) & "-" & Mid(KeyOutput, 11, 5) & "-" & Mid(KeyOutput, 16, 5) & "-" & Mid(KeyOutput, 21, 5)


End Function
'Save data to a file

Function Save(Data)
Dim fso, fName, txt,objshell,UserName,Cur
Set objshell = CreateObject("wscript.shell")
Cur = CreateObject("Scripting.FileSystemObject").GetParentFolderName(WScript.ScriptFullName)
'Get current user name
UserName = objshell.ExpandEnvironmentStrings("%UserName%")
'Create a text file on desktop
fName = Cur & "\" & "KeyBackup_" & fil & ".txt"
Set fso = CreateObject("Scripting.FileSystemObject")
Set txt = fso.CreateTextFile(fName)
txt.Writeline Data
txt.Close
End Function
Автор: defragmentator
Дата сообщения: 17.02.2015 23:08
Слов нет, большое спасибо!
Автор: defragmentator
Дата сообщения: 19.02.2015 20:20

Цитата:
loban_ser

Разрядность ОС реализовать возможно для данного варианта?
Спасибо за помощь...
Автор: Sotus
Дата сообщения: 25.02.2015 23:37
Всем доброго времени суток.
Подскажите, пожалуйста, как решить проблему со скриптом.

[more=Описание ошибки.]

Есть скрипт (Script-reboot.vbs) для сброса маршрутизатора,
который НОРМАЛЬНО ОТРАБАТЫВАЕТ ПО ДВОЙНОМУ КЛИКУ ПО НЕМУ,
но как только я пытаюсь запустить его через USDownloader (менеджер закачек), - выдаётся окошко с ошибкой:

windows script host (заголовок окна ошибки)
Текст в окне:
Сценарий:
D:\USDownloader\SCRIPT_REBOOT\Script-reboot.vbs
Строка: 3
Символ: 1
Ошибка: Не удаётся найти указанный файл.
Код: 80070002
Источник: (null)

Попробовал сделать батник, который запускает этот скрипт.
Батник, по двойному клику по нему, нормально запускается и отрабатывает вместе со скриптом.
При запуске этого батника через USDownloader - выдаёт ту же самую ошибку.
Система Win8.1 Upd1 RUS

Текст скрипта:
set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.run "telnet.exe"

WScript.Sleep 5000
WshShell.SendKeys"o IP-АДРЕС МАРШРУТИЗАТОРА" & chr(13)

WScript.Sleep 5000
WshShell.SendKeys"ЛОГИН МАРШРУТИЗАТОРА" & chr(13)

WScript.Sleep 5000
WshShell.SendKeys"ПАРОЛЬ МАРШРУТИЗАТОРА" & chr(13)

WScript.Sleep 5000
WshShell.SendKeys"system reboot" & chr(13)

WScript.Sleep 3500
ProcessClose("cmd.exe")
ProcessClose("telnet.exe")
Function ProcessClose(sProcName)
strComputer = "."
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process Where Name = '" & sProcName & "'")
For Each objProcess in colProcessList
objProcess.Terminate()
Next
End Function

[/more]

Что делать?
Подскажите пожалуйста.
Прошу сильно не пинать, т.к. я в этом полный чайник.
Автор: Rush
Дата сообщения: 27.02.2015 09:36
Sotus
Ну, поскольку не находит файл telnet.exe, попробуй прописать ему полный маршрут. В этой строке:

Код: WshShell.run "telnet.exe"
Автор: Sotus
Дата сообщения: 27.02.2015 13:56
Rush
Вопрос закрыт.
Спасибо за участие.

Автор: king_stiven
Дата сообщения: 03.03.2015 10:47
У vbs скриптов можно задать имя окна, аналогично команде title в батниках?
Автор: RomanoSadovnik
Дата сообщения: 06.03.2015 11:46
king_stiven

I Only read, only x32
GetOpenWindowTitles(ATitles)

Код:
Set jsS = CreateObject("jsShell.Ops")
Set jsSWins = jsS.GetOpenWindows
Ret = jsSWins.GetOpenWindowTitles(ARet)
If Ret > 0 then
    For i = 0 to Ret - 1
        sList = sList & ARet(i) & vbCrLf
    Next
End If
WSCript.StdOut.WriteLine sList
Автор: king_stiven
Дата сообщения: 09.03.2015 18:27
Я имел в виду, имеют ли VBS ки окно с именем, как батники, можно ли из самого скрипта задавать имя своего окна.
Автор: RomanoSadovnik
Дата сообщения: 12.03.2015 12:19
king_stiven
Я извращался так:
start.bat

Код:
cscript //H:CScript //Nologo //S
start "my_title" /I secondary.bat
Автор: msmih
Дата сообщения: 15.03.2015 18:58
Буду признателен за подсказку. Мои познания окончились.
Есть строка в ней нужно подсчитать количество одного и того слова. Например в строке 5 раз встречается слово "смех". Как подсчитать?
Автор: Tilks
Дата сообщения: 15.03.2015 23:33
msmih
делим строку на слова (Split - Возвращает массив строк, полученных в результате разбиения строки на подстроки.).
массив строк в цикле (For) сравниваем (If) с словом "смех". если совпало плюсуем счётчик.
вывод результата (Echo): нашли "счётчик" слов 'смех' .

Автор: niko7
Дата сообщения: 25.03.2015 10:46
Есть задача очищать при загрузке папку temp. Написал такой скрипт, посмотрите насколько верно сделал.
Dim ff
Set ff= CreateObject("WScript.Shell")
path =ff.ExpandEnvironmentStrings("%Temp%")
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.folderexists(path) Then
Set folder = fso.GetFolder(path)
Set cof = folder.Files
For Each file in cof
On Error Resume Next
file.Delete
Next
Set fof = folder.SubFolders
For Each SubFolders in fof
On Error Resume Next
fso.DeleteFolder(SubFolders)
Next
End if
Автор: msmih
Дата сообщения: 20.04.2015 19:21
вопрос не очень в тему, но буду признателен за ответ.
Подскажите чем лучше откомпилировать vbs в exe. Интересует бесплатное решение и без сюрприз в конечном продукте.
Автор: ptr73
Дата сообщения: 23.04.2015 06:39
niko7
Проверяй работу на нестандартных, скрытых и системных файлах и папках.

msmih
попробуй околоофициальный способ
_https://social.technet.microsoft.com/Forums/scriptcenter/en-US/c0e7575a-6983-453b-8959-c6d889ccc01f/stepbystep-to-wrap-a-vbs-into-an-exe?forum=ITCG
Автор: YURETS777
Дата сообщения: 24.04.2015 10:31
Имеется функция чтения бинарного файла:

Код:
Function ReadBinaryFile(filename)
Dim bArr
With CreateObject("ADODB.Stream")
.Type = 1 'adTypeBinary
.Open
.LoadFromFile filename
bArr = .Read
.Close
ReadBinaryFile = bArr
End With
End Function
Автор: ptr73
Дата сообщения: 24.04.2015 20:00
попробовать считывать напрямую в ReadBinaryFile = .Read
а лучше вообще без функции
это ж куча копий объектов в памяти, каждый по 256 мегабайт
нужно пересматривать архитектуру программы и не грузить всё в память
Автор: artclub
Дата сообщения: 04.05.2015 08:42
Добрый день!

Есть возможность через Active Directory настроить так, чтоб после перезагрузки комп перешел в состояние получения IP автоматом?

Создал file.bat , туда скопировал
netsh interface ip set address "lan0" dhcp
netsh interface ip set dns "lan0" dhcp
netsh interface ip set wins "lan0" dhcp


Потом поместил этот файл как показано на этом видео https://www.youtube.com/watch?v=UbbZT3mLuH4
Проверил, но все без изменений


Как сделать так чтоб скрипт сработал на нужную группу?
Автор: fff222fffy1
Дата сообщения: 04.05.2015 21:45
Хочу наладить взаимодействие hta-приложения и проводника (перетаскивание файлов туда-обратно).
Не подскажите, в какую сторону копать?
Автор: niko7
Дата сообщения: 26.05.2015 14:45
Подскажите почему не работает. Ос win 8.1.

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "NET TIME \\192.168.1.177 /SET /Y", 0 , true

Для теста запускаю cmd от имени администратора, команда NET TIME \\192.168.1.177 /SET /Y время изменяет
Автор: Walkman78
Дата сообщения: 05.06.2015 13:00
Тема не умерла? Подскажите по скрипту...
При входе в домен у пользователя выскакивает сообщение (объявление). Текст берется из текстового файла. Но количество символов ограничено 1024.... Как можно исправить?

Set FSO = CreateObject("Scripting.FileSystemObject")
Set File = FSO.GetFile("d:\1.txt")
Set TextStream = File.OpenAsTextStream(1)
MsgBox (TextStream.Read(4096))
TextStream.Close
Автор: msmih
Дата сообщения: 10.06.2015 06:52
как с помощью vbs проверить разрядность установленного ms office?
Автор: fff222fffy1
Дата сообщения: 12.06.2015 22:53
А темы по hta на этом форуме нет?

Страницы: 12345678910111213141516171819202122232425

Предыдущая тема: Помогите новичку в C++


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