HTA Использование HTA

Тема в разделе "Пакетные файлы CMD, BAT", создана пользователем Гимаев Наиль, 28 окт 2013.

  1. Гимаев Наиль
    Оффлайн

    Гимаев Наиль Пользователь

    Сообщения:
    59
    Симпатии:
    98
    Протестировать до конца не получилось, т.к. положил в папку, имя которой начинается с восклицательного знака.
    Папки начинающиеся с восклицательного знака становятся первыми в файловом менеджере, это как своеобразная отметка избранных папок.
    Естественно, антивирусная папка для меня самая важная и находится она на флэшке (не в сети). Из всего сказанного следуют такие изменения:
    http://diffchecker.com/h32s8tat
    На полную отладку времени не хватило, поэтому вариант ещё не до конца рабочий. Суть в двух словах такая: если папка не в сети, то использовать нужно относительный путь. Тогда всякие не правильные символы не будут влиять на работу скрипта.
    --- Объединённое сообщение, 28 окт 2013, Дата первоначального сообщения: 28 окт 2013 ---
    Немного оффтопик. Когда я пишу автономные скрипты, то я пользуюсь cmd. А вот для интерактивных (массового пользования) намного полезнее пользоваться HTA.
    Немного расскажу, для тех кто не знает.
    HTA - технология для создания скриптового десктопного приложения. Так как в его основе лежит cscript, то имеются все возможности для работы с файловой системой, реестром и wmi на языках vbscript и javascript. Но кроме этого у hta-приложения есть окно, интерфейс которого представляет собой html-страницу. Другими словами, когда функционал будет готов, навести глянец на приложение сможет любой веб-дизайнер.
    Чтобы оценить насколько эта технология может быть полезна приведу несколько примеров.
    Ссылка заменена модератором. - Простейшее приложение, часть (ссылка недействительна). Пример работы с реестром.
    kbTrainer - (ссылка заменена) Клавиатурный тренажёр. Пример интерактивности.
    TiddlyWiki.hta - самоизменяемое приложение способное хранить внутри себя даже бинарные файлы, в частности картинки для оформления самого себя. Пример того, как можно хранить всё в одном единственном файле.
    driverpacksolution - изюминка на торте. Самое большое из известных мне hta-приложений. Способно за десять минут установить полный комплект драйверов на любой десктопный компьютер. Пример того, к чему мы должны стремиться при работе над ViruLogs.
    Ещё раз уточню, что это оффттопик, т.к. большинство из постоянных участников темы работает с cmd и может помочь Dragokas'у в его начинаниях. А вот с hta мало кто из нас может ему помочь. К примеру у меня не хватает на это времени, а у большинства - опыта. Но мне кажется, что ViruLogs обретёт популярность, если к нему добавить качественный интерфейс.
     
    Последнее редактирование модератором: 1 май 2016
    Dragokas, akok и Kиpилл нравится это.
  2. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Тест самоэлевации прав HTA-приложением.
    Пробы пера оформления интерфейса.
    Тест определения браузера по-умолчанию. Тест копирования в буфер.

    Elevate_test.png

    SysWOW64 -> System32 поправил. Там не нужна переадресация.
     

    Вложения:

    • HTA_Elevate.zip
      Размер файла:
      98,3 КБ
      Просмотров:
      21
    Последнее редактирование: 4 ноя 2013
    Гимаев Наиль, Phoenix и Kиpилл нравится это.
  3. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.226
    Симпатии:
    4.980
    Так это под 64,ты редирект то в код заложи...
     
  4. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
  5. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.226
    Симпатии:
    4.980
    Phoenix нравится это.
  6. Phoenix
    Оффлайн

    Phoenix Активный пользователь

    Сообщения:
    1.856
    Симпатии:
    1.839
    У меня тоже х86. Заменил на System32 и всё ОК !
     
    Kиpилл нравится это.
  7. FraidZZ
    Оффлайн

    FraidZZ Новый пользователь

    Сообщения:
    16
    Симпатии:
    18
    А просто mshta.exe без пути разве не работает?
     
  8. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    FraidZZ, да, можно и без пути. Кстати, интересно, что путь к самому .HTA нужно указывать полностью. Рабочий каталог не устраивает его.
     
    Последнее редактирование: 5 ноя 2013
  9. FraidZZ
    Оффлайн

    FraidZZ Новый пользователь

    Сообщения:
    16
    Симпатии:
    18
    HTML:
    <html>
        <head>
        <title>ViruLogs Collector by Dragokas</title>

        <HTA:APPLICATION
           ID="objHTA"
           APPLICATIONNAME="ViruLogs Collector by Dragokas"
           SINGLEINSTANCE="no"
           BORDER="thin"
           BorderStyle="complex"
           SCROLL="no"
           Navigable="yes"
           maximizebutton="no"
           minimizebutton="no"
           WINDOWSTATE="normal"
           ContextMenu="no"
           SysMenu="yes"
           Icon='logon.ico'
       />

        <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    </head>

    <style>
        BODY
        {
            background-color: RGB(40, 0, 115);
            font-color: RGB(80, 0, 200);
            font-family: Helvetica;
            font-size: 8pt;
            margin-top: 10px;
            margin-left: 15px;  
        }
    </style>

    <script language="VBScript">
    <!--

    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oShell = CreateObject("WScript.Shell")
    Set oShap = CreateObject("Shell.Application")
    Set oNetwork = CreateObject("WScript.Network")

    Dim sUserName
    Dim sComputerName
    Dim sDomain
    Dim Def_EXE
    Dim Def_Path
    Dim Def_Name

    HTA = location.pathname
    HTA_Path = Left(HTA,InStrRev(HTA,"\"))

    Sub Window_onLoad()
       self.Focus()
       SetSize
       If oFSO.FileExists(HTA_Path & "logo.png") Then
           Logo.src = "logo.png"
       end if
       Browser_Default_Get()
       html = "<body id=""mainbody"" bgcolor=""white"" style=""font:Verdana; color:white"" onclick=""hold"">"
       html = html & "<TABLE><TR><TD><B>OS:</B><TD>" & GetOSName() & "</TR>"
       html = html & "<TR><TD><B>Default Browser:</B><TD>" & Def_Name & "</TR>"
       html = html & "<TR><TD><B>Browser Location:</B><TD>" & Def_Path & "</TR></TABLE></body>"
       Form.InnerHTML = html
       Elevate()
       GetComputerInfo()
       UserName.InnerHTML = sUserName
       ComputerName.InnerHTML = sComputerName
       document.all.status.InnerText = "Протокол работы скрипта будет здесь."
    End Sub

    Function SetSize()
       x=700
       y=550
       window.resizeTo x, y
       window.moveTo ((screen.availWidth / 2) - (x / 2)), ((screen.availHeight / 2) - (y / 2))
    end function

    Sub GetComputerInfo()
       sUserName = oNetwork.UserName
       sComputerName = UCase((oNetwork.ComputerName))
       sDomain = UCase((oNetwork.UserDomain))
    End Sub

    Function GetOSName()
       GetOSName = oShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductName")
    End Function

    Function GetOSVersion()
       GetOS = oShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\CurrentVersion")
    End Function

    Function Elevate()
       Const DQ = """"
       Set colOS = GetObject("winmgmts:\root\cimv2").ExecQuery("Select * from Win32_OperatingSystem")
       For Each oOS In colOS
           strOSLong = oOS.Version
       Next
       If Left(strOSLong, 1) = "6" Then
           If Not isAdminRights() Then
               oShap.ShellExecute "mshta.exe", objHTA.commandLine, "", "runas", 1
               HTA_Close()
           End If
       End If
    end function

    Function isAdminRights()
       Const HKCU = &H80000001, HKLM = &H80000002, KQV = &H1, KSV = &H2
       Set oReg = GetObject("winmgmts:root\default:StdRegProv")
       strKey = "System\CurrentControlSet\Control\Session Manager"
       intErrNum = oReg.CheckAccess(HKLM, strKey, KQV + KSV, flagAccess)
       isAdminRights = flagAccess
    End Function

    Sub Browser_Default_Get()
       if Left(GetOSVersion(), 1) = "5" then
           Browser_Default_Get_Win_XP
       else
           Browser_Default_Get_Win_7
       end if
    End Sub

    Sub Browser_Default_Get_Win_7()
       progid_key = "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.html\UserChoice\Progid"

       progID = oShell.RegRead(progid_key)
       def_cmd = oShell.RegRead("HKCR\" & progID & "\shell\open\command\")

       If Left(def_cmd, 1) = """" Then
           Def_Path = Mid(def_cmd, 2, InStr(2, def_cmd, """") - 2)
       Else
           Def_Path = Split(def_cmd)(0)
       End If

       Def_EXE = Mid(Def_Path, InStrRev(Def_Path, "\") + 1)
       Def_Name = Left(Def_EXE, InStrRev(Def_EXE, ".") - 1)
    End Sub

    Sub Browser_Default_Get_Win_XP()
       Def_EXE = oShell.RegRead("HKLM\SOFTWARE\Clients\StartMenuInternet\")
       Def_Path = oShell.RegRead("HKLM\SOFTWARE\Clients\StartMenuInternet\" & Def_EXE & "\shell\open\command")
     
       Def_Name = Left(Def_EXE, InStrRev(Def_EXE, ".") - 1)
    End Sub

    Sub ClipBoard_Set(strText)
       document.parentwindow.clipboardData.SetData "text", strText
    End Sub

    Sub CopyC()
    document.parentWindow.clipboardData.setData "text", document.all.status.InnerText
    document.getElementById("copywin").innerText = "Windows (Скопировано)"
    End Sub

    Sub BackWin()
    document.getElementById("copywin").innerText = "Windows"
    End Sub

    Function ClipBoard_Get()
       ClipBoard_Get = document.parentwindow.clipboardData.GetData("text")
    End Function

    Function HTA_Close
       window.close()
    End function

    Sub Default_Buttons
       If Window.Event.KeyCode = 13 Then
           Msgbox "Enter Event"
       End If
    End Sub

    Sub Hold()

    End Sub
    //-->
    </script>

    <body id="mainbody" bgcolor="white" style="font:Verdana; color:white" onclick="hold">
        <table width="100%" border="0" cellpadding="0">
            <tr valign="center">
                <td align="left" width="70%">
                    <img HEIGHT="100" width="120" name="Logo">
                </td>
                <td align="right" width="100%">
                    <font size="3">ViruLogs Collector&nbsp;<strong>
                    <br></br>
                    <strong><font face="bold" size="3">Logon: <span style="color:red" id="UserName"></span><br></br>Computer: <span style="color:red" id="ComputerName"></span></strong>
                </td>
            </tr>
            <tr>
                <td>
                </td>
            </tr>
        </table>
        <table width="100%" border="0" cellpadding="0">
            <tr align="left">
                <td>
                    <textarea rows="5" name="status" cols="73" style="font-family: Verdana; font-weight:bold; font-size: 8pt"></textarea>
                </td>
            </tr>
            <hr color="red">
        </table>
        <table width="100%" border="0" cellpadding="0">
            <tr valign="top">
                <td align="left" width="70%">
                    <span style="font-size: 8pt;">Скопировать протокол в буфер обмена :  </span><a onmouseout="BackWin" id="copywin" style="font-size: 8pt; color: white;" onclick='CopyC' href='#'>Windows</button>
                </td>
                <td align="right" width="50%">
                    <span id="countdown"></span><input type="button"  name="btn_close" style="display:none" value="Close" onclick="CloseSelf">
                </td>
                <td align="right" width="50%">
                    <font size="2.25">Hi :)</font>
                </td>
            </tr>
        </table>
    </body>


    <body>
        <H2>HTA Path info:</H2>
        <SPAN ID=Form></SPAN>
    </body>

    </html>
    --- Объединённое сообщение, 5 ноя 2013 ---
    Да, заметил. Интересно, почему?
     
    Kиpилл и Dragokas нравится это.
  10. Гимаев Наиль
    Оффлайн

    Гимаев Наиль Пользователь

    Сообщения:
    59
    Симпатии:
    98
    Подозреваю, что из-за админских прав. По крайней мере cmd забывает рабочую папку, если запустить под админскими правами.
    Другими словами повышенные права меняют контекст, например, переменные окружения. Не проверял, но это кажется логичным. В противном случае можно было бы подменить админу %ComSpec%
     
    Последнее редактирование: 6 ноя 2013
    Kиpилл нравится это.
  11. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Проверил, права не влияют.
    Но и ошибок не выдает, когда имя файла неверное.
     
  12. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.226
    Симпатии:
    4.980
    Так ViruLogs Collector by Dragokas будет упакован в HTA?
     
  13. Гимаев Наиль
    Оффлайн

    Гимаев Наиль Пользователь

    Сообщения:
    59
    Симпатии:
    98
    Посмотрел поближе на mshta. В mshta зашито игнорирование относительных путей. Путь обязательно должен быть полным (с именем диска) или сетевым. Иначе mshta просто закрывается. Зато если путь полный, mshta запустится, не смотря на фактическое отсутствие файла.
    --- Объединённое сообщение, 6 ноя 2013, Дата первоначального сообщения: 6 ноя 2013 ---
    Я хотел предложить упаковывать ViruLogs Collector в самораспаковывающийся архив rar так, как это делает CureIt.
    Тогда сценарий использования будет выглядеть так:
    1. Пользователь скачивает единственный исполнимый файл с сайта и запускает его
    2. Тот в тихом режиме распаковывается в папку temp (средствами sfx)
    3. Оттуда запускается (средствами sfx) HTA с красивым и понятным интерфейсом
    4. В HTA два режима: "Стандарт" и "Эксперт" по аналогии с DriverPack Solution. В стандартном режиме одна большая кнопка "Старт". В режиме эксперта Можно задать параметры сбора логов и сетевые настройки. На основе настроек создаётся ini файл, который передаётся на вход батнику дополнительным параметром.
    5. Скрытый батник ведёт логирование, hta отображает ход процесса.

    Для чего это нужно.
    Во-первых, пользователю не нужна будет инструкция для того, чтобы найти исполняемый файл среди множества вспомогательных.
    Во-вторых, у исполняемого файла появляется красивая иконка, которой не может быть не у батника, не у hta.

    Но взамен мы имеем три уровня вместо одного, на каждом из которых могут быть проблемы:
    * не корректная переменная %temp% - sfx-архив не распакуется (и CureIt! тоже)
    * повреждён IWebBrowser или IE - не запуститься HTA
    * заблокирован CMD - не запуститься батник
    К счастью, большинство из этих проблем может быть решено inf-файлом.
     
    Последнее редактирование: 6 ноя 2013
    Kиpилл, Dragokas и shestale нравится это.
  14. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Koza Nozdri,
    Пока на HTA планируется только расблокировка файловых ассоциаций.
    + делаю заготовку интерфейса. В переводе кода особо нет сложностей.
    WGET, к примеру, все равно будет использоваться. Не собираюсь отказываться.
    Чем смотрел?
    или пользователь, который удаляет IE.
     
    Последнее редактирование: 6 ноя 2013
    Kиpилл нравится это.
  15. Гимаев Наиль
    Оффлайн

    Гимаев Наиль Пользователь

    Сообщения:
    59
    Симпатии:
    98
    ProcMon.exe от sysinternal. В глаза бросается, что mshta даже не пытается искать файлы с относительным путём.
    --- Объединённое сообщение, 6 ноя 2013, Дата первоначального сообщения: 6 ноя 2013 ---
    Т.к. IWebBrowser используется в работе "Установка, удаление программ" (в XP точно, а про Win7+ не уверен), то есть подозрение, что даже после удаления IE, mshta будет продолжать работать.
     
    FraidZZ и Dragokas нравится это.
  16. regist
    Оффлайн

    regist гоняюсь за туманом Ассоциация VN/VIP VIP Разработчик

    Сообщения:
    11.382
    Симпатии:
    5.268
    или просто г***сборка, где его вырезали как не нужный и не используемый элемент.
     
  17. Kиpилл
    Оффлайн

    Kиpилл Команда форума Администратор

    Лучший автор месяца

    Сообщения:
    12.226
    Симпатии:
    4.980
    В любом случае удаление IE и сопровождающих компонентов влечет за собой нарушение работоспособности функционала операционной системы,в природе встречается не часто.
     
    Гимаев Наиль и FraidZZ нравится это.
  18. Dragokas
    Оффлайн

    Dragokas Very kind Developer Команда форума Супер-Модератор Разработчик Клуб переводчиков

    Сообщения:
    4.493
    Симпатии:
    4.310
    Стоит протестировать. В интернетах раньше часто видел советы, как удалить IE.
     
    FraidZZ нравится это.
  19. FraidZZ
    Оффлайн

    FraidZZ Новый пользователь

    Сообщения:
    16
    Симпатии:
    18
    Авторам таких советов мозг надо вставить - браузер-то хоть и г..., но системный элемент всё же
     
  20. regist
    Оффлайн

    regist гоняюсь за туманом Ассоциация VN/VIP VIP Разработчик

    Сообщения:
    11.382
    Симпатии:
    5.268
    только на XP и г****сбощиков это не останавливает.
     
    Kиpилл нравится это.

Поделиться этой страницей