Quanddo é preciso executar um aplicativo ou abrir um arquivo automaticamente por meio do seu executável, pode-se optar por três métodos: WinExec, ShellExecute ou CreateProcess.
A diferença dos três é definida muito bem por Marcos Dell Antonio:
WinExec: simples, porém não recomendado pela própria Microsoft, pois pode ser que futuramente não estará mais disponível;
ShellExecute: utilizado quando existe a necessidade de abrir um arquivo conforme sua extensão. Também pode ser usado para rodar um executável qualquer;
CreateProcess: o substituto do WinExec e, certamente, a melhor opção. Possui uma lista gigante de parâmetros, mas muitos deles não são utilizados e podem ser passados como nil ou 0 (zero).
Achei uma rotina para ser aplicada para a utilização do CreateProcess, muito fácil e testada:
procedure dgCreateProcess(const FileName: string);
var ProcInfo: TProcessInformation;
StartInfo: TStartupInfo;
begin
FillMemory(@StartInfo, sizeof(StartInfo), 0);
StartInfo.cb := sizeof(StartInfo);
CreateProcess(
nil,
PChar(FileName),
nil, Nil, False,
NORMAL_PRIORITY_CLASS,
nil, nil,
StartInfo,
ProcInfo);
CloseHandle(ProcInfo.hProcess);
CloseHandle(ProcInfo.hThread);
end;
A chamada é
dgCreateProcess(‘C:\Windows\Notepad.exe’);
dgCreateProcess(‘notepad’);
dgCreateProcess(‘mspaint’);
Lembre-se que o CreateProcess é o mais recomendado, pois no Win7 você pode ter problemas com os outros métodos.
gostei muito do site!
porem a fazer o processo nao funcionou com o soundrecord.exe do win 7
fiz a chamada assim:
dgCreateProcess(‘C:Windowssystem32soundrecord.exe’);
mas nao deu certo…
por favor voces pode me ajudares?