ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Terminer un processus Windows depuis VFP   



L'auteur

EmanuelL
Suisse Suisse
Membre Simple
# 0000000058
enregistré le 21/10/2004

http://fiduconsult.ch

Fiche personnelle


Note des membres
pas de note

Contributions > 05 - API et appels systèmes

Terminer un processus Windows depuis VFP
# 0000000296
ajouté le 01/03/2006 03:30:34 et modifié le 01/03/2006
consulté 8838 fois
Niveau initié

Version(s) Foxpro :
VFP 9.0
VFP 8.0
VFP 7.0
VFP 6.0

Description

Fonction permettant de terminer un processus Windows par son nom depuis VFP.

Processus de Gestionnaire des tâches de Windows.

Testée sous Windows 2000 et XP.

Inspirée a partir de l'article de Christophe Chenavier ; Lister les processus en cours sur la machine ,
http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000294.

Merci Christophe.
Code source :
*-- Test

lcNameProcess = "Outlook.exe"
? KillProcess(lcNameProcess)

*----------------------------------
FUNCTION KillProcess(tcNameProcess)
   LOCAL ARRAY laPID(1)

   DECLARE INTEGER TerminateProcess IN kernel32;
      INTEGER hProcess,;
      INTEGER uExitCode

   *-- Voir l'article de Christophe Chenavier pour la création de la table TProc,
   http://www.atoutfox.org/articles.asp?ACTION=FCONSULTER&ID=0000000294
   SELECT ID FROM TProc ;
      WHERE UPPER(Name) = UPPER(tcNameProcess) ;
      INTO ARRAY laPID

   lnProcessID = laPID(1)

   *-- Handle to the process to terminate
   hProcess = OpenProcess(1, .F., lnProcessID)
   uExitCode = 4   && J'ai mis ce code arbitrairement et ça focntionnait!!!
   *-- Termine le processus
   lnRetVal = TerminateProcess(hProcess, uExitCode)

   RETURN lnRetVal
ENDFUNC
Commentaires
le 01/03/2006, Christophe Chenavier a écrit :
Emmanuel, il manque la déclaration d'OpenProcess et pour être propre la fermeture avec CloseHandle(M.hProcess)

DECLARE INTEGER OpenProcess IN kernel32;
INTEGER dwDesiredAccessas,;
INTEGER bInheritHandle,;
INTEGER dwProcId
DECLARE INTEGER CloseHandle IN kernel32 ;
INTEGER hObject

L'uExitCode de TerminateProcess est le code de retour, il peut prendre n'importe quelle valeur s'il n'est pas exploité. Par défaut on le met à 0.

le 09/12/2006, Gregory Adam a écrit :
Emmanuel,

Il faut aussi tester le retour de OpenProcess()

hProcess = OpenProcess(1, .F. lnProcessID)
if( empty(m.hProcess) )
&& erreur
endif


Publicité

Les pubs en cours :


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3