Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Активные темы » Программирование "удобняшек" на VBScript (Часть 2)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопросы, задачи и их решения по VBScript.

 
Мануал (english, 600 Кб). | Зеркало
MS Scripting 5.6 (700 КБ), включает последнюю версию VBS. Владельцам XP/2000(?) должен быть не нужен. | Зеркало
Немного на wikiпедии.
Предыдущие части: 1
 
Смежные темы:
Сценарии Windows
Командная строка, батники\сценарии (bat, cmd)
Скрипты KiXtart

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:12 12-07-2011 | Исправлено: Smitis, 23:28 26-02-2018
Egor2020

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мой способ получения полного пути к папке, содержащей выполняемый VBS-скрипт, независимо от рабочей папки (на примере интерпретатора скриптового языка AutoIt):

Код:
Set WshShell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
 
ScriptDir = FSO.GetParentFolderName(WScript.ScriptFullName)
 
AutoItEXEPath = ScriptDir & "\AutoIt3.exe"
AutoItEXEPathWithQuotes = Chr(34) & AutoItEXEPath & Chr(34)
AutoItEXEPathWithTrailingSpace = AutoItEXEPathWithQuotes & Chr(32)
 
AutoItScriptPath = ScriptDir & "\script.au3"
AutoItScriptPathWithQuotes = Chr(34) & AutoItScriptPath & Chr(34)
 
If FSO.FileExists(AutoItEXEPath) = True And FSO.FileExists(AutoItScriptPath) = True Then
WshShell.Run AutoItEXEPathWithTrailingSpace & AutoItScriptPathWithQuotes, 1, True
End If

Работает на всех версиях Windows, начиная с Windows 98 и заканчивая Windows 11.

Всего записей: 1726 | Зарегистр. 01-03-2020 | Отправлено: 14:54 21-09-2023 | Исправлено: Egor2020, 01:44 22-09-2023
Vidocqq

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подскажите, как реализовать автозакрытие окна InputBox через определенной количество секунд и продолжение выполнения программы, как если бы в окне InputBox нажали кнопку ОК без ввода текста.

Всего записей: 1013 | Зарегистр. 03-09-2007 | Отправлено: 11:59 24-09-2023
a929151



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vidocqq, никак.
Как вариант.

Код:
 
Dim WshShell
Dim intButton
Dim strInput
 
Set WshShell = CreateObject("WScript.Shell")
 
intButton = WshShell.Popup("Да/Нет Вопрос на время. У вас есть 5 секунд.", 5, "Title", 4 + 32)
 
If intButton = 6 Then    
    strInput = InputBox("Prompt", "Title","Default")
    If Len(strInput) = 0 Then
    MsgBox "Default"
    Else
        MsgBox strInput
    End If
Else
    MsgBox "Default"    
End If
 
Set WSHShell = Nothing
 

Всего записей: 1359 | Зарегистр. 30-03-2016 | Отправлено: 12:38 24-09-2023
Vidocqq

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a929151

Цитата:
никак.  

Жаль..  
Был такой вариант, но он работает через раз:

Код:
Set WshShell = WScript.CreateObject("WScript.Shell")
inputValue = InputBox("Input value:", "InputBox")
WScript.Sleep(10000) ' Ожидаем 10 секунд
WshShell.AppActivate "InputBox" ' Активируем окно InputBox
WshShell.SendKeys "{ENTER}" ' имитирует нажатие Энтер

 
Другой вариант видел - через вызов дополнительного файла vbs в котором прописывается задержка и нажатие Энтера:

Код:
Set objShell = WScript.CreateObject("WScript.Shell")
WScript.Sleep(10000) ' Задержка в 10 секунд
' Отправляем клавишу "Enter" для нажатия кнопки OK
objShell.SendKeys "{ENTER}"

Но хотелось все в одном...

Всего записей: 1013 | Зарегистр. 03-09-2007 | Отправлено: 13:08 24-09-2023
a929151



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vidocqq, если тебя вариант с SendKeys устраивает.

Код:
 
Set WshShell = WScript.CreateObject("WScript.Shell")
 
' Создаем объект для работы с файловой системой
Set objFSO = CreateObject("Scripting.FileSystemObject")
 
