Pergunta

Estou tentando usar Shellexecute Para abrir um arquivo no Excel. Eu estava lendo sobre a função nos fóruns do MSDN e encontrei as informações seguintes sobre o identificador, que é o primeiro parâmetro:

"HWND [in] uma alça na janela do proprietário usada para exibir uma interface de usuário (UI) ou mensagens de erro. Esse valor pode ser nulo se a operação não estiver associada a uma janela."

Eu também ouvi isso referido como o identificador da janela dos pais. Qual é a janela dos pais/proprietário? Como você vê abaixo, estou usando nulo para a alça, mas como a operação está realmente associada a uma janela, provavelmente preciso de uma alça, mas não sei o que usar para o identificador.

ShellExecute(NULL, "open" ,"Excel.exe", 
    "C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls", 
    NULL, SW_SHOWNORMAL);
Foi útil?

Solução

Isso é geralmente 0

HWND: janela dos pais que receberão uma possível caixa de mensagem. Este parâmetro é geralmente 0.

Refere-se à janela de nível superior: a janela que você está abrindo não possui nenhum pai e é a janela principal para o aplicativo que está sendo executado.

Quando você está alternando entre aplicativos (alt-tAB), você exibe a próxima janela de nível superior (o próximo aplicativo com um identificador pai é igual a 0) na ordem Z (por exemplo).

Claro, o pai do seu aplicativo não pode ser a própria janela da área de trabalho:

Se você criar uma janela infantil cujo pai é getdesktopwindow (), sua janela agora está colada à janela da área de trabalho. Se a sua janela chama algo como MessageBox (), bem, essa é uma caixa de diálogo modal e, em seguida, as regras acima entram em andamento e a área de trabalho é desativada e a máquina é torrada.

Para o caminho, eu aconselho as citações duplas em torno de citações simples: " ' ... ' "

"'C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls'"

Também poderia funcionar (não testado) com cotações duplas: " "" ... "" "

"""C:\\Documents and Settings\\Lab1\\My Documents\\Test.xls"""

, como ilustrado por este tópico.


Na verdade, como mencionado em sua outra pergunta por Andy e por Mesidina, e em Manual da função Shellexecute, você pode abrir o arquivo e passar seu caminho no parâmetro.

ShellExecute( NULL, "open", 
              "Test.xls", "C:\\Documents and Settings\\Lab1\\My Documents\\", 
              NULL, SW_SHOWNORMAL);

Isso significa que o Excel é o aplicativo padrão para abrir arquivos de extensão .xls.

Outras dicas

Quando você o vê descrito como o "identificador até a janela dos pais", significa que é a janela que vai ser A janela dos pais de qualquer UI que a função opte por ser exibida. A alça que você passa pode ou ainda não ser o pai de outra janela no momento em que você liga ShellExecute, mas isso não importa.

Por que você está especificamente Shellexuecting Excel? Se eles têm o OpenOffice.org, eles estão quebrados - você realmente deve estar invocando o verbo "aberto" no arquivo de planilha, não precisa codificar o nome "Excel", é para isso que serve a Shellexecute.

Existe algum motivo específico, você está usando o Shellexecute?

Você pode abrir um arquivo XLS usando [System.diagnostics.] Process.start [Nome do arquivo
Peço desculpas, não olhei para tags e assumi que você está usando .NET

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