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]

Responder a