Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1889 connectés 

  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Delphi] lancer un programme DOS ? [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Delphi] lancer un programme DOS ? [résolu]

n°127962
Aiua
PSN : Aiua / GT : Aiua42
Posté le 18-04-2002 à 15:45:54  profilanswer
 

Je veux juste lancer automatiquement :  
232_read import.txt,1,1,1,1,1,1,0 (232_read.exe étant le programme dos)
ce programme crée un fichier texte et ce ferme, donc je voudrai récuperer la main que qd il a fini de créer son fichier si possible, mais bon déjà le lancer serait pas mal :D
 
merci de votre aide :jap:

 

[jfdsdjhfuetppo]--Message édité par Aiua--[/jfdsdjhfuetppo]


---------------
"The pen is mightier than the sword if the sword is very short, and the pen is very sharp." TP. Mes Jeux. Mes Ventes. Groupe HFR sur PlayFire.
mood
Publicité
Posté le 18-04-2002 à 15:45:54  profilanswer
 

n°127970
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-04-2002 à 15:57:49  profilanswer
 

ShellExecute(0, nil, '232_read.exe', 'import.txt,1,1,1,1,1,1,0', Folder, SW_SHOWNORMAL);
 
Où Folder contient le dossier par défaut.
Il vaut mieux spéficier le dossier du programme :
À la place de '232_read.exe' mettre PChar(ExtractFilePath(Application.ExeName) + '232_read.exe';)) si jamais le propramme 232_read est dans le même dossier, par exemple.
 
Pour voir quand le programme se ferme, je crois qu'il faut faire ça avec CreateProcess. Peut-être qu'il y a moyen avec ShellExecuteEx.
 
PS: il faudra sans doute ajouter ShellAPI dans les "uses" de la unit.

 

[jfdsdjhfuetppo]--Message édité par antp--[/jfdsdjhfuetppo]


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°127987
Aiua
PSN : Aiua / GT : Aiua42
Posté le 18-04-2002 à 16:12:03  profilanswer
 

merci, au moins là j'arrive à lire le fichier, le pb c'est qu'il n'attend pas pour continuer mon prog
 
sur CreateProcess j'ai essayé :