' Определяем путь к временной директории
strTempDir = objFSO.GetSpecialFolder(2)
 
' Создаем путь и имя временного файла
strTempFile = objFSO.BuildPath(strTempDir, "mytempfile.vbs")
 
' Открываем временный файл для записи
Set objFile = objFSO.CreateTextFile(strTempFile, True)
 
' Записываем во временный файл содержимое
objFile.WriteLine "Set objShell = WScript.CreateObject(""WScript.Shell"")"
objFile.WriteLine "WScript.Sleep(10000) ' Задержка в 10 секунд"
objFile.WriteLine "' Отправляем клавишу ""Enter"" для нажатия кнопки OK"
objFile.WriteLine "objShell.SendKeys ""{ENTER}"""
 
' Закрываем файл
objFile.Close
 
' Задержка для уверенности, что файл создан
WScript.Sleep(1000)
 
' Запускаем временный файл
Set objShell = CreateObject("WScript.Shell")
objShell.Run """" & strTempFile & """", 1, False
 
inputValue = InputBox("Input value:", "InputBox")
WshShell.AppActivate "InputBox" ' Активируем окно InputBox
 
' Удаляем временный файл после выполнения
objFSO.DeleteFile strTempFile
 
 

Всего записей: 1359 | Зарегистр. 30-03-2016 | Отправлено: 14:24 24-09-2023
0utcast



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
доброго времени суток
 
есть вот такой скрипт для установки шрифтов
 

Код:
 
Option Explicit
Dim oFSO, oShell, oItems, oFonts, Fonts, FItems, oRExp, Font, Name, S, FName, Folder
 
Set oFSO   = CreateObject("Scripting.FileSystemObject")
Set FName  = oFSO.GetFile(Wscript.ScriptFullName)
Folder     = oFSO.GetParentFolderName(FName)
Set oShell = CreateObject("Shell.Application")
Set oItems = oShell.Namespace(Folder).Items
Set oFonts = oShell.NameSpace(20)
Fonts      = oFonts.Self.Path & "\"
Set FItems = oFonts.Items
Set oRExp  = New RegExp
oRExp.IgnoreCase = True
oRExp.Pattern = "\s(Black|(Exstra)?(Book|Bold)|Cond(ensed)?|Hairline"&_
"|Heavy|Italic|Light|Medium|Narrow|News|Normal|Oblique|Regular|[DS]" &_
"emi(Bold|Light)|Thin) ?(Regular|Italic)? ?(Bold)? ?(Oblique|Italic)?$"
oItems.Filter 73920, "*.chr;*.fnt;*.fon;*.fot;*.mmm;*.otf;*.ttf;*.ttc;*.pfm;*.pfb"
 
For Each Font in oItems
   Name = Font.ExtendedProperty("DocTitle")
   If Not oRExp.Test(Name) Then Name = Name & ";" & Name & " Regular"
   FItems.Filter 73952, Name : Font = oFSO.GetFileName(Font.Path)
   If InStr(S & ";", ";" & Font & ";") = 0 Then _
   If Not oFSO.FileExists(Fonts & Font) Then If FItems.Count = 0 Then S = S & ";" & Font
Next
If S = "" Then WSH.Quit
oItems.Filter 73920, Mid(S, 2)
oItems.InvokeVerbEx "Install"
 
 

 
сразу говорю, что я не программист, хоть в своё время по наитию чутка доработал найденный в сети,
по идее он должен проверять шриans на уже установленные и пропускать их, но
с некоторыми происходит вот такое, постоянно задаёт вопрос, что с этим шрифтом делать, что исключает удалённую автоматизацию по установке

как это пофиксить в скрипте, автоматом скипать или проставлять чекбокс на переустановку,
в общем, как вариант
 
пример со шрифтами тут
https://www.upload.ee/files/16067025/fonts.zip.html

Всего записей: 351 | Зарегистр. 08-07-2011 | Отправлено: 21:21 18-12-2023
929151

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
0utcast
Пробуй.
 
Для проверки, установлен ли шрифт, можно воспользоваться следующим методом: проверка реестра Windows на наличие записи о шрифте. Вот как можно модифицировать ваш скрипт для добавления такой проверки:

Код:
 
