Como invocar a "Abrir com..." _Shellexecute de uso de caixa de diálogo

Traduções deste artigo Traduções deste artigo
ID do artigo: 192352 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Sumário

A classe de base do FoxPro _shellexecute pode ser usado para executar programas externos, bem como abrir arquivos não executáveis, se houver um programa associado a esse arquivo. No entanto, se não houver nenhum programa associado ao arquivo, _shellexecute retorna SE_ERR_NOASSOC (31) e nenhuma ação é executada após o arquivo. Este artigo demonstra como criar um procedimento que usa a caixa de diálogo "Abrir.. com." para dar ao usuário a opção de selecionar um programa usado abrir o arquivo.

Mais Informações

O processo deve ser executado tanto de uma função de programa ou uma classe terá de ser criado a partir do zero. O código a seguir descreve como fazer isso como uma função do programa.
  1. Salvar o código a seguir em um arquivo de programa e salvá-lo como ShellDoc.prg:
    *-- Code begins here.
    PROCEDURE ShellDoc()
    LPARAMETERS lsFile
    
    *-- Defines from Winuser.h
    *-- These constants will be used with the
    *-- ShellExecute function.
    #define SW_HIDE             0
    #define SW_SHOWNORMAL       1
    #define SW_NORMAL           1
    #define SW_SHOWMINIMIZED    2
    #define SW_SHOWMAXIMIZED    3
    #define SW_MAXIMIZE         3
    #define SW_SHOWNOACTIVATE   4
    #define SW_SHOW             5
    #define SW_MINIMIZE         6
    #define SW_SHOWMINNOACTIVE  7
    #define SW_SHOWNA           8
    #define SW_RESTORE          9
    #define SW_SHOWDEFAULT      10
    #define SW_FORCEMINIMIZE    11
    #define SW_MAX              11
    #define SE_ERR_NOASSOC      31
    
    *-- GetDesktopWindow gives us a window handle to
    *-- pass to ShellExecute.
    DECLARE INTEGER GetDesktopWindow IN user32.dll
    DECLARE INTEGER GetSystemDirectory IN kernel32.dll ;
     STRING @lsBuffer, ;
     INTEGER liSize
    
    *-- ShellExecute is of the following format:
    *--   HINSTANCE ShellExecute(
    *--       HWND hwnd,
    *--       LPCTSTR lpOperation,
    *--       LPCTSTR lpFile,
    *--       LPCTSTR lpParameters,
    *--       LPCTSTR lpDirectory,
    *--       INT nShowCmd
    *--   );
    
    DECLARE INTEGER ShellExecute IN shell32.dll ;
    INTEGER, ;
    STRING @lsOperation, ;
    STRING @lsFile, ;
    STRING @lsParameters, ;
    STRING @lsDirectory, ;
    INTEGER liShowCmd
    
    lsOperation = "open"
    liRet = ShellExecute(GetDesktopWindow(), @lsOperation, @lsFile, ;
      "", "", SW_SHOWNORMAL)
    IF liRet = SE_ERR_NOASSOC && No association exists
     lsSysDir = SPACE(260)  && MAX_PATH, the maximum path length
    
    *-- Get the system directory so that we know
    *-- where Rundll32.exe resides.
    liRet = GetSystemDirectory(@lsSysDir, LEN(lsSysDir))
    lsSysDir = SUBSTR(lsSysDir, 1, liRet)
    lsRun = "RUNDLL32.EXE"
    lsParameters = "shell32.dll,OpenAs_RunDLL "
    liRet = ShellExecute(GetDesktopWindow(), "open", lsRun,;
    lsParameters + lsFile, lsSysDir, SW_SHOWNORMAL)
    ENDIF
    ENDPROC
    *-- Code ends here.
  2. Na janela de comando, execute o seguinte comando:
    SET PROCEDURE TO ShellDoc
  3. Chame o procedimento ShellDoc com a seguinte sintaxe:
    DO ShellDoc WITH <cFilename>
    Talvez seja necessário passar um caminho com o nome do arquivo se o arquivo estiver em uma unidade mapeada. Se <cfilename>não tenha associação, aparece a caixa de diálogo "Abrir.. com.".</cfilename>

Propriedades

ID do artigo: 192352 - Última revisão: sábado, 22 de fevereiro de 2014 - Revisão: 1.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual FoxPro 3.0 Standard Edition
  • Microsoft Visual FoxPro 5.0 Standard Edition
  • Microsoft Visual FoxPro 6.0 Professional Edition
  • Microsoft Visual FoxPro 7.0 Professional Edition
  • Microsoft Visual FoxPro 8.0 Professional Edition
  • Microsoft Visual FoxPro 9.0 Professional Edition
Palavras-chave: 
kbnosurvey kbarchive kbapi kbffc kbhowto kbmt KB192352 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 192352