PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → Programme déjà lancé
Programme déjà lancé
Débuté par THIERRY, 03 fév. 2004 11:06 - 6 réponses
Posté le 03 février 2004 - 11:06
Bonjour
Dans une applic, Je regarde si un programme est déjà lancé ou non via une
procédure.Sous windows 95 et 98 cela fonctionne mais sous XP cela ne marche
pas !!
Voici le code :

DDELance("c:\otobatch.exe rlqfmm.wbt",ddeactif,vrai)

boucle

SI DEJALA("otobatch.exe") ALORS
multitache(300)
libelle1="RECUPERATION DES RELIQUATS de l'AS400 !!!! attendre"
sinon
sortir
fin
fin

// Procédure dejala
fonction DEJALA(sNomExe)
hContexte est un entier long
stProcess est compose de
dwSize est un entier long
cntUsage est un entier long
th32ProcID est un entier long
th32DfHpID est un entier long
th32ModID est un entier long
cntThreads est un entier long
th32PPID est un entier long
pcPClBase est un entier long
dwFlags est un entier long
szExeFile est un chaine asciiz sur 260
fin

si versionwindows()="32" alors
hContexte=appeldll32("kernel32","CreateToolhelp32Snapshot",2,0)
stProcess.dwSize=taille(""+stProcess)
si appeldll32("kernel32","Process32First",hContexte,&stProcess) alors
boucle
si position(majuscule(stProcess.szExeFile),"\"+majuscule(sNomExe))>0 alors
renvoyer vrai
fin
si pas appeldll32("kernel32","Process32Next",hContexte,&stProcess) alors
sortir
fin
fin
renvoyer faux
sinon
renvoyer AppelDLL("KERNEL","GetModuleHandle",sNomExe)>0
fin

Merci de vos réponses
A+
Posté le 03 février 2004 - 13:17
Sous WD 7.5, la fonction ExeLancé fait cela directement.
Non ?


"THIERRY" <tb@jojafrance.com> a écrit dans le message de
news:401f7350@news.pcsoft.fr...


Bonjour
Dans une applic, Je regarde si un programme est déjà lancé ou non via une
procédure.Sous windows 95 et 98 cela fonctionne mais sous XP cela ne

marche
pas !!
Voici le code :

DDELance("c:\otobatch.exe rlqfmm.wbt",ddeactif,vrai)

boucle

SI DEJALA("otobatch.exe") ALORS
multitache(300)
libelle1="RECUPERATION DES RELIQUATS de l'AS400 !!!! attendre"
sinon
sortir
fin
fin

// Procédure dejala
fonction DEJALA(sNomExe)
hContexte est un entier long
stProcess est compose de
dwSize est un entier long
cntUsage est un entier long
th32ProcID est un entier long
th32DfHpID est un entier long
th32ModID est un entier long
cntThreads est un entier long
th32PPID est un entier long
pcPClBase est un entier long
dwFlags est un entier long
szExeFile est un chaine asciiz sur 260
fin

si versionwindows()="32" alors
hContexte=appeldll32("kernel32","CreateToolhelp32Snapshot",2,0)
stProcess.dwSize=taille(""+stProcess)
si appeldll32("kernel32","Process32First",hContexte,&stProcess) alors
boucle
si position(majuscule(stProcess.szExeFile),"\"+majuscule(sNomExe))>0 alors
renvoyer vrai
fin
si pas appeldll32("kernel32","Process32Next",hContexte,&stProcess) alors
sortir
fin
fin
renvoyer faux
sinon
renvoyer AppelDLL("KERNEL","GetModuleHandle",sNomExe)>0
fin

Merci de vos réponses
A+

Posté le 03 février 2004 - 15:13
"Val" <val76@voila.fr> wrote:

Sous WD 7.5, la fonction ExeLancé fait cela directement.
Non ?


Je suis en 5.5B

A+
Posté le 03 février 2004 - 15:39
l'utilisation de
ExeLancé("C:\WINDOWS\WINFILE.EXE")
me paraitrait plus simple ...

"THIERRY" <tb@jojafrance.com> wrote:


Bonjour
Dans une applic, Je regarde si un programme est déjà lancé ou non via une
procédure.Sous windows 95 et 98 cela fonctionne mais sous XP cela ne marche
pas !!
Voici le code :

DDELance("c:\otobatch.exe rlqfmm.wbt",ddeactif,vrai)

boucle

SI DEJALA("otobatch.exe") ALORS
multitache(300)
libelle1="RECUPERATION DES RELIQUATS de l'AS400 !!!! attendre"
sinon
sortir
fin
fin

// Procédure dejala
fonction DEJALA(sNomExe)
hContexte est un entier long
stProcess est compose de
dwSize est un entier long
cntUsage est un entier long
th32ProcID est un entier long
th32DfHpID est un entier long
th32ModID est un entier long
cntThreads est un entier long
th32PPID est un entier long
pcPClBase est un entier long
dwFlags est un entier long
szExeFile est un chaine asciiz sur 260
fin

si versionwindows()="32" alors
hContexte=appeldll32("kernel32","CreateToolhelp32Snapshot",2,0)
stProcess.dwSize=taille(""+stProcess)
si appeldll32("kernel32","Process32First",hContexte,&stProcess) alors
boucle
si position(majuscule(stProcess.szExeFile),"\"+majuscule(sNomExe))>0

alors
renvoyer vrai
fin
si pas appeldll32("kernel32","Process32Next",hContexte,&stProcess) alors
sortir
fin
fin
renvoyer faux
sinon
renvoyer AppelDLL("KERNEL","GetModuleHandle",sNomExe)>0
fin

Merci de vos réponses
A+

Posté le 03 février 2004 - 17:57
"Robor" <Robor@wanadoo.fr> wrote:



Merci pour vos réponses mais je suis en WINDEV 5.5B et c'est sous WINDOWS
XP que j'ai des problèmes
A+
Posté le 03 février 2004 - 18:39
Sous WD5.5b, j'utilisais une procédure qui marchait bien.
Dans cette procédure, le système passe en revue tous les programmes chargés
en mémoire et "lit" le texte affiché dans la barre de titre de ces
programmes.
Ainsi, pour savoir si un programme particulier est déjà chargé en mémoire,
il suffit de connaitre le texte affiché dans la barre de titre de ce
programme et de lancer la procédure.

Exemple:
Soit mon programme "Dodo 1.00"
Dans la barre de titre du programme, le texte "DODO VERSION 1" est affiché.

Pour savoir s'il est chargé en mémoire, je lance la procédure comme suit:
Si VerifieAutreProg("DODO VERSION 1")=1 alors
info("Le programme est chargé en mémoire")
sinon
info("Le programme n'est pas chargé en mémoire")
fin


////////// Contenu de la procédure
Procédure VerifieAutreProg(Titrebarredetitre)
Lg, Ok, hWnd sont des entiers longs
trouve_prog est un booleen=faux
hWnd = AppelDll32("User32", "GetWindow", Handle(), 2)
lpString est une chaîne fixe sur 255

TANTQUE hWnd <> Handle() et hWnd <> 0
MultiTâche() // Obligatoire pour ne pas aller trop vite !
Lg = AppelDll32("User32", "GetWindowTextLengthA", hWnd)
Ok = AppelDll32("User32", "GetWindowTextA", hWnd, &lpString, lg + 1)
SI Ok ALORS
SI position(Majuscule(lpString),Titrebarredetitre) > 0 alors
trouve_prog=vrai
SORTIR
FIN
FIN
hWnd = AppelDll32("User32", "GetWindow", hWnd, 2)
FIN
renvoyer trouve_prog


"THIERRY" <tb@jojafrance.com> a écrit dans le message de
news:401fc6bc@news.pcsoft.fr...


"Robor" <Robor@wanadoo.fr> wrote:



Merci pour vos réponses mais je suis en WINDEV 5.5B et c'est sous WINDOWS

XP que j'ai des problèmes
A+
Posté le 05 février 2004 - 19:48
"Val" <val76@voila.fr> wrote:
>
OK merci ça marche
A+