HTA HTA: Как назначить кнопку выбора select?

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

  1. Kиpилл
    Оффлайн

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

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

    Сообщения:
    12.208
    Симпатии:
    4.977
    Хм...кто знает как прикрутить кнопку ОК к выбору?
    Ошибка получается как ни пробую.
    Код (Text):
    <html>
      <head>
            <meta charset="windows-1251">
            <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
            <meta http-equiv="Content-Language" content="ru">
            <title>Восстановление запуска системных служб по умолчанию</title>  
          <hta:application
          borderStyle="complex"
          windowState=" minimize"
          innerBorder="yes"
          selection="yes"
          scroll="no"
          caption="yes"
          maximizebutton="yes"
          minimizebutton="yes"
          contextmenu="yes" />
            <style type="text/css">
                BODY {
                    font: x-small Verdana, Arial, sans-serif;
                    color: WindowText;
                    background-color: ButtonFace;
                }
                .Row {
                    clear:both;
                }
                .Left {
                    float:Left;
                    clear:none;
                }
                .Right, SELECT {
                    float:Right;
                    clear:none;
                }
            </style>
         
            <script language="VBScript">
            Sub GetOSVersion
            strComputer = "."
            Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
            Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")
            For Each objOperatingSystem in colOperatingSystems
            Msgbox objOperatingSystem.Caption & " " & objOperatingSystem.Version
            Next
            End Sub
            </script>
         
            <script language="VBScript">      
                         
                Sub tweak
             
                End Sub
                </script>
             
                <script language="VBScript">      
                         
                Sub tweak2
             
                End Sub
                </script>
             
                <script language="VBScript">      
                         
                Sub tweak3
             
                End Sub
                </script>
             
                <script language="VBScript">      
                         
                Sub tweak4
             
                End Sub
                </script>
             
                <script language="VBScript">      
                         
                Sub tweak5
             
                End Sub
                </script>
             
                <script language="VBScript">      
                         
                Sub tweak6
             
                End Sub
                </script>
             
                <script language="VBScript">      
                         
                Sub tweak7
             
                End Sub
                </script>
             
                <script language="VBScript">      
                         
                Sub tweak8
             
                End Sub
                </script>  
                 
        </head>
     
     
        <br><br><br>
     
        <body id="tagBody" scroll="auto">
            <span Class="Row">
                <span Class="left"><span id="lblChoice">Версия Windows: </span></span>
                <span Class="right">
                    <select name="Wait" id="Wait" size="1">
                        <option value="1" selected> Windows 7 Ultimate *64 bit
                        <option value="2"> Windows 7 Ultimate *32 bit
                        <option value="3">Windows 7 Professional SP1 *64 bit
                        <option value="4">Windows 7 Professional SP1 *32 bit
                        <option value="5">Windows 7 Home Premium *64 bit
                        <option value="6">Windows 7 Home Premium *32 bit
                        <option value="7">Windows 7 Windows 7 Home Basic
                        <option value="8">Windows 7 Starter
                    </select>
                </span>
            </span>
            <span Class="Row"><br>
                <span Class="left"><span id="lblOK">Выберите из списка Вашу версию Windows и нажмите кнопку "OK"</span></span>
                <span Class="right"><input type="Button" name="OK" value="OK"></span>
            </span>
        </body>
     
    <br><br><br>  


     
    <body STYLE="font:12 pt arial; color:white;
      filter:progid:DXImageTransform.Microsoft.Gradient (GradientType=1, StartColorStr='#000000', EndColorStr='#0000FF')">
    <input type="button" value="Показать версию ОС..." name="run_button"  onClick="GetOSVersion">

    </body>
     
        <script language="VBScript">
            With window
                .resizeTo 500, tagBody.scrollHeight + 220
                .moveTo (.screen.availWidth - tagBody.offsetWidth) \ 2, (.screen.availHeight - tagBody.offsetHeight) \ 2
            End With
        </script>
    </html>
     
  2. Dragokas
    Оффлайн

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

    Сообщения:
    4.477
    Симпатии:
    4.306
    Koza Nozdri, какая ошибка?
    Также как и "Показать версию ОС":
    onClick="GetOSVersion"
     
  3. Kиpилл
    Оффлайн

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

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

    Сообщения:
    12.208
    Симпатии:
    4.977
    Ну это и понятно,я имею ввиду вот выбрал пользователь Windows 7 Home Premium *64 bit под номером 5,и как передать в кнопку sub5 с твиком (то есть команду 5)
    Через choice может ?
     
  4. Dragokas
    Оффлайн

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

    Сообщения:
    4.477
    Симпатии:
    4.306
    P.S. Primal Script пользовался?
    Скачай. Там перетягиваешь .HTA в главное окно программы и можно легко редактировать контролы,
    + когда добавляешь новый там сразу создается функция под нее.
     
  5. Kиpилл
    Оффлайн

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

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

    Сообщения:
    12.208
    Симпатии:
    4.977
    Сейчас попробую.
    Мне вообще непонятно как в vbs организовать выбор меню с подтверждением,пытаюсь разобрать)

    ага,первая ошибка (не дописал ссылки):
    Код (Text):
    <option value="tweak1" selected> Windows 7 Ultimate *64 bit
                        <option value="tweak2"> Windows 7 Ultimate *32 bit
                        <option value="tweak3">Windows 7 Professional SP1 *64 bit
                        <option value="tweak4">Windows 7 Professional SP1 *32 bit
                        <option value="tweak5">Windows 7 Home Premium *64 bit
                        <option value="tweak6">Windows 7 Home Premium *32 bit
                        <option value="tweak7">Windows 7 Windows 7 Home Basic
                        <option value="tweak8">Windows 7 Starter
    получается это я должен в onClick="" передать
     
    Последнее редактирование: 6 дек 2013
  6. Dragokas
    Оффлайн

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

    Сообщения:
    4.477
    Симпатии:
    4.306
    Код (Text):
                    set lbl = document.getElementById("Wait")
                    s = lbl.ChildNodes(lbl.Value).InnerText
                    msgbox s
    --- Объединённое сообщение, 6 дек 2013 ---
    Держи браузер объектов (тоже на HTA) :)
    Переименуй свой HTA в HTML.
    Открой object browser, жми открыть, открывай свой .html и можешь пробежаться по объектам,
    например так: document -> body -> all -> Wait -> Childnodes ...

    (кнопка "загрузить" не работает) - отправил на FTP: http://Dragokas.16mb.com/Forum/Dl/ObjectBrowser_05.zip
     
    Последнее редактирование: 6 дек 2013
  7. glax24
    Оффлайн

    glax24 Разработчик

    Сообщения:
    2.000
    Симпатии:
    1.450
    Кирилл я правильно понял ос и разрядность должен выбрать сам пользователь. Если да то многие даже не догадываются какая у них ос, а разрядность и подавно, может сделать автовыбор.
     
  8. Dragokas
    Оффлайн

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

    Сообщения:
    4.477
    Симпатии:
    4.306
    Вообще по объектам можно легко пробежаться через VB6/VBA (Excel, например):

    Код (Text):
    Option Explicit

    Sub main()
        Dim sURL, appIE
        sURL = ThisWorkbook.Path & "\Choose.html"

        Set appIE = CreateObject("InternetExplorer.Application")
        With appIE
            .Visible = True
            .Navigate sURL
         
            Do While (.Busy Or .readyState <> 4): DoEvents: Loop
         
            Stop
            .Quit
        End With
    End Sub
    в IDE: view -> Local и там видны все ChildNodes объекта.
    Вот только IE как-то странно воспринимает HTA. Чтобы воспользоваться этим способом нужно удалить из HTA все, кроме HTML части.
    ... Хм, все равно не воспринимает (видимо нужно полностью разрешить ActiveX). Но на обычные интернетовских страничках этот способ замечательно работает.
    --- Объединённое сообщение, 6 дек 2013 ---
    Мне вот тоже давно интересно что это ты такое изобретаешь...
     

    Вложения:

    • Parse.png
      Parse.png
      Размер файла:
      88,2 КБ
      Просмотров:
      13
    Последнее редактирование: 6 дек 2013
  9. Kиpилл
    Оффлайн

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

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

    Сообщения:
    12.208
    Симпатии:
    4.977
    автовыбор нельзя,Саша помню на твоей утилите был баг где ОС определялась неверно?
    вот этого и хочу избежать.

    тут для этого есть кнопочка показать версию ОС
    макет во вложении

    в общем я не придумал идеального способа определить ось автоматически,теперь делаю шаблон с выбором пользователем-так ответственность у пользователя за выбор.
    --- Объединённое сообщение, 6 дек 2013 ---
    как вот такая конструкция?
    вот еще вариант накидал,с ним вроде как жизнь прояснилась:
    Код (Text):
    <html>
    <head>
    <title>лл</title>
    <HTA:APPLICATION
      APPLICATIONNAME="лл"
      ID="лл"
      BORDER="dialog"
      INNERBORDER="no"
      MAXIMIZEBUTTON="no"
      SCROLL="no"
      VERSION="1.0"/>
    </head>

    <script language="VBScript">

    Sub Window_OnLoad
          Dim width,height
          width=200
          height=200
          self.ResizeTo width,height
          self.MoveTo (screen.AvailWidth-width)/2,(screen.AvailHeight-height)/2
     
    End Sub
    Sub OnClickButtonOK()
     
      window.Close
    End Sub

    Sub OnClickButtonCancel()
     
      window.Close
    End Sub

    Sub OnChangeSelectвыбор()
      MsgBox выбор.value
     
    End Sub
    </script>

    <body bgcolor="buttonface">
    <table border=0 width=100% height=100%>
    <tr><td height=100% width=100% valign=top align=left>



    <select name="выбор" id="выбор" onchange="OnChangeSelectвыбор">
      <option value="tweak1" selected> Windows 7 Ultimate *64 bit
                        <option value="tweak2"> Windows 7 Ultimate *32 bit
                        <option value="tweak3">Windows 7 Professional SP1 *64 bit
                        <option value="tweak4">Windows 7 Professional SP1 *32 bit
                        <option value="tweak5">Windows 7 Home Premium *64 bit
                        <option value="tweak6">Windows 7 Home Premium *32 bit
                        <option value="tweak7">Windows 7 Windows 7 Home Basic
                        <option value="tweak8">Windows 7 Starter
    </select>

    </td></tr>
    <tr><td align=right>
    <input type="button" style="width: 80px" name="OK" id="OK" value="OK" onclick="OnClickButtonOK">&nbsp;&nbsp;
    <input type="button" style="width: 80px" name="Cancel" id="Cancel" value="Cancel" onclick="OnClickButtonCancel">
    </td></tr>
    </table>
    </table>
    </body>
    </html>
    --- Объединённое сообщение, 6 дек 2013, Дата первоначального сообщения: 6 дек 2013 ---
    может правда фиг с ним автоопределение сделать...
    --- Объединённое сообщение, 6 дек 2013 ---
    upload_2013-12-7_3-46-22.png
     

    Вложения:

    • Form3.7z
      Размер файла:
      1,4 КБ
      Просмотров:
      3
    Последнее редактирование: 6 дек 2013
  10. Dragokas
    Оффлайн

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

    Сообщения:
    4.477
    Симпатии:
    4.306
    Koza Nozdri, давай тогда сделаем дополнительную сверку по косвенным признакам. Если уж эта проверка так важна.
    По нескольким местам в реестре, по файловым признакам... Если возникли разбежности, спрашивать у пользователя.

    Кстати, у меня градиент так и не работает. Помню, какая то из твоих самый первых форм нормально отрабатывала.
     
    Kиpилл нравится это.
  11. Гимаев Наиль
    Оффлайн

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

    Сообщения:
    59
    Симпатии:
    98
    1. Пользователь не должен определять свою ОС сам.
    2. Нужно избегать использования VBS в пользу JS. Это позволит быстро получать ответы на форумах веб-разработчиков. К примеру, данная задача из области HTML, а не HTA.
    3. Учитывая, что подобная задача всё равно всплывёт в случае когда без мнения пользователя будет нельзя, приведу фрагмент, который должен помочь.
    HTML:
    <!DOCTYPE html>
    <html>
    <head>
    <script type="text/javascript">
    function clickOK() {
      var select = document.getElementById('A');
      var value = select.item(select.selectedIndex).value;
      var div = document.getElementById('result');
      div.innerText = value;
    }
    </script>
    </head>
    <body>
    <select id="A">
    <option value="v1">Значение 1</option>
    <option value="v2">Значение 2</option>
    <option value="v3">Значение 3</option>
    <option value="v4">Значение 4</option>
    </select>
    <button id="ok" onclick="clickOK();">OK</button>
    <div id="result"></div>
    </body>
    </html>
     
    Kиpилл и Dragokas нравится это.
  12. Kиpилл
    Оффлайн

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

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

    Сообщения:
    12.208
    Симпатии:
    4.977
    Гимаев Наиль, вы неплохо в этом разбираетесь)
    Для самопроверки пробую прочитать:
    (с js у меня пока весьма туго)
    Код (Text):


    ::пишем функцию clickOK для onclick
    function clickOK() {

    ::назначаем переменную select = id (А) так как select может быть несколько,переменная явная; document. - это объект документа?
      var select = document.getElementById('A');

    ::получаем номер возвращаемого элемента value
      var value = select.item(select.selectedIndex).value;

    :: помещаем новую переменную с полученным результатом в блок div

      var div = document.getElementById('result');
      div.innerText = value;
    }
    </script>
    </head>
    <body>
    ::тут все понятно ,все просто
    <select id="A">
    <option value="v1">Значение 1</option>
    <option value="v2">Значение 2</option>
    <option value="v3">Значение 3</option>
    <option value="v4">Значение 4</option>
    </select>

    ::тут тоже все понятно
    <button id="ok" onclick="clickOK();">OK</button>

    ::тут тоже понятно
    <div id="result"></div>функция
     
  13. Dragokas
    Оффлайн

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

    Сообщения:
    4.477
    Симпатии:
    4.306
    я бы сказал: присваиваем переменной объект, указанный под ID "A
    нет.
    номер выбранного элемента.
    соответственно, получаем объект - отмеченный option
    получаем значение этого объекта (т.е. сама надпись).
     
    Kиpилл нравится это.
  14. Гимаев Наиль
    Оффлайн

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

    Сообщения:
    59
    Симпатии:
    98
    Если считать js иностранным языком, то я тоже читаю его со словарём.
    Словарь беру здесь. Он не очень удобен, гораздо удобнее пользоваться chm-версией, но этот вариант сильно устарел за последние 10 лет.
    Я открываю html без js в Хроме. Нажимаю F12 и начинаю пробовать, что и какая команда выполняет.
    Для этого набираю в консоли команду, например
    select.selectedIndex
    Если команда выполняет то, что надо, то пробую более сложный вариант:
    select.item(select.selectedIndex)
    и т.д. до тех пор пока не буду уверен в действии всех команд.

    В основном, Dragokas всё объяснил. Но по поводу .value, стоит уточнить, что это не надпись, а значение атрибута value элемента (тега) option.
    А вот если захочется получить текст ("Значение 1" и т.п.), то вместо .value нужен .innerText.
     

    Вложения:

    • HTMLREF.zip
      Размер файла:
      2,5 МБ
      Просмотров:
      2
    Последнее редактирование: 14 дек 2013
    Kиpилл и Dragokas нравится это.

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