Permettre à une application C++ de s'icônifier (en bas à droite)...

Permettre à une application C++ de s'icônifier (en bas à droite)... - C++ - Programmation

Marsh Posté le 23-06-2003 à 17:01:30    

Voilà, tout est ds le titre, j'aimerais qu'une appli que j'ai faite en C/C++ puisse se mettre dans les icônes de la barre des tâches en bas à droite...(enfin ça peut etre en haut à gauche suivant l'organisation de votre bureau, c pas pour contrarier hein :D)...
 
Comment puis-je m'y prendre svp ?
 
Merci

Reply

Marsh Posté le 23-06-2003 à 17:01:30   

Reply

Marsh Posté le 23-06-2003 à 17:04:43    

Shell_Notifyicon()
 
edit: j'avais expliqué la manip ici (attention, c'est valable pour les MFC)
 
http://forum.hardware.fr/forum2.ph [...] 303&cat=10


Message édité par Harkonnen le 23-06-2003 à 17:06:43

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-06-2003 à 17:07:05    

plantage de drapo...ca a de bonnes chances de me servir!

Reply

Marsh Posté le 23-06-2003 à 17:09:46    

oki merci, j'avais cherché mais pas trouvé...
et y'a pas moyen d'utiliser ça sans les MFC (koike ça semble logique d'en avoir besoin, vu qu'on touche aux fenetres win, mais bon...) ?
 
Merci :jap:

Reply

Marsh Posté le 23-06-2003 à 17:11:07    

pilou51 a écrit :

oki merci, j'avais cherché mais pas trouvé...
et y'a pas moyen d'utiliser ça sans les MFC (koike ça semble logique d'en avoir besoin, vu qu'on touche aux fenetres win, mais bon...) ?
 
Merci :jap:


Si, bien sur ! Shell_Notifyicon est une fonction Win32. D'ailleurs, vu qu'elle n'est pas encapsulée par les MFC, une grande partie de ce que j'explique dans le topic est réutilisable.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-06-2003 à 17:15:29    

Oui mais mon prog n'a mm pas de fenetre propre, c un serveur qui écoute en permanence (socket en TCP), il a juste une fenetre de commandes MS DOS koi, donc je pense pas que ça soit possible, je vois pas comment gérer les HWND dans ce contexte :(

Reply

Marsh Posté le 23-06-2003 à 17:18:45    

pilou51 a écrit :

Oui mais mon prog n'a mm pas de fenetre propre, c un serveur qui écoute en permanence (socket en TCP), il a juste une fenetre de commandes MS DOS koi, donc je pense pas que ça soit possible, je vois pas comment gérer les HWND dans ce contexte :(


Ben dans ce cas tu iconifies la fenêtre MS-DOS dans la barre des taches, t'as besoin absolument de la mettre à coté de l'horloge :??:
Sinon, le HWND tu peux le trouver via un EnumerateWindow() et un FindWindow (ou en utilisant des inspecteurs de fenêtre du style de Spy++)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-06-2003 à 17:19:23    

pilou51 a écrit :

Oui mais mon prog n'a mm pas de fenetre propre, c un serveur qui écoute en permanence (socket en TCP), il a juste une fenetre de commandes MS DOS koi, donc je pense pas que ça soit possible, je vois pas comment gérer les HWND dans ce contexte :(


 
tu créés une "message-only" window.
 
http://msdn.microsoft.com/library/ [...] ssage_only
 
sinon pour gérer les messages du tray sans mfc, tu modifies ta wndproc de cette facon:
 

Code :
  1. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  2. {
  3. switch (message)
  4. {
  5.  case WM_TRAYMSG:
  6.  {
  7.   switch (lParam)
  8.   {
  9.    case WM_LBUTTONDOWN:
  10.     break;
  11.    case WM_RBUTTONDOWN:
  12.     break;
  13.    case WM_LBUTTONDBLCLK:
  14.     break;
  15.   }
  16.  }

Reply

Marsh Posté le 23-06-2003 à 17:21:17    

oki merci v essayer ça :)
 
Ben si je veux l'icônifier, c que le pc sur lequel doit tourner ce prog d'écoute sert pour d'autres choses, et qu'il faut pas fermer ça par erreur... hors qd ça traîne ds la barre des tâches... on a tendance à faire des gaffes  :whistle:

Reply

Marsh Posté le 23-06-2003 à 17:25:51    

pilou51 a écrit :

oki merci v essayer ça :)
 
