Manuse for shellexecute () - Janela dos pais?
-
10-07-2019 - |
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);
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