Cliquer sur un programme sans le ramener au premier plan

Fermé
programmourdefou - 21 avril 2015 à 14:11
 programmourdefou - 25 avril 2015 à 19:13
Bonjour à tous !

Je code un programme qui lance des musiques aléatoirement. Je le code en C, sous codeblock avec un compilateur mingw, et j'utilise la biblothèque graphique SDL. Je suis sous windows 8.

Mon programme marche parfaitement, je m'éclate vraiment à l'utiliser ! Sauf que j'ai un petit soucis !
En effet, j'aimerais que lorsque qu'on clique sur mon programme, il ne s'affiche pas au premier plan mais reste "derrière". J'ai essayé quelques scripts en auto-it et j'ai cherché des heures dans la documentation de la SDL (qui crée la fenêtre) mais je n'ai rien trouvé...

En desespoir de cause, je me tourne vers vous, chers amis programmeurs (ou pas), qui m'avaient déjà sortis d'un bon nombre de problème !

Merci d'avance :3
programmourdefou
A voir également:

4 réponses

Salut à toi !

Alors, cela me semble assez difficile mais que dirait du de créer un script qui ramenera au premier plan, les programmes qui l'étaient avant que tu ne clique sur ton programme musical ?
Je m'explique :
- Firefox est au premier plan (ton script l'identifie et le garde en mémoire)
- Tu cliques sur ton programme (ton script identifie le clic, et ramène au permier plan Firefox)
- Firefox revient au premier plan, même si tu as cliqué sur ton programme !

A ton service ;)
Yota
0
programmourdefou
21 avril 2015 à 19:29
Merci Yota, de ta réponse !

Ouah... L'algorithme que tu proposes est extrêmement interessant et prometteur, je te remercie beaucoup !
Seulement, je ne vois pas trop comment coder un truc pareil... Surtout en c !
Je crois qu'il faudrait utiliser Windows.h et hwnd pour identifier le clic sur mon programme et ramener au premier plan les autres programmes (dans ton exemple, Firefox), mais alors pour identifier les programmes déjà au premier plan (à la base).... Je ne sais pas faire ^^

Peut-être quelqu'un aurait-il une idée à ce niveau là ? (pour info : je peux coder aussi en batch et en auto-it)
0
[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié par [Dal] le 22/04/2015 à 09:48
Salut programmourdefou,

Le plus simple dans ton cas est de ne pas le programmer et d'utiliser les fonctionnalités de Windows.

Je n'ai pas de Windows 8 sous la main, mais en général sous Windows, tu peux procéder de la façon suivante :

- tu crées un raccourci sur ton exécutable (clic droit sur l'exécutable - créer un raccourci)
- tu clique droit sur le raccourci et affiche les propriétés
- dans les propriétés du raccourci (onglet raccourci) tu as une ligne "Exécuter" avec plusieurs choix possibles
- tu choisis : "Réduite" au lieu de "Fenêtre normale" et tu valides les changements
- tu lances ton application au moyen du raccourci, laquelle devrait se lancer sous forme réduite.

Si l'application SDL crée une véritable application Windows, elle devrait comporter un WinMain qui gère le 4ème paramètre descriptif de l'état de la fenêtre au lancement du programme.

Autrement, tu devrais pouvoir le faire avec l'API de Windows à partir de ton programme C, en utilisant ShowWindow en obtenant au préalable un handle sur ta fenêtre avec GetActiveWindow (non testé). Les prototypes de ces fonctions sont accessibles dans Winuser.h, qui est inclu dans Windows.h (il suffit donc en principe d'inclure ce dernier).

Dal
0
programmourdefou
25 avril 2015 à 00:10
Merci beaucoup pour ta réponse :)
J'ai essayé et ca marche ! Seulement, dès que je clique sur mon programme, il revient au premier plan...
Je voudrais que même en cliquant dessus, il reste "derrière".

Désolé de vous embêter mais c'est vraiment important ^^ (dernière modification avant que mon programme devienne totalement fonctionnel :D )
Merci beaucoup !
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
25 avril 2015 à 12:21
Salut,

Passer par script pour gérer ce comportement ? oO.
Pourquoi ne pas utiliser plutôt les API Windows. Ca sera plus efficace et plus propre.

Par exemple pour afficher ton programme en arrière plan lors de l'exécution, tu peux utiliser SetWindowPos().
SetWindowPos(hwnd, HWND_BOTTOM,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE);


Cdlt,
0
programmourdefou
25 avril 2015 à 19:13
Utiliser l'API Windows semble être en effet beaucoup plus simple ! Merci :)

Ton code marche ! C'est magnifique !!!!
Cependant, j'aurai besoin qu'il se renouvelle à chaque fois que l'utilisateur clique sur le programme... Des idées par rapport à ca ?

Merci encore ! C'est vraiment super super gentil de votre part à tous !
0