Ben si je veux l'icônifier, c que le pc sur lequel doit tourner ce prog d'écoute sert pour d'autres choses, et qu'il faut pas fermer ça par erreur... hors qd ça traîne ds la barre des tâches... on a tendance à faire des gaffes  :whistle:  


 
bah dans ce cas tu fais "new project", tu fais "win32 project", + "empty project", tu colles tout ton source dedans en remplacant le main par le winmain, comme ca qd tu lances l'éxé, il tourne en fond, sans console ni fenetre, la seule maniere de le quitter c'est de le tuer ds le gestionnaire des taches.

Reply

Marsh Posté le 23-06-2003 à 17:25:51   

Reply

Marsh Posté le 23-06-2003 à 17:38:09    

par défaut le winmain crée pas de fenetre du tt ?? je savais pas.....
 
merci :)

Reply

Marsh Posté le 23-06-2003 à 17:38:45    

euh...

Code :
  1. MSVCRTD.lib(wcrtexew.obj) : error LNK2001: unresolved external symbol _wWinMain@16


ça vous dit qqchose ? :(

Reply

Marsh Posté le 23-06-2003 à 17:46:03    

pilou51 a écrit :

euh...

Code :
  1. MSVCRTD.lib(wcrtexew.obj) : error LNK2001: unresolved external symbol _wWinMain@16


ça vous dit qqchose ? :(


 
va y avoir des pb d'include a mon avis...
 
qqpart il faut que tu include windows.h ou similaires, mais ca va faire des conflits avec d'autres include...
 
bref, gros bordel en vue. si t'as le courage t'y arriveras, mais tu risques d'y passer entre 1 et plein d'heures.
 
Le 1er truc a faire c'est de remplacer ton "int main()" par "int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)"


Message édité par Konar le 23-06-2003 à 17:46:57
Reply

Marsh Posté le 23-06-2003 à 18:06:51    

http://forum.hardware.fr/icones/flag1.gif


---------------
Another .Net Blog
Reply

Marsh Posté le 24-06-2003 à 08:55:47    

ok merci, je m'y remets ce matin :)

Reply

Marsh Posté le 24-06-2003 à 10:51:02    

Sinon, le mieux pour ton problème est de créer ton application sous la forme d'un service si elle tourne sous NT/2000/XP. Je crois qu'il est possible de simuler un service sous 95/98/ME également.
Ainsi, tu es tranquille, ton application tournera même si personne n'est loggué et elle ne risque pas d'être arrétée par erreur (surtout si tu gères bien les autorisations sur la machine).
 
Pour ton erreur, vérifie que tu ais bien créé une fonction WinMain (comme Konar l'indique) et que le fichier la contenant est bien compilé (sous Visual, il faut qu'il fasse partie du projet).


---------------
each day I don't die is cheating
Reply

Marsh Posté le 24-06-2003 à 13:38:06    

ça marche maintenant avec le WinMain, donc le seul moyen de le tuer est en passant par le gestionnaire des tâches. (faut y penser qd on recompile le prog ;))
 
Peux-tu m'en dire plus sur la manière de gérer l'application en tant que service stp ?
 
Merci encore  :hello:

Reply

Marsh Posté le 24-06-2003 à 13:46:31    

Pour faire un service, le mieux est encore que tu ailles directement voir la MSDN.
Sinon, tu dois pouvoir trouver des trucs chez CodeProject ou CodeGuru.
Une autre solution est d'utiliser un soft pour le faire... Je sais que ça existe, mais je ne peut pas te citer de nom.


---------------
each day I don't die is cheating
Reply

Marsh Posté le 24-06-2003 à 13:48:09    

oki merci v chercher un peu, parceque c vrai que ça serait mieux :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed