Carcleo 4 Denunciar post Postado Abril 9, 2006 Pessoal, to precisando de uma força: Criei um form e puz nele 2 radio buttons. 1 - Instalar office 2002 2 - Instalar norton 2002 No evento onclik do primeiro radio button eu coloquei(Porque só iformando o path completo funciona) procedure TForm1.RadioButton2Click(Sender: TObject);beginWinExec('D:\Office Xp Com Front Pager/INSTALAR.EXE',0);close;end; e No evento onclik do segundo radio button eu coloquei(Porque só iformando o path completo funciona) procedure TForm1.RadioButton1Click(Sender: TObject);beginWinExec('D:\Norton 2002/SETUP.EXE',0);//WinExec('Norton 2002/SETUP.EXE',0);//WinExec('D:\Norton 2002/NCDSTART.EXE',0);close;end; Como fazer para nao por o path completo? Pergunto isso, pois caso a pessoa tenha como driver "D:" um outro hd aí lascou tudo. Outro detalhe é que se o onclik do Norto setar para o instalador:"SETUP.EXE", aí funciona ok, mas se for setado para uma tela de escolha das opções do Norton:"NCDSTART.EXE", aí da a musiquinha de abertura mas a tela nao vem. Só se clikar diretamente sobre ela. Como resolver esses problemas? Compartilhar este post Link para o post Compartilhar em outros sites
lenn0n 0 Denunciar post Postado Abril 10, 2006 Eu tenho uma procedure aqui pra você chamar um aplicativo e esperar, quando você fechar o aplicativo que foi chamado ele volta pro seu programa //Inclua na seção uses: Windowsfunction ExecAndWait(const FileName, Params: string; const WindowState: Word): boolean;var SUInfo: TStartupInfo; ProcInfo: TProcessInformation; CmdLine: string;begin { Coloca o nome do arquivo entre aspas. Isto é necessário devido aos espaços contidos em nomes longos } CmdLine := '"' + Filename + '"' + Params; FillChar(SUInfo, SizeOf(SUInfo), #0); with SUInfo do begin cb := SizeOf(SUInfo); dwFlags := STARTF_USESHOWWINDOW; wShowWindow := WindowState; end; Result := CreateProcess(nil, PChar(CmdLine), nil, nil, false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo); { Aguarda até ser finalizado } if Result then begin WaitForSingleObject(ProcInfo.hProcess, INFINITE); { Libera os Handles } CloseHandle(ProcInfo.hProcess); CloseHandle(ProcInfo.hThread); end;end;- Exemplo de uso:ExecAndWait('c:\windows\notepad.exe', '', SW_SHOW); e tem outra que somente chama uses Shellapi procedure ExecutePrograma(Nome, Parametros: String);Var Comando: Array[0..1024] of Char; Parms: Array[0..1024] of Char;begin StrPCopy (Comando, Nome); StrPCopy (Parms, Parametros); ShellExecute (0, Nil, Comando, Parms, Nil, SW_ShowMaximized);end; Para rodar ela: ExecutePrograma('WinWord.Exe, ''); ou se quiser rodar um documento ou arquivo: ExecutePrograma ('C:\MSOffice\Excel\Excel.Exe', 'Contas.Xls'); O path do programa você vai ter que informar inteiro mesmo, mas tem um função que pega o diretorio que está sua aplicação: ExtractFilePath( Application.ExeName ) espero que estas informações o ajude! Compartilhar este post Link para o post Compartilhar em outros sites
ThE_aLiEn 0 Denunciar post Postado Abril 17, 2006 Pessoal, to precisando de uma força:Criei um form e puz nele 2 radio buttons.1 - Instalar office 20022 - Instalar norton 2002No evento onclik do primeiro radio button eu coloquei(Porque só iformando o path completo funciona) procedure TForm1.RadioButton2Click(Sender: TObject);beginWinExec('D:\Office Xp Com Front Pager/INSTALAR.EXE',0);close;end;e No evento onclik do segundo radio button eu coloquei(Porque só iformando o path completo funciona)procedure TForm1.RadioButton1Click(Sender: TObject);beginWinExec('D:\Norton 2002/SETUP.EXE',0);//WinExec('Norton 2002/SETUP.EXE',0);//WinExec('D:\Norton 2002/NCDSTART.EXE',0);close;end;Como fazer para nao por o path completo?Pergunto isso, pois caso a pessoa tenha como driver "D:" um outro hd aí lascou tudo.Outro detalhe é que se o onclik do Norto setar para o instalador:"SETUP.EXE", aí funciona ok, mas se for setado para uma tela de escolha das opções do Norton:"NCDSTART.EXE", aí da a musiquinha de abertura mas a tela nao vem. Só se clikar diretamente sobre ela.Como resolver esses problemas?humm.. faz assim oh.. WinExec( ExtractFilePath( Application.ExeName ) + 'SETUP.EXE', 0 ); :D Compartilhar este post Link para o post Compartilhar em outros sites
bdexterholland 0 Denunciar post Postado Abril 18, 2006 num sei se os códigos postados pelos colegas ajudaram mas vou dar minha contribuição:---Se seu programa (o que chama o instaler do office ou do norton) será o arquvo chamado no autorun.inf de um cd que você gravar, é só colocar o diretório sem a letra da unidade---WinExec('\Norton 2002/SETUP.EXE',0);---como funciona:bom seu arquivo está eum um diretório (c:\ ou d:\ e:\, não fará diferença) como você não passou a localização completa do arquivo a ser chamado, ele procurará a partir do diretório que ele está contidoexemplose você tem uma pasta com o nome 'teste' dento da pasta 'meus documentos', nesta pasta 'teste' tem um arquivo com o nome 'oi.exe' e dentro da pasta 'meus documentos' tem um arquivo com o nome 'principal.exe'; coloque em um botão do' principal.exe' a linha: winexec('\teste\oi.exe',1); que ele vai executar o arquivo 'oi.exe', se você quiser colocar o arquivo 'principal.exe' em outro diretório como 'c:\', a pasta 'teste' deve estar no diretório 'c:\' para funcionar.---se não especeificar a unidade a procurar, o seu programa vai procurar a partir do diretório que ele está.se ainda estiver com dúvidas, use bdexterholland@gmail.comajudarei com muito prazer^^ Compartilhar este post Link para o post Compartilhar em outros sites