Amigos estou usando a seguinte função para abrir um arquivo PDF via activex, porém, ao fechar o documento o processo continua ativo no WINDOWS, e depois de abrir algumas vezes o ADOBE PDF me da uma mensagem, dizendo que o numero maximo de arquivos foi aberto.
Assim sendo, preciso forçar o termino do processo, Mais gostaria que isso fosse via código e não por EXE externo.
Realmente isto pode ocorrer pois o processo continua na memória afim de agilizar a abertura mas muitas vezes ocorre que o mesmo ao ser chamado novamente pega outro processo e esquece o anterior.
Ao finalizar um processo aberto com tActivex ou TOleAuto() voce pode descarrega-lo com Close() ou End():
Verifique o método correto de fechar uma janela usando VALID pois coloquei de cabeça.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Sim Euclides, o nome é AcroRd32.exe, consegui no forum FW um EXE chamado KILLPROCESS(pascal), com ele consigo matar o processo, sem ele já tentei tudo e nada finaliza o processo.
Rochinha, já tentei a sua sujestão e não funcionou!
Tenho isso no fonte (público) da biblioteca WAPI, usada no Clipper. Como é em C, será fácil adaptar. A função encerra qualquer processo pelo nome do EXE ou pelo seu handle. Ou, se alguém preferir fazer, usa-se a função TerminateProcess() da API do Windows.
[]'s
Maligno
--- Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
--- Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
[DEFINE WINDOW FORMPDFREADER ;
AT 0, 0 ;
WIDTH 800 HEIGHT 800 ;
TITLE "MTRAB.NET - PDF Reader";
NOSIZE;
NOMAXIMIZE;
NOMINIMIZE;
MAIN ;
ICON 'ADOBE.ICO' ;
ON INIT fOpenActivex(cFilePDF) ;
ON RELEASE fCloseActivex()
END WINDOW]
[Static Procedure fOpenActivex(cFilePdf)
LOCAL cPDF:=cFilePdf
IF FILE(cPDF)
oWActiveX := TActiveX():New(ThisWindow.Name, ;
"AcroPDF.PDF.1", ;
0, ;
0, ;
GetProperty(ThisWindow.Name, "width") - 02 * GetBorderWidth() - 1 , ;
GetProperty(ThisWindow.Name, "height") - 05 * GetBorderHeight() - ;
GetTitleHeight() - ;
GetMenuBarHeight() )
oActiveX := oWActiveX:Load()
oActiveX:LoadFile(cPDF)
ELSE
MsgStop("Arquivo PDF não encontrado.")
FORMPDFREADER.Release()
ENDI
Return
********************
STAT FUNC fCloseActivex()
IF VALTYPE(oWActivex) <> "U" .AND. VALTYPE(oActivex) <> "U"
oWActivex := Nil
oActivex := Nil
ENDI
RETU NIL]
Desse jeito, a janela é encerrada mas o processo AcroRd32.exe não.
A aplicação está rodando num TS. E o que aconetce é que a conexão não é encerrada assim que o programa é encerrado pq o processo fica sendo executado ainda.
No site da MSN, clique aqui pra ver o help da função TerminateProcess().
Quando precisar de algum help, utilize o mecânismo de pesquisa, que você poderá encontrar help pra tudo o que diz respeito às APIs do Windows.
[]'s
Maligno
--- Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.
--- Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!