• Администрация SafeZone приветствует вас на нашем форуме!
    Если вы больше не желаете видеть рекламу при просмотре тем и сообщений - то достаточно просто зарегистрироваться. Для зарегистрированных пользователей реклама не отображается.

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

Кирилл

Команда форума
Администратор
Сообщения
13,129
Симпатии
5,706
#1
Хм...кто знает как прикрутить кнопку ОК к выбору?
Ошибка получается как ни пробую.
Код:
<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>
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,503
Симпатии
5,332
#2

Кирилл

Команда форума
Администратор
Сообщения
13,129
Симпатии
5,706
#3
Ну это и понятно,я имею ввиду вот выбрал пользователь Windows 7 Home Premium *64 bit под номером 5,и как передать в кнопку sub5 с твиком (то есть команду 5)
Через choice может ?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,503
Симпатии
5,332
#4
P.S. Primal Script пользовался?
Скачай. Там перетягиваешь .HTA в главное окно программы и можно легко редактировать контролы,
+ когда добавляешь новый там сразу создается функция под нее.
 

Кирилл

Команда форума
Администратор
Сообщения
13,129
Симпатии
5,706
#5
Сейчас попробую.
Мне вообще непонятно как в vbs организовать выбор меню с подтверждением,пытаюсь разобрать)

ага,первая ошибка (не дописал ссылки):
Код:
<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="" передать
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,503
Симпатии
5,332
#6
Код:
                set lbl = document.getElementById("Wait")
                s = lbl.ChildNodes(lbl.Value).InnerText
                msgbox s
Держи браузер объектов (тоже на HTA) :)
Переименуй свой HTA в HTML.
Открой object browser, жми открыть, открывай свой .html и можешь пробежаться по объектам,
например так: document -> body -> all -> Wait -> Childnodes ...

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

glax24

Разработчик
Сообщения
2,002
Симпатии
1,489
#7
Кирилл я правильно понял ос и разрядность должен выбрать сам пользователь. Если да то многие даже не догадываются какая у них ос, а разрядность и подавно, может сделать автовыбор.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,503
Симпатии
5,332
#8
Вообще по объектам можно легко пробежаться через VB6/VBA (Excel, например):

Код:
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). Но на обычные интернетовских страничках этот способ замечательно работает.
Кирилл я правильно понял ос и разрядность должен выбрать сам пользователь. Если да то многие даже не догадываются какая у них ос, а разрядность и подавно, может сделать автовыбор.
Мне вот тоже давно интересно что это ты такое изобретаешь...
 

Вложения

Последнее редактирование:

Кирилл

Команда форума
Администратор
Сообщения
13,129
Симпатии
5,706
#9
может сделать автовыбор.
автовыбор нельзя,Саша помню на твоей утилите был баг где ОС определялась неверно?
вот этого и хочу избежать.

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

в общем я не придумал идеального способа определить ось автоматически,теперь делаю шаблон с выбором пользователем-так ответственность у пользователя за выбор.как вот такая конструкция?
вот еще вариант накидал,с ним вроде как жизнь прояснилась:
Код:
<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>
может правда фиг с ним автоопределение сделать... upload_2013-12-7_3-46-22.png
 

Вложения

Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,503
Симпатии
5,332
#10
Koza Nozdri, давай тогда сделаем дополнительную сверку по косвенным признакам. Если уж эта проверка так важна.
По нескольким местам в реестре, по файловым признакам... Если возникли разбежности, спрашивать у пользователя.

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

Гимаев Наиль

Активный пользователь
Сообщения
59
Симпатии
98
#11
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>
 

Кирилл

Команда форума
Администратор
Сообщения
13,129
Симпатии
5,706
#12
Гимаев Наиль, вы неплохо в этом разбираетесь)
Для самопроверки пробую прочитать:
(с js у меня пока весьма туго)
Код:
::пишем функцию 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>функция
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,503
Симпатии
5,332
#13
назначаем переменную select
я бы сказал: присваиваем переменной объект, указанный под ID "A
::получаем номер возвращаемого элемента value
нет.
номер выбранного элемента.
соответственно, получаем объект - отмеченный option
получаем значение этого объекта (т.е. сама надпись).
 

Гимаев Наиль

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

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

Вложения

Последнее редактирование: