2014-12-29 6 views
0

Вот код файла HTA:Открыть файл с приложением HTA

<html> 
<head> 
    <title>HTA application</title> 
    <script type="text/javascript"> 
      function f(x){alert("You opened the file " + x)} 
    </script> 
</head> 
<body> 
    Here's some text in an HTA application... 
</body> 
</html> 

Есть ли способ связать расширение файла с этим HTA приложение на Windows, так что, когда вы открываете файл с этим расширением он открывает приложение HTA и выполняет ли функция f(path), где path - путь к открытому файлу?

EDIT:

Это может быть может помочь найти решение:

<script type="text/javascript"> 
    window.onload = function(){ 
     var arr = location.href.split("?"); 
     if(arr.length == 2){ 
      f(arr[1]); 
     } 
    } 
</script> 

Так что, когда я открываю файл, я хочу, чтобы открыть URL с именем HTA файла с последующим " ?» за которым следует имя открытого файла. Помещение «чего-то» после URL-адреса не изменяет открытый файл, но свойство location.href обнаруживает его. Вопрос в том, как это сделать в реестре? Что-то вроде C:\Users\Donald\example.hta + "?" + %1 в HKEY_CLASSES_ROOT\examplefile\shell\open\command может быть?

Я по-прежнему принимаю другие решения оригинального вопроса, это всего лишь предложение о том, как найти ответ.

ответ

0

Этот ответ не является чисто HTA, поскольку он включает создание исполняемого файла с C/C++. Мне удалось открыть файл с HTA, создав исполняемый файл с C/C++ (в данном случае это точно такой же код на обоих языках), который я помещаю в ту же папку, что и HTA, который содержит этот код:

#include <windows.h> 
#include <string.h> 

int main(int argc,char *argv[]){ 
    if(argc == 1){ 
     char *toOpen = malloc(strlen(argv[0]) + 47); 
     strcpy(toOpen,"\"C:\\Windows\\System32\\mshta.exe\" \""); 
     strcat(toOpen,argv[0]); 
     *strrchr(toOpen,'\\') = '\0'; 
     strcat(toOpen,"\\example.hta\""); 
     WinExec(toOpen,SW_SHOWMAXIMIZED); 
     free(toOpen); 
    } 
    else{ 
     char *toOpen = malloc(strlen(argv[0]) + strlen(argv[1]) + 48); 
     strcpy(toOpen,"\"C:\\Windows\\System32\\mshta.exe\" \""); 
     strcat(toOpen,argv[0]); 
     *strrchr(toOpen,'\\') = '\0'; 
     strcat(toOpen,"\\example.hta?"); 
     strcat(toOpen,argv[1]); 
     strcat(toOpen,"\""); 
     WinExec(toOpen,SW_SHOWMAXIMIZED); 
     free(toOpen); 
    } 
    return 0; 
} 

Для тех, кто не знаком с C или C++, это язык, используемый для создания exectuables (.exe-файлов) и не имеет ничего общего с HTML или HTA, поэтому не пытайтесь вставить этот код в HTA-файл. Если вы не знаете C или C++, я рекомендую прочитать учебное пособие на одном из этих языков (или обоих), например this one for C или this one for C++ (или найти учебники в Google).

Затем я вставил следующий код в HTA:

<script type="text/javascript"> 
    window.onload = function(){ 
     var arr = location.href.split("?"); 
     if(arr.length == 2){ 
      f(arr[1]); //f() is the function called when opening a file 
     } 
    } 
</script> 

И поместить этот код в реестре ключа HKEY_CLASSES_ROOT\examplefile\shell\open\command (стандартный код для открытия файла с исполняемым файлом):

"C:\Users\Donald\example.exe" "%1" 
1

Нет, любое расширение не может этого сделать. Вам нужно будет как-то вызвать вашу функцию. Либо с помощью прямого вызова после объявления функции, например так:

f(window.location.href); 

... или заменить заявление с IIFE (Сразу Вызывается функция Expression):

(function f(x){alert("You opened the file " + x)}(window.location.href)); 

window.location.href содержит протокол и полный путь к файлу. Если вам нужен только путь, используйте window.location.pathname.

Смежные вопросы