1 (изменено: wisgest, 2008-01-29 10:41:57)

Тема: Реестр: Перетаскивание файлов и папок на значок HTA-приложения

HTA позволяют при вызове указывать аргументы, однако передать в качестве аргумента пути к файлам и папкам перетащив их в Проводнике на значок приложения нельзя.
Чтобы исправить это упущение, можно использовать соответствующее расширение оболочки для сценариев WSH:

REGEDIT4

[HKEY_CLASSES_ROOT\htafile\shellex\DropHandler]
@="{60254CA5-953B-11CF-8C96-00AA00B8708C}"

Можно также использовать расширение оболочки для .exe, .com, .bat, ... файлов:

REGEDIT4

[HKEY_CLASSES_ROOT\htafile\shellex\DropHandler]
@="{86C86720-42A0-1069-A2E8-08002B30309D}"

но в этом случае пути передаются в коротком (8.3) формате. Предполагаю, что это происходит потому, что hta-файл не имеет расширения ".bat" или ".cmd" и не является 32-разрядным Windows-приложением.

Если нет желания вносить изменения в реестр, то для решения задачи для отдельно взятого hta-приложения можно создать ярлык на mshta.exe указав в качестве аргумента полный путь к hta-файлу (в кавычках, если он содержит пробелы) и выполнять перетаскивание на этот ярлык. Кстати, в этом случае можно использовать расширение отличное от ".hta".

Простой пример для тестирования:

<HTML>
<HEAD>
<META http-equiv='Content-Type' content='text/html; charset=windows-1251'>
<HTA:APPLICATION id='App'/>
</HEAD>

<BODY>
<PRE>
Командная строка:
<STRONG><SCRIPT language='JavaScript'>
document.write(App.commandLine);
</SCRIPT></STRONG>

Рабочая папка:
<STRONG><SCRIPT language='JavaScript'>
document.write(
  (new ActiveXObject("WScript.Shell")).CurrentDirectory
);
</SCRIPT></STRONG></PRE>
</BODY></HTML>