[EXECUTION] CreateProcess / ShellExecute
Bonjour à tous :
Je code une application qui a besoin de piloter PowerDVD.
En utilisant la FAQ et les programmes sources,
j'ai pu obtenir l'excellent WindowsSpy qui m'a donner une source de renseignements sur les classes, noms,...
Et grâce au conseils de la FAQ, j'ai réalisé ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
|
procedure TfrmCmdPowerDVD.FormCreate(Sender: TObject);
var Result:integer;
StartInfo : TStartupInfo;
ProcessInfo : TProcessInformation;
begin
// Recherche de POWERDVD.EXE
PowerDVDHandle:=FindWindow('Class of CyberLink Universal Player','POWERDVD');
if (PowerDVDHandle=0) then
begin
lblHandle.Caption:='Not detected';
// On le lance
CreateProcess(Nil, '"C:\Program Files\CyberLink\PowerDVD\PowerDVD.exe"'
, Nil, Nil, False, 0, Nil, Nil, StartInfo, ProcessInfo);
//Result:=ShellExecute(0,'OPEN','C:\Program Files\CyberLink\PowerDVD\PowerDVD.exe',Nil,Nil,SW_SHOW); OK
//Sleep(3000);
if Result<31 then
begin
end
else
begin
PowerDVDHandle:=FindWindow('Class of CyberLink Universal Player','POWERDVD');
lblHandle.Caption:='Lancer ='+IntToStr(PowerDVDHandle);
end;
end
else
lblHandle.Caption:='Detected='+IntToStr(PowerDVDHandle);
end; |
Si je le lance avec POWERDVD exécuté, pas de problème, j'obtient le HANDLE.
Si il n'est pas lancé, avec createprocess, j'obtient :
:evil:
Citation:
L'application n'a pas réussi à s'initialiser correctement (0xc0000142). Cliquer sur OK pour arrêter l'application.
Par contre si j'utilise le shellexecute, il se lance mais le handle vaut 0 SAUF si j'active le SLEEP qui lui donne le temps de se charger.
Quelles sont mes erreurs ?
Peut-on se passer du SLEEP ?
Merci.