Pergunta

Eu estou construindo um pouco de ATS para uso pessoal, e gostaria de ser capaz de arrastar e soltar um arquivo para a interface.Uma vez que o arquivo é ignorado, eu estaria automaticamente executá-lo (supondo que ele se encaixa eu definir alguns parâmetros, como a extensão de arquivo), ou pelo menos de preenchimento na caixa de entrada na HTA interface.

Eu procurei muito, mas não consegue encontrar uma solução.Pensamentos?

Foi útil?

Solução

Obviamente, um HTA não pode ser alvo de uma operação de queda de shell - pelo menos no meu sistema, é impossível soltar algo em um HTA.

Isso implicaria que você não pode diretamente Faça o que você pretende.

A .VBS, no entanto, pode ser um alvo de queda. Caminhos completos dos arquivos descartados estão disponíveis através do WScript.Arguments.Unnamed coleção.

HTA tem acesso aos seus argumentos de linha de comando via A propriedade CommandLine. Isso significaria que você poderia criar um pequeno auxiliar VBScript que traduz os arquivos descartados em uma linha de comando e chama o HTA para você.

Observe que você não pode soltar quantidades infinitas de arquivos em um .vbs e as linhas de comando também não são ilimitadas. Haverá um limite de comprimento na área de alguns KB (não tentei descobrir onde está exatamente o limite, apenas esteja preparado para enfrentar um limite.)

Outras dicas

Tomalak, está incorreto em sua declaração ... Há uma maneira de fazer o que você deseja, exceto que você deve adicionar o Drofhandler no registro para arquivos HTA que é realmente fácil de fazer e, uma vez feito, você poderá fazer exatamente o que você está tentando tentar façam. Não consegui encontrar muita documentação, mas aqui está um link para um HTA que foi escrito há muito tempo por um cara chamado Michel Gallant, que mostra como: http://www.jensign.com/javascience/www/wsh/imager/index.html

Quando o HTA é lançado, ele parece ver se você já está configurado para o Drophandler. Se não o fizer, isso lhe dá a opção para configurá -lo para você. Depois de configurar tudo o que você precisa fazer é fechar e reabrir o HTA e o Wallah, lá vai arrastar e soltar suporte em arquivos HTA.

Se você não deseja ativar o manipulador de gota, eu poderia imaginar uma maneira de isso ser possível. É uma cadeia de comédia, mas eu pude me ver implementando isso se fosse apoiado em um canto e precisasse dessa funcionalidade.

Você pode criar um iframe que tenha seu SRC como uma pasta temporária em algum lugar. Esta pasta será exibida como uma visualização do Explorer. Você pode arrastar arquivos para isso. Configure uma rotina de votação nessa pasta para ver se existem novos arquivos. E pronto, você tem uma maneira esfarrapada de suportar operações de arrastar e soltar com um determinado arquivo.

Vá e experimente o Google Gears, que fornece arrastar e soltar.

Você pode até usar o MySQL no HTA.

O Google Gears não está disponível no HTA, no entanto, você pode criar o ActiveXObject em um arquivo html e depois incluí -lo usando um iframe(<iframe application="true" src=".."></iframe>)

Depois disso, você pode usar o activexobject através de iframe.

Em relação ...

gostaria de ser capaz de arrastar e soltar um arquivo para o [ATS] interface

... o que eu interpreto como um desejo de largar ficheiros para a HTA' com janela, em vez de soltar os arquivos na HTA próprio arquivo ou um atalho para ele.

Com o HTML5, o cair em si é fácil.Use e.g.um <div> elemento como uma gota de área.Para este elemento identificador de eventos dragenter, dragover e drop.E. g.a queda do manipulador pode olhar como este:

function on_drop( e )
{
    e.preventDefault();  // stops the browser from redirecting off to the file
    var dt = e.dataTransfer

    var is_file_transfer = false;
    for( var i = 0; i < dt.types.length; ++i )
    {
        if( dt.types[i].toLowerCase() == 'files' )
        {
            is_file_transfer = true;
        }
    }
    if( !is_file_transfer )
    {
        return false;
    }
    on_files_dropped( dt.files );
    return true;
}

... onde on_files_dropped é uma função definida por você que lida com arquivos de queda.

Adicionar manipuladores de eventos dinamicamente no documento carregado do evento, pode ficar assim:

var dropbox = document.getElementById( 'blah' );
dropbox.addEventListener( 'dragenter', on_dragenter, false );
dropbox.addEventListener( 'dragover', on_dragover, false );
dropbox.addEventListener( 'drop', on_drop, false );

Tão longe, tão bom.

No entanto, a segurança intervém com uma restrição: você não obter conhecimento direto do arquivo original caminhos, apenas os nomes dos arquivos e os tamanhos de arquivo.Para esta funcionalidade é projetado para a web, não para locais confiáveis aplicações HTML.Então ele pode ou pode não ser, necessariamente, um problema.

  • Com o objetivo de utilizar um arquivo caiu como uma origem para um elemento HTML, e em geral para a leitura de um arquivo caiu, o HTML5 fornece uma FileReader (há um número de tutoriais disponíveis, que ligam mais para documentação técnica).

  • Onde um caminho local é necessária, por exemplo,para reproduzir um arquivo no Windows Mediaplayer, você pode suponha que a operação de arrastar originou-se com o Windows Explorer, agora também chamado de Explorador de ficheiros e, em seguida, basta verificar qual a janela do Explorador, se houver, contém um arquivo com o mesmo nome e tamanho.

Tomara que não seja mais do que um tal de origem janela será encontrado.

var shell   = new ActiveXObject( "Shell.Application" );
var fso     = new ActiveXObject( "Scripting.FileSystemObject" );

function possible_paths_for( filename )
{
    var windows     = shell.windows();      // Windows Explorer windows.
    var n_windows   = windows.Count;

    var lowercase_filename = filename.toLowerCase();
    var paths = Array();
    for( var i = 0; i < n_windows; ++i )
    {
        var url     = windows.Item(i).LocationURL;
        var path    = decodeURI( url.substr( 8 ) ).replace( /\//g, '\\' );
        // The path can be the path of this HTML application (.hta file), so:
        if( fso.FolderExists( path ) )
        {
            var folder  = fso.GetFolder( path );
            for( var it = new Enumerator( folder.Files ); !it.atEnd(); it.moveNext() )
            {
                var file = it.item();
                if( file.Name.toLowerCase() == lowercase_filename )
                {
                    paths.push( file.Path.toLowerCase() );
                }
            }
        }
    }
    return paths;
}

Essencialmente é isso.Exceto, talvez, desde os HTAs padrão para o IE7, como é que um ser funcionalidades do HTML5.Bem pode, através de declaração de doctype, mas até agora na minha pequena experiência que eu só uso o seguinte:

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <!-- A windows web control defaults to quirky IE7 semantics. Request for better: -->
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta http-equiv="MSThemeCompatible" content="yes">

Isso dá a você mais recente do Internet Explorer motor, mas ao custo de não HTA elemento, e, portanto, sem acesso direto para a linha de comando.Eu achei que a linha de comando pode ser obtida executando o Windows' wmic programa, mas que é uma enorme hack.Toda esta área do problema, com a maioria aparentemente abrir estradas transformando a ser fechado, parece ser uma conseqüência da Microsoft agora a considerar os HTAs um legado tecnologia, para ser baixinho eliminados em favor de tela inteira de anúncio-ridden Windows 8 aplicativos da AppStore.

De qualquer maneira, boa sorte!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top