Olá pessoal,
Se você quiser transformar no formato DOS, tenho uma sugestão: function scShortPathName(FileName: string; ApplyLowerCase: Boolean = True): string; var Buffer: array[0..MAX_PATH] of Char; begin // Short path name GetShortPathName(PChar(FileName), @Buffer, SizeOf(Buffer)); if ApplyLowerCase then Result := LowerCase(StrPas(Buffer)) else Result := StrPas(Buffer); end; Exemplo: Path normal = "C:\Arquivos de programas\SC Softwares\SC Softwares\Delphi\scComponentsForDelphi\instalação.txt" Formato DOS em LowerCase = "c:\arquiv~1\scsoft~1\scsoft~1\delphi\sccomp~1\instal~1.txt". ________________________________ []'s, Silvio Clécio Contatos/Blog Skype: silvioprog E-mail, Yahoo! Messenger: [EMAIL PROTECTED] Gmail, Google Talk: [EMAIL PROTECTED] Hotmail, MSN: [EMAIL PROTECTED] BlogSpot: http://silvioclecio.blogspot.com/ ________________________________ De: Paulo - yahoo <[EMAIL PROTECTED]> Para: delphi-br@yahoogrupos.com.br Enviadas: Segunda-feira, 1 de Dezembro de 2008 10:14:16 Assunto: [delphi-br] WinExecAndWait32 nao aceita nomes longos no path do programa chamado Pessoal: Como fazer com que a rotina WinExecAndWait32 (mostrada no final desta mensagem) aceite nomes longos no caminho do programa que estou chamando ? O programa externo que estou chamando fica (exemplo) em C:\Arquivos de Programas\MeuSistem a\Util\xyz. exe. Tentei passar o caminho entre aspas (de várias maneiras - tudo entre aspas, apenas Arquivos de Programas entre aspas, etc.) mas nenhuma deu certo. Se eu passar o nome curto de Arquivos de Programas (que eu obtenho com a função GetShortFileName, que também estou enviando, apenas para referência), a WinExecAndWait32 consegue chamar normalmente o programa (pois o path fica assim: C:\Arquiv~1\ MeuSistema\ Util\xyz. exe). Existe alguma solução, ou realmente usar o nome curto do path é a melhor alternativa ? Obs.: Na Internet, existem várias versões da WinExecAndWait32. Estou usando a versão abaixo porque ela também aceita eu informar a pasta (diretório) em que o programa externo será inicializado - e tenho necessidade disso. Grato pela atenção de todos Paulo function WinExecAndWait32( FileName: String; WorkDir: String; Visibility: integer): Integer; var zAppName: array[0..512] of char; zCurDir: array[0..255] of char; StartupInfo: TStartupInfo; ProcessInfo: TProcessInformation ; begin StrPCopy(zAppName, FileName) ; StrPCopy(zCurDir, WorkDir); FillChar(StartupInf o,Sizeof( StartupInfo) ,#0); StartupInfo. cb:=Sizeof( StartupInfo) ; StartupInfo. dwFlags:= STARTF_USESHOWWI NDOW; StartupInfo. wShowWindow: =Visibility; if not CreateProcess( nil,zAppName, nil,nil,False, CREATE_NEW_ CONSOLE or NORMAL_PRIORITY_ CLASS,nil, zCurDir,StartupI nfo,ProcessInfo) then Result:=-1 else begin WaitforSingleObject (ProcessInfo. hProcess, INFINITE) ; GetExitCodeProcess( ProcessInfo. hProcess, DWORD(Result) ); end; end; // WinExecAndWait32 function GetShortFileName( Const aFileName: String): String; var aTmp: array[0..255] Of char; begin If GetShortPathName( PChar(aFileName) , aTmp, Sizeof(aTmp) - 1) = 0 Then Result := aFileName Else Result := StrPas(aTmp) ; end; // GetShortFileName Veja quais são os assuntos do momento no Yahoo! +Buscados http://br.maisbuscados.yahoo.com [As partes desta mensagem que não continham texto foram removidas]