cs_ziedmaz
Messages postés10Date d'inscriptionmardi 19 décembre 2000StatutMembreDernière intervention 1 juillet 2009
-
30 juin 2009 à 00:09
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 2020
-
1 juil. 2009 à 01:41
g créé un screensaver en VB6 qui execute un autre programme a l'aide de la fonction Shell mais celui ci se ferme lorsque je sors de l'ecran de veille..
Avez-vous une idée pour contourner ce pb.
Je veux le programme reste en marche lorsque je sors
de l'ecran de veille
S'il vous plait aidez moi..
cs_ziedmaz
Messages postés10Date d'inscriptionmardi 19 décembre 2000StatutMembreDernière intervention 1 juillet 2009 30 juin 2009 à 01:33
Merci Mr.Mayzz
D'apres ce que je sais ShellExecute n'est qu'une fonction uun peu plus generale qui peut lancer meme des fichiers.
Peut etre que je me suis mal exprimé :
Voilà je vais vous dire:
apres que je compile mon projet qui est un ecran de veille j'ai "projet.scr"
celle ci lorsque je clique dessus elle ouvre un autre programme..a ce point tout marche tres bien
quand je ferme cet ecran de veille ("projet.scr")
l'autre programme reste en marche et c'est ce que je voulais.
Mais voilà le probleme lorsque je mets "projet.scr" comme ecran de veille.Apres qques minutes d'inactivité il se lance correctement et il lance l'autre programme mais dès que je sors de cet ecran de veille l'autre programme se ferme automatiquement..donc je crois l'astuce reside dans l'appel du systeme à mon ecran de veille "projet.scr" qui n'est pas pareil à un simple double clique (enfin je pense :-p)
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 30 juin 2009 à 01:40
Le problème vient du fait que la Fonction Shell de vb6, appel ton programme et spécifie à windows que celui-ci est un procéssus parent, quand windows appel ton la fermeture de ton programme s'exécute (ExitCall), celui-ci ferme les process qu'il à lancer avant de s'éteindre. C'est pour cela que je t'ai proposer ShellExecute.
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 30 juin 2009 à 12:57
Salut
Parce que tu n'as pas approfondi le fonctionnement de cette API :
Le premier paramètre est le handle de la forme Parent.
Si tu lui donne le handle de ta forme, dès que celle-ci disparaitra, le programme lancé sera lui aussi fermé, cela a donc le même effet que le Shell.
Il te suffit de donner le handle du bureau, par exemple avec cette autre API : GetDesktopWindow
Vala
Jack, MVP VB NB : Je ne répondrai pas aux messages privés
<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 30 juin 2009 à 16:25
"mais ça n'a pas marché ...:-( Please help me" <= Tu peux être plus précis ??? Qu'est ce qui n'a pas marché ? Ton programme ne se lance pas ? Ou il se lance mais se ferme ? As tu un message d'erreur ?
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
cs_ziedmaz
Messages postés10Date d'inscriptionmardi 19 décembre 2000StatutMembreDernière intervention 1 juillet 2009 30 juin 2009 à 17:03
salut Mr.Mayzz
je veux dire que ça rien changé le screensaver lance le programme mais dès que le screensaver s'arrete l'autre programme s'arrete lui aussi
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 1 juil. 2009 à 01:10
Il doit y avoir une erreur quelque part, personnelement j'ai fait le teste :
Voici le code
Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Sub Form_Load()
ShellExecute GetDesktopWindow, "open", "notepad.exe", "", "", 1
End Sub
Quand je ferme l'appli, notepad reste ouvert...
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
cs_ziedmaz
Messages postés10Date d'inscriptionmardi 19 décembre 2000StatutMembreDernière intervention 1 juillet 2009 1 juil. 2009 à 01:28
Merci Mr.Mayzz
j'ai essayé votre code mais lorsque je le mets comme ecran de veille le notepad se ferme quand je sors de
l'ecran de veille..????
excusez moi pour le casse tete que je vous fait..
et merci pour votre patience ..
Mayzz
Messages postés2813Date d'inscriptionmardi 15 avril 2003StatutMembreDernière intervention 2 juin 202028 1 juil. 2009 à 01:41
Non ce n'est rien
Nous ne somment pas obligé de te répondre on le fait de notre bon vouloir
Quant' à ton projet en effet, il semblerait que cela vienne du fait que ce soit un screensaver... L'exitCall doit se faire autrement... Ce que je ne pige pas c'est que tu lance depuis le bureau... En même temps si c'est un screensaver il est peut être possible qu'au mmoment de l'appel, le handle du bureau soit celui de ton screensaver car ton pc est en veille... Donc il faut essayer de lancer le ShellExecute via un autre handle, celui d'une appli toujours en fonction sous windows, dont tu obtiendrais le handle grâce à GetWindowText ou une api du genre...
Ce n'est que pure supposition je n'ai pas testé...
++
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <