1

Тема: HTA: ResizeTo - отказано в доступе

Есть простейший код:

+ открыть спойлер
<head>
  <title>My Project</title>

  <HTA:APPLICATION
    APPLICATIONNAME="Test Project"
    ID="objHTA"
    VERSION="1.0"
    BORDER="thin"
    BORDERSTYLE="raised"
    MAXIMIZEBUTTON="no"
    MINIMIZEBUTTON="yes"
    ICON="logo.ico"
    SCROLL="no"
    CONTEXTMENU="no"
    NAVIGABLE="no"
    SELECTION="no"
    SINGLEINSTANCE="yes"
    WINDOWSTATE="normal"
  />
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<script language="VBScript">
Option Explicit
On Error Resume Next

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

Sub Window_onLoad()
  self.Focus()
  SetSize()
End Sub

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

Sub My_Click()
    msgbox "My_Click"
End Sub

</script>

<html>
<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>

<BODY BACKGROUND="images/logo_sz.png"
  BGCOLOR="Aqua"
  TEXT="Yellow"
  LINK="#FF0000"
  VLINK="#505050"
  MARGINHEIGHT="30"
  TOPMARGIN="30"
  LEFTMARGIN="40"
  MARGINWIDTH="40">

  <H1 ALIGN="center">Выберите в меню версию Вашей операционной системы,а так же соответствую разрядность</H1>
  <p>Параметры выбраны?</p>

  <input type="button" value="Установить запуск системных служб по умолчанию" name="run_button" onClick="My_Click()">
</body>
</html>

1 из 5-10 запусков выдает ошибку "Отказано в доступе"
на строке с "window.resizeTo x, y" (чаще всего на ОС Windows XP)

В MSDN нашел решение через добавление разрешения в раздел HKLM:
http://support.microsoft.com/kb/942173/ru (еще не проверял)

Смущает, что для этого мне понадобятся повышенные привилегии.
И хоть для меня это не проблема,
может есть более простое решение?
(как, к примеру, заранее задать размер и положение окна, если это возможно).

Подскажите, пожалуйста, как бы Вы решили эту задачу.

2

Re: HTA: ResizeTo - отказано в доступе

Когда-то налетал на нечто подобное. Не уверен, но попробуйте выставить размер отдельным скриптом в head:

<head>
<title>...</title>
<meta .../>
<script ...>
  здесь меняем размер окна (и только!)
</script>
<hta:application
 ...
/>
</head>

И, надеюсь, открывающий тег <html> исчез при копипасте, а в реальном HTA он на месте.

3 (изменено: Dragokas, 2013-11-25 23:16:54)

Re: HTA: ResizeTo - отказано в доступе

Serge Yolkin, спасибо.

На счет тега - он у меня начинается после тела скрипта.
Я где-то прочитал, для обхода ошибки, нужно чтобы форма отрисовывалась после выполнения самого скрипта.
Но похоже мне это не помогло.
С правильной структурой HTA, увы, я не знаком. Только осваиваю это направление.

1) А в Вашем примере куда нужно подставить теги HTML?
2) Видел еще такой пример, когда скрипт <script ...> внутри окружался комментариями. Это обязательно?
<script ...>
<!--
//-->
</script>

P.S. Вот... упростил до такого:

+ открыть спойлер
<head>
  <title>My Project</title>
  <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<script language="VBScript">
On Error Resume Next

Sub Window_OnLoad()
  SetSize()
End Sub

Sub SetSize()
  x=700: y=550
  window.resizeTo x, y
  window.moveTo ((screen.availWidth / 2) - (x / 2)), ((screen.availHeight / 2) - (y / 2))
End Sub

</script>

<HTA:APPLICATION
    APPLICATIONNAME="Test Project"
    ID="objHTA"
    SINGLEINSTANCE="yes"
  />

</head>

<html>

<BODY BACKGROUND="images/logo_sz.png"
  BGCOLOR="Aqua"
  TEXT="Yellow"
</body>

</html>

не помогло.
Иногда с 1-го, иногда с 15-го раза - выдает ту же ошибку.
Несмотря на то что, SingleInstance = true, если несколько раз подряд запустить (раз 10-20), на заднем плане увидим окно с ошибкой.

4

Re: HTA: ResizeTo - отказано в доступе

<html>

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

  <hta:application
   applicationName="Test Project"
   id="objHTA"
   singleInstance="yes"
   />

  <script language="VBScript">
    On Error Resume Next
    window.resizeTo 700, 550
    window.moveTo ((screen.availWidth / 2) - 350), ((screen.availHeight / 2) - 275)
  </script>
</head>

<body
 comment=background="images/logo_sz.png"
 bgcolor="aqua"
 text="yellow"
 >
</body>

</html>

5

Re: HTA: ResizeTo - отказано в доступе

Спасибо, Serge Yolkin.
У меня получилось.
Ваш код делает иногда Resize раньше чем появляется форма... в итоге ничего не происходит.

Я добавил запуск по событию:
Sub Window_onLoad()

Запускал множество раз на "требовательной" системе. Ошибки больше не проявлялись.