Lancer exe en transparent avec en paramètre un fichier ini

ladylazy23 Messages postés 11 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 31 août 2009 - 24 avril 2009 à 14:56
ladylazy23 Messages postés 11 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 31 août 2009 - 24 avril 2009 à 17:22
Bonjour,
Je voulais savoir s'il était possible de lancer une application en transparent sachant qu'elle est associée à un fichier ini.
J'ai essayé de lancer l'application de la façon suivante :
pid2 = (Shell("Mon_appli.exe, vbNormalNoFocus))
handappli = InstanceToWnd(pid2)
SetWindowLong handappli, GWL_EXSTYLE, GetWindowLong(handappli, GWL_EXSTYLE) Or WS_EX_LAYERED
SetLayeredWindowAttributes handappli, 0, 125, LWA_ALPHA
L'application est bien lancée en transparent.

Mais par contre quand je fais ceci :
pid2 = (Shell("Mon_appli.exe  FICHIERDECONFIG|mon_fichier.ini", vbNormalNoFocus))
handappli = InstanceToWnd(pid2)
SetWindowLong handappli, GWL_EXSTYLE, GetWindowLong(handappli, GWL_EXSTYLE) Or WS_EX_LAYERED
SetLayeredWindowAttributes handappli, 0, 125, LWA_ALPHA
L'application ne se lance pas en transparent.

J'aimerais savoir d'où vient le problème

Merci.

19 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
24 avril 2009 à 15:01
utilises ShellExecute, plutot que Shell

plus fiable pour le passage de parametres
0
ladylazy23 Messages postés 11 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 31 août 2009
24 avril 2009 à 15:13
Je viens de tester votre solution mais j'ai toujours le même problème.
Est-ce que cela peut venir de l'application à lancer?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
24 avril 2009 à 15:19
quel est ton code actuel ?

a voir en debug si tu récupères bien handappli
0
ladylazy23 Messages postés 11 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 31 août 2009
24 avril 2009 à 15:24
Voilà le code que j'ai mis
pid2 = ShellExecute(0, "open", "mon_appli.exe", " FICHIERDECONFIG|mon_fichier.ini", 0&, 0&)
handappli = InstanceToWnd(pid2)
SetWindowLong handappli, GWL_EXSTYLE, GetWindowLong(handappli, GWL_EXSTYLE) Or WS_EX_LAYERED
SetLayeredWindowAttributes handappli, 0, 125, LWA_ALPHA

Le premier paramètre de shellexecute je l'ai mis à zéro car je ne connait pas encore son handle. Le problème vient surement de là car le handappli reste à zéro.
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
24 avril 2009 à 15:31
ok pour le 0& au premier parametre (utile uniquement pour établir une dépendance entre fenetres, mais bon...)

handappli restera à 0 tant que tu n'aura pas récupéré le PID de ton appli.
logique, puisque c'est ce qu'exploite InstanceToWnd ^^

regarde la doc de ShellExecute, ca t'en dira plus.
0
ladylazy23 Messages postés 11 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 31 août 2009
24 avril 2009 à 15:45
J'ai récupéré le handle de mon application grâce à la fonction FindWindow mais on revient au point de départ car l'application n'est pas transparente.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
24 avril 2009 à 15:51
et sans ce fichier ini ca fonctionne ?

que fais ton appli avec ce fichu fichier ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
24 avril 2009 à 15:52
tu as testé le code retour de SetLayeredWindowAttributes ?
0
ladylazy23 Messages postés 11 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 31 août 2009
24 avril 2009 à 15:55
le fichier ini permet de faire la connexion à une base de données et sans ce fichier en paramètre dans un shell l'application apparait en transparent
0
ladylazy23 Messages postés 11 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 31 août 2009
24 avril 2009 à 15:57
le code retour de SetLayeredWindowAttributes est 0
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
24 avril 2009 à 16:02
http://msdn.microsoft.com/en-us/library/ms633540(VS.85).aspx

If the function fails, the return value is zero. To get extended error information, call GetLastError.

que nous donne err.LastDllError ? (equivalent de GetLastError)

voir le message en clair ici

http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx
0
ladylazy23 Messages postés 11 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 31 août 2009
24 avril 2009 à 16:05
J'ai utilisé GetlastError. La fonction me renvoie le code error 1400 qui correspond Invalid window handle. ERROR_INVALID_WINDOW_HANDLE.

Existe une autre solution que de passer par findwindow pour récupérer le handle
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
24 avril 2009 à 16:09
tu peux enumérer les fenetres de l'appli lancée...
mais FindWindow me semble un bon point de départ.

lances SPY++ pour t'assurer que le handle que tu trouves est le bon...
0
ladylazy23 Messages postés 11 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 31 août 2009
24 avril 2009 à 16:10
A cause d'un copier coller, j'avais oublié de renommer une variable. Donc maintenant le code error de GetLastError est à 0 mais la fenêtre n'est toujours pas transparente !!
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
24 avril 2009 à 16:13
SetLayeredWindowAttributes est à 0 et Err.LAstDllError aussi ?

aïe.
0
ladylazy23 Messages postés 11 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 31 août 2009
24 avril 2009 à 16:26
SetLayeredWindowAttributes est à 0 et GetLastError est à 1400
0
ladylazy23 Messages postés 11 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 31 août 2009
24 avril 2009 à 16:27
Comment peut-on récupérer le PID directement sans passer par findwindow car je peut avoir plusieurs fois l'application lancée?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 72
24 avril 2009 à 16:32
utilises plutot ShellExecuteEx, si tu souhaites piquer des infos sur le process lancé, comme l'indique la doc de ShellExecute
0
ladylazy23 Messages postés 11 Date d'inscription jeudi 28 décembre 2000 Statut Membre Dernière intervention 31 août 2009
24 avril 2009 à 17:22
J'ai recommencé avec ShellExecuteEx.
J'ai les codes retour suivant :


SetLayeredWindowAttributes est à 1
GetLastError est à 0.

L'application n'est toujours pas transparente !
0