Option Explicit
Dim oFSO, oShell, oItems, oFonts, Fonts, FItems, oRExp, Font, Name, S, FName, Folder
 
Set oFSO   = CreateObject("Scripting.FileSystemObject")
Set FName  = oFSO.GetFile(Wscript.ScriptFullName)
Folder     = oFSO.GetParentFolderName(FName)
Set oShell = CreateObject("Shell.Application")
Set oItems = oShell.Namespace(Folder).Items
Set oFonts = oShell.NameSpace(20)
Fonts      = oFonts.Self.Path & ""
Set FItems = oFonts.Items
Set oRExp  = New RegExp
oRExp.IgnoreCase = True
oRExp.Pattern = "\s(Black|(Exstra)?(Book|Bold)|Cond(ensed)?|Hairline"&_
"|Heavy|Italic|Light|Medium|Narrow|News|Normal|Oblique|Regular|[DS]" &_
"emi(Bold|Light)|Thin) ?(Regular|Italic)? ?(Bold)? ?(Oblique|Italic)?$"
oItems.Filter 73920, ".chr;.fnt;.fon;.fot;.mmm;.otf;.ttf;.ttc;.pfm;.pfb"
 
For Each Font in oItems
    Name = Font.ExtendedProperty("DocTitle")
    If Not oRExp.Test(Name) Then Name = Name & ";" & Name & " Regular"
    FItems.Filter 73952, Name
    Font = oFSO.GetFileName(Font.Path)
    If InStr(S & ";", ";" & Font & ";") = 0 Then
        If Not FontInstalled(Fonts & Font) Then
            If FItems.Count = 0 Then S = S & ";" & Font
        End If
    End If
Next
 
If S <> "" Then
    oItems.Filter 73920, Mid(S, 2)
    oItems.InvokeVerbEx "Install"
End If
 
Function FontInstalled(FontPath)
    ' Функция для проверки установки шрифта
    Dim objShell, objFolder, objFolderItem
    On Error Resume Next
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(Fonts)
    Set objFolderItem = objFolder.ParseName(FontPath)
    FontInstalled = Not (objFolderItem Is Nothing)
    On Error GoTo 0
End Function
 
 

 
В этой версии скрипта добавлена функция FontInstalled, которая использует объекты Shell.Application для проверки наличия файла шрифта в системной папке шрифтов. Функция возвращает True, если шрифт установлен, и False в противном случае. Перед установкой нового шрифта проверяется его статус установки с использованием этой функции.

Всего записей: 373 | Зарегистр. 18-12-2005 | Отправлено: 22:27 18-12-2023
A27

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня задача следующая: есть png файл, необходимо узнать цвет пикселя по координатам. Как это реализовать?

Всего записей: 66 | Зарегистр. 30-03-2017 | Отправлено: 09:51 07-01-2024
929151

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A27, никак.
 
в python
 

Код:
from PIL import Image
 
def get_pixel_color(image_path, x, y):
    im = Image.open(image_path)
    rgb_im = im.convert('RGB')
    r, g, b = rgb_im.getpixel((x, y))
    return r, g, b
 
# Пример использования:
r, g, b = get_pixel_color('path_to_your_image.png', 50, 50)
print(f'Цвет пикселя: Red={r}, Green={g}, Blue={b}')
 

Всего записей: 373 | Зарегистр. 18-12-2005 | Отправлено: 01:48 08-01-2024
kraeved



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
A27
Есть png файл, необходимо узнать цвет пикселя по координатам. Как это реализовать?

Microsoft сообщает, что Visual Basic из коробки работает с изображениями
форматов BMP, ICO, CUR, RLE, WMF, EMF, GIF, JPG. Как видите, PNG среди них нет.
 
Но вскоре добавляет, что PNG можно открыть через библиотеку WIA, а затем
потыкать нужный пиксель через ImageFile.ARGBData. Как это собрать, пока не вижу.
 
2024-01-24: Увидел.
 
   
 
Из консольных альтернатив вспоминаю VIPS:
 
$ vips getpoint image.png 350 15
255 0 0
 
$ vips getpoint image.png 350 15 | powershell -c "-join(-split $input|%{'{0:X2}'-f+$_})"
FF0000

 
И, конечно, ImageMagick:
 