Code :
  1. var
  2.   L_StartupInfo: TStartupInfo;
  3.   L_ProcessInfo: TProcessInformation;
  4. begin
  5. FillChar(L_StartupInfo, SizeOf(L_StartupInfo), #0);
  6. L_StartupInfo.cb := SizeOf(L_StartupInfo);
  7. L_StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  8. L_StartupInfo.wShowWindow := SW_SHOWNORMAL;
  9. if CreateProcess(nil, '232_read import.txt,1,1,1,1,1,1,0', nil, nil, False, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, L_StartupInfo,L_ProcessInfo)
  10. then
  11.   begin
  12.   WaitforSingleObject(L_ProcessInfo.hProcess, INFINITE);
  13.   CloseHandle(L_ProcessInfo.hProcess);
  14.   CloseHandle(L_ProcessInfo.hThread);
  15.   end;
  16. end;


 
 
mais ça ne marche pas :(
mon programme a pas l'air d'être lancé et ça ne me rend jamais la main

 

[jfdsdjhfuetppo]--Message édité par Aiua--[/jfdsdjhfuetppo]


---------------
"The pen is mightier than the sword if the sword is very short, and the pen is very sharp." TP. Mes Jeux. Mes Ventes. Groupe HFR sur PlayFire.
n°128000
Aiua
PSN : Aiua / GT : Aiua42
Posté le 18-04-2002 à 16:27:54  profilanswer
 

c'est bon, j'ai trouvé :)
j'utilise :
 

Code :
  1. function TDLG_inventaire.WinExecAndWait32(FileName:String):integer;
  2.    var
  3.     zAppName:array[0..512] of char;
  4.     zCurDir:array[0..255] of char;
  5.     WorkDir:String;
  6.     StartupInfo:TStartupInfo;
  7.     ProcessInfo:TProcessInformation;
  8.     code : cardinal;
  9. begin
  10.   StrPCopy(zAppName,FileName);
  11.   GetDir(0,WorkDir);
  12.   StrPCopy(zCurDir,WorkDir);
  13.   FillChar(StartupInfo,Sizeof(StartupInfo),#0);
  14.   StartupInfo.cb := Sizeof(StartupInfo);
  15.   StartupInfo.dwFlags := STARTF_USESHOWWINdow;
  16.   StartupInfo.wShowWindow := 0 ;
  17.    if not CreateProcess( nil , zAppName, nil , nil , false,
  18. CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil , nil ,StartupInfo,ProcessInfo) then Result := -1
  19.   else begin
  20.     WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
  21.     GetExitCodeProcess(ProcessInfo.hProcess,code);
  22.     Result := Integer(code);
  23.    end ;
  24. end ;


 
 
et je lui passe en parametre '232_read import.txt,1,1,1,1,1,1,0'
 
et ça marche :hot:


---------------
"The pen is mightier than the sword if the sword is very short, and the pen is very sharp." TP. Mes Jeux. Mes Ventes. Groupe HFR sur PlayFire.
n°128008
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-04-2002 à 16:34:59  profilanswer
 

plutôt que d'utiliser les array of char, tu peux faire simplement un PChar(FileName) dans les paramètres, c'est plus pratique (pas besoin de StrPCopy etc...)
 
Je vais garder ta fonction sous la main, c'est bon à savoir pour si jamais j'en ai besoin ;)


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°128010
Aiua
PSN : Aiua / GT : Aiua42
Posté le 18-04-2002 à 16:37:02  profilanswer
 

ah ! si tu le dis, j'sais pas moi j'ai repompé la fonction :D
disons que ça marche comme ça meme si je comprends pas tout :D


---------------
"The pen is mightier than the sword if the sword is very short, and the pen is very sharp." TP. Mes Jeux. Mes Ventes. Groupe HFR sur PlayFire.
n°128015
antp
Super Administrateur
Champion des excuses bidons
Posté le 18-04-2002 à 16:42:49  profilanswer
 

Version allégée:
 

Code :
  1. function WinExecAndWait32(const FileName: string): Integer;
  2. var
  3.   StartupInfo: TStartupInfo;
  4.   ProcessInfo: TProcessInformation;
  5.   code: Cardinal;
  6. begin
  7.   FillChar(StartupInfo,Sizeof(StartupInfo),#0);
  8.   with StartupInfo do
  9.   begin
  10.     cb := Sizeof(StartupInfo);
  11.     dwFlags := STARTF_USESHOWWINDOW;
  12.     wShowWindow := 0;
  13.   end;
  14.   if not CreateProcess(nil , PChar(FileName), nil, nil, False,
  15. CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcessInfo) then
  16.     Result := -1
  17.   else
  18.   begin
  19.     WaitforSingleObject(ProcessInfo.hProcess, INFINITE);
  20.     GetExitCodeProcess(ProcessInfo.hProcess, code);
  21.     Result := Integer(code);
  22.   end;
  23. end;


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°128020
Aiua
PSN : Aiua / GT : Aiua42
Posté le 18-04-2002 à 16:48:09  profilanswer
 

testé et approuvé :)
merci :jap:


---------------
"The pen is mightier than the sword if the sword is very short, and the pen is very sharp." TP. Mes Jeux. Mes Ventes. Groupe HFR sur PlayFire.
n°128036
Aiua
PSN : Aiua / GT : Aiua42
Posté le 18-04-2002 à 17:06:42  profilanswer
 

en fait il faut rajouter les CloseHandle à la fin par ce que sinon le prog il continue à tourner en fond, et à 20% du proc en plus le salop :D
bizarrement à trois en meme temps je m'en suis vite rendu compte que ça ramais :D
donc la fin c'est en fait :
 
[code]
 begin  
   WaitforSingleObject(ProcessInfo.hProcess, INFINITE);  
   GetExitCodeProcess(ProcessInfo.hProcess, code);  
   Result := Integer(code);  
 end;  
 CloseHandle(L_ProcessInfo.hProcess);
 CloseHandle(L_ProcessInfo.hThread);
end;

 

[jfdsdjhfuetppo]--Message édité par Aiua--[/jfdsdjhfuetppo]


---------------
"The pen is mightier than the sword if the sword is very short, and the pen is very sharp." TP. Mes Jeux. Mes Ventes. Groupe HFR sur PlayFire.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Delphi/Pascal

  [Delphi] lancer un programme DOS ? [résolu]

 

Sujets relatifs
[PERL] execution de programme externe[delphi]ca vous dit quelque chose ce message d'erreur?
un bon site pour s'initier à delphi 5Créer un.bat pour lancer une session FTP ?
[Réponse] Lancer une procédure PL/SQL à partir d'un shell UnixURGENT RECHERCHE PRO DU DOS
[Delphi] Convertion d'un string en numériquelancer une procedure en pl/sql avec un cron...
collaboration site web delphi, c++ builder et jbuilderRecherche spécialistes DirectX et VC++ ou Delphi
Plus de sujets relatifs à : [Delphi] lancer un programme DOS ? [résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR