Screensaver en VB6 et fonction Shell

cs_ziedmaz Messages postés 10 Date d'inscription mardi 19 décembre 2000 Statut Membre Dernière intervention 1 juillet 2009 - 30 juin 2009 à 00:09
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Derniè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..

16 réponses

Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
30 juin 2009 à 01:10
Bonsoir,

As-tu essayer de lancer ton application tiers via d'autres méthodes, comme ShellExecute ?

                                                                              
Si le déboguage est l'art d'enlever les bogues, la programmation doit être l'art de les créer. <
0
cs_ziedmaz Messages postés 10 Date d'inscription mardi 19 décembre 2000 Statut Membre Derniè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)


merci encore pour votre aide..
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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. <
0
cs_ziedmaz Messages postés 10 Date d'inscription mardi 19 décembre 2000 Statut Membre Dernière intervention 1 juillet 2009
30 juin 2009 à 01:50
merci Mr.Mayzz je vais l'essayer le plutot possible..et je vous informerais du resultat..
*******MERCI ENORMEMENT*************
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ziedmaz Messages postés 10 Date d'inscription mardi 19 décembre 2000 Statut Membre Dernière intervention 1 juillet 2009
30 juin 2009 à 09:50
Salut j'ai remplacé :
Shell "p.exe"
par
ShellExecute frmMain.hWnd, "open", "p.exe", "", App.Path, 1

mais ça n'a rien donner toujours le même pb
avez vous n'importe quelle idée pour contourner ce pb SVP et merci
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
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)
0
cs_ziedmaz Messages postés 10 Date d'inscription mardi 19 décembre 2000 Statut Membre Dernière intervention 1 juillet 2009
30 juin 2009 à 15:43
ahh je suis vraiment stupide ..je vais essayer ça merci Mr.jack..
0
cs_ziedmaz Messages postés 10 Date d'inscription mardi 19 décembre 2000 Statut Membre Dernière intervention 1 juillet 2009
30 juin 2009 à 15:53
j'ai mis ça:
ShellExecute GetDesktopWindow, "open", "p.exe", "", App.Path, 1
mais ça n'a pas marché ...:-(
Please help me
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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. <
0
cs_ziedmaz Messages postés 10 Date d'inscription mardi 19 décembre 2000 Statut Membre Derniè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
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
1 juil. 2009 à 00:19
Même en ayant mis le GetDesktopWindow ?
Tu as une erreur ?
Tu as bien déclaré cette API dans ton projet ?
0
cs_ziedmaz Messages postés 10 Date d'inscription mardi 19 décembre 2000 Statut Membre Dernière intervention 1 juillet 2009
1 juil. 2009 à 00:42
S'il vous plait comment faire pour la declarer j'ai seulement 3 jours que j'ai appris à utiliser VB6
Merci d'avance..:-)
0
cs_ziedmaz Messages postés 10 Date d'inscription mardi 19 décembre 2000 Statut Membre Dernière intervention 1 juillet 2009
1 juil. 2009 à 01:00
j'ai ecrit dans la partie declaration: Declare Function GetDesktopWindow Lib "user32.dll" () As Long

mais toujours le meme pb !!
avez vous une idée ? merci
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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. <
0
cs_ziedmaz Messages postés 10 Date d'inscription mardi 19 décembre 2000 Statut Membre Derniè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 ..
0
Mayzz Messages postés 2813 Date d'inscription mardi 15 avril 2003 Statut Membre Dernière intervention 2 juin 2020 28
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. <
0
Rejoignez-nous