$ magick image.png -format "%[pixel:u.p{350,15}]" info:
srgb(255,0,0)
 
$ magick image.png -format "%[pixel:u.p{350,15}]" -colorspace hsl info:
hsl(0,100%,50%)
 
$ magick image.png -format "%[hex:u.p{350,15}]" info:
FF0000


Всего записей: 1000 | Зарегистр. 01-03-2003 | Отправлено: 04:30 08-01-2024 | Исправлено: kraeved, 22:20 24-01-2024
A27

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
kraeved, можно и другой формат, тот же bmp. magick я уже пробовал, возвращает постоянно одно значение не зависимо от координат.
 
А вот консольный VIPS очень подходящий вариант. Мне бы в виде портативной exe утилиты.

Всего записей: 66 | Зарегистр. 30-03-2017 | Отправлено: 04:44 08-01-2024
iNNOKENTIY21



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
A27

Цитата:
У меня задача следующая: есть png файл, необходимо узнать цвет пикселя по координатам. Как это реализовать?

Я за powershell ответил там -> Сценарии для Windows #19
 

Всего записей: 3521 | Зарегистр. 16-08-2012 | Отправлено: 11:04 08-01-2024 | Исправлено: iNNOKENTIY21, 11:10 08-01-2024
conservator



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Bat удаляет папку, как это будет выглядеть в VBS ?

Всего записей: 7665 | Зарегистр. 08-11-2015 | Отправлено: 16:39 14-01-2024
929151

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
conservator

Код:
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder "%userprofile%\AppData\Local\имя папки\", True

Этот скрипт удаляет папку “имя папки” в AppData\Local без подтверждения.

Всего записей: 373 | Зарегистр. 18-12-2005 | Отправлено: 17:37 14-01-2024
conservator



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
929151
Не срабатывает

Всего записей: 7665 | Зарегистр. 08-11-2015 | Отправлено: 18:12 14-01-2024 | Исправлено: conservator, 18:54 14-01-2024
929151

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
conservator

Код:
Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder CreateObject("WScript.Shell").ExpandEnvironmentStrings("%LocalAppData%") & "\Folder", True

Всего записей: 373 | Зарегистр. 18-12-2005 | Отправлено: 18:39 14-01-2024
conservator



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
929151
Спасибо, этот вариант работает, единственно, если папки для удаления нет, выбрасывает ошибку, от неё можно избавиться ?

Всего записей: 7665 | Зарегистр. 08-11-2015 | Отправлено: 18:58 14-01-2024
929151

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
conservator

Код:
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFolderPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%LocalAppData%") & "\Folder"
If objFSO.FolderExists(strFolderPath) Then objFSO.DeleteFolder strFolderPath, True

Всего записей: 373 | Зарегистр. 18-12-2005 | Отправлено: 19:02 14-01-2024
conservator



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
929151
Отлично! Спрошу на будущее, если папка на в Local, а в Roaming, достаточно будет ("%LocalAppData%") поправить на ("AppData%") или ? И как удалять отдельные файлы из этих пользовательских папок ?

Всего записей: 7665 | Зарегистр. 08-11-2015 | Отправлено: 19:13 14-01-2024
929151

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
conservator

Код:
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFolderPath = CreateObject("WScript.Shell").ExpandEnvironmentStrings("%AppData%") & "\Folder"
strFilePath = objFSO.BuildPath(strFolderPath, "file.txt")
 
If objFSO.FileExists(strFilePath) Then
    objFSO.DeleteFile strFilePath
    WScript.Echo "Файл успешно удален."
ElseIf objFSO.FolderExists(strFolderPath) Then
    WScript.Echo "Файл не существует в указанной папке."
Else
    WScript.Echo "Папка не существует."
End If

 
 
Добавлено:
и покороче

Код:
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFilePath = objFSO.BuildPath(CreateObject("WScript.Shell").ExpandEnvironmentStrings("%AppData%") & "\Folder", "file.txt")
If objFSO.FileExists(strFilePath) Then objFSO.DeleteFile strFilePath

Всего записей: 373 | Зарегистр. 18-12-2005 | Отправлено: 19:20 14-01-2024
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Активные темы » Программирование "удобняшек" на VBScript (Часть 2)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru