使用HTA应用程序打开文件

时间:2014-12-29 17:32:14

标签: 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>

有没有办法在Windows上将文件扩展名与此HTA应用程序相关联,这样当您打开具有此扩展名的文件时,它会打开HTA应用程序并执行f(path)其中path所在的功能打开文件的路径?

修改

这可能有助于找到解决方案:

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

所以当我打开文件时,我希望它打开一个带有HTA文件名后跟“?”的URL。然后是打开文件的名称。在URL之后放置“?something”不会更改打开的文件,但location.href属性会检测到它。问题是,我如何在注册表中执行此操作?像C:\Users\Donald\example.hta + "?" + %1中的HKEY_CLASSES_ROOT\examplefile\shell\open\command可能是什么?

我仍然接受原始问题的其他解决方案,这只是如何找到答案的建议。

2 个答案:

答案 0 :(得分:1)

不,任何扩展都不能这样做。你需要以某种方式调用你的函数。在声明函数后使用直接调用,如下所示:

f(window.location.href);

...或用IIFE(立即调用的函数表达式)替换声明:

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

window.location.href包含协议和文件的完整路径。如果您只需要路径,请使用window.location.pathname

答案 1 :(得分:0)

这个答案不仅仅是HTA,因为它涉及使用C / C ++创建可执行文件。我设法通过创建一个带有C / C ++的可执行文件(在这种情况下它与两种语言中的代码完全相同)打开一个带有HTA的文件,我将其放在与包含此代码的HTA相同的文件夹中: / p>

#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 Cthis 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"