PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → Re:  lanceAppliAssociée BLOQUANT
Re: lanceAppliAssociée BLOQUANT
Iniciado por petiot, 22,mar. 2006 17:53 - 1 respuesta
Publicado el 22,marzo 2006 - 17:53
Bonjour, je suis dans le même cas, je décrypte un fichier PDF puis le lance avec LanceAppliAssociée pour le lire puis je dois détruire ce fichier décrypté avec le code fsupprime, mais comme LanceAppliAssociée n'est pas bloquant il m'efface le fichier temporaire avant même son lancement...
LanceAppli c'est bien, mais comme je suis dans une boite où il existe de multiples versions d'Acrobat avec des noms différents d'executable, actuellement je n'ai aucune solution...
Exite-t-il un façon de connaitre sous windev avec quoi est associé un fichier ?


salutations...
Publicado el 23,marzo 2006 - 09:02
Effectivement c'est le serpent qui se mange la queue
DDELance à besoin de connaître le programme pour ouvrir le fichier mais il peut bloquer
LanceAppli ne bloque pas mais utilise la base de registre pour trouver dans la clef
HKEY_CLASSES_ROOT le programme
Exemple
HKEY_CLASSES_ROOT\.pdf
--------HKEY_CLASSES_ROOT\.pdf\OpenWithList
----------------HKEY_CLASSES_ROOT\.pdf\OpenWithList\AcroRd32.exe
et AcroRd32.exe est la nom du programme....
mais bon c'est pas trés clair le bazard (voir le .doc)

Alors une autre voie de que j'utilise pour les fichier .msi
je lance LanceAppliAssocie mais juste avant je recupére le nom et le chemin des processus en cours et j'attend (donc je bloque mais avec timeout) tant que mon nouveau processus n'est pas terminé. Pour cela, j'utilise cette petite fonction (elle ne liste que les process de la machine mais en modifiant un chti peut on peut voir les process d'une autre machine)


PROCEDURE EnumProcess()

objWMIService est un objet Automation "MSScriptControl.ScriptControl"
ProgrammeVbs est une chaîne
ResultatVbs est une chaîne

ProgrammeVbs = "Function EnumProcess()" +CRLF
ProgrammeVbs += "On Error Resume Next" +CRLF
ProgrammeVbs += "strComputer = "+Caract(34) + "." + Caract(34) + CRLF
ProgrammeVbs += "strResult = "+Caract(34)+Caract(34) + CRLF
ProgrammeVbs += "Set objWMIService = GetObject("+Caract(34)+"winmgmts:\\"+Caract(34)+" & strComputer & "+Caract(34)+"\root\cimv2"+Caract(34)+")" + CRLF
ProgrammeVbs += "Set colItems = objWMIService.ExecQuery("+Caract(34)+"Select * from Win32_Process"+Caract(34)+",,48)" + CRLF
ProgrammeVbs += "For Each objItem in colItems" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.Caption & chr(9)" + CRLF
ProgrammeVbs += "strResult = strResult & objItem.ExecutablePath & chr(13) &chr(10)" + CRLF
ProgrammeVbs += "Next" + CRLF
ProgrammeVbs += "EnumProcess = strResult" + CRLF
ProgrammeVbs += "End Function"

objWMIService>>Language("VBScript")
objWMIService>>Reset()

WHEN EXCEPTION IN
objWMIService>>AddCode(ProgrammeVbs)
DO
Erreur("Erreur dans le programme vbs...")
RENVOYER ""
END

ResultatVbs = ""

WHEN EXCEPTION IN
ResultatVbs = objWMIService>>Eval("EnumProcess()")
DO
Erreur("Erreur d'execution du programme vbs")
RENVOYER ""
END

IF ResultatVbs<>"" THEN ResultatVbs = ResultatVbs[[1 sur Taille(ResultatVbs)-2]]

RENVOYER ResultatVbs