Abrindo arquivos com a aplicação padrão a partir do PowerBuilder

O PowerBuilder possui uma função nativa para executar comandos externos (run), mas nem sempre ela funciona conforme o esperado. Este comando funciona muito bem para rodar outros executaveis ou linhas de comando de outra aplicação, mas abrir um .DOCX pode não  funcionar. Neste post, mostro uma alternativa.

Infelizmente, para fazer isso precisaremos de criar uma função externa, conforme o exemplo abaixo:

 

Uma vez que isso foi feito, agora precisamos apenas chamar esta função, certo? Sim, mas vamos dar uma olhada nos argumentos da função ShellExecuteW

  • ulong hWnd: Handle da janela associada a operação. Em teoria, este valor pode ser nulo se a operação que será realizada não depender ou não estiver associada a janela;
  • string Operation: Qual operação será realizada. Valores válidos são: edit, explore, find, open, print e NULL. (Você deve ter adivinhado, vamos utilizar a opção open.);
  • string lpFile: Arquivo que será utilizado na operação;
  • string lpParameters: Parametros que serão passados para a aplicação;
  • string lpDirectory: Diretório atual/de trabalho. (working directory);
  • int nShowCmd: Flag que indica como o arquivo deve ser exibido após aberto. Como esta flag será interpretada é a responsabilidade da aplicação que está recebendo a requisição. Valores válidos: SW_HIDE, SW_MAXIMIZE, SW_MINIMIZE, SW_RESTORE, SW_SHOW, SW_SHOWDEFAULT, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE, SW_SHOWNA, SW_SHOWNOACTIVATE e SW_SHOWNORMAL. Cada um possui um valor numérico correspondente;

 

Vamos precisar disso tudo? Não, mas eu queria fazer uma breve explicação mesmo assim.

 

Abaixo está um exemplo de como chamar este comando:

De todos aqueles parâmetros, precisamos mesmo do segundo (operação a ser realizada), do terceiro (nome do arquivo) e do último (flag da ação).

 

Para facilitar a vida de vocês, disponibilizei um user object no meu github. Se você utilizar este user object, basta utilizar a função uf_open, conforme o exemplo abaixo:

 

Espero ter ajudado.

The following two tabs change content below.
Breno RdV
Ex-Psicólogo, com quase uma década de experiência em Recursos Humanos e Gestão de Pessoas, atual desenvolvedor e Analista de Sistemas, trabalhando com PowerBuilder, C#, PowerShell e expandindo horizontes para Python, Xamarin, PHP, Angular e (por que não?) Unity.

Comments

comments

Posted in Dev, PowerBuilder and tagged , , .