Auto cacher une fenetre d'un programme

Résolu
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 26 août 2007 à 12:00
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 27 août 2007 à 21:37
Yop à tous,

Voila, j'ai un programme dont j'aimerai bien qu'il tourne en arrière plan. Pour cela je voudrait que dés qu'il se lance, la fenêtre principale se cache automatique, car je n'ai pas envie de l'avoir dans mes pates dans ma barre. Seulement voila, impossible. J'ai esseye la fonction ShowWindow après la création de la fenêtre, cela ne va pas, alors que via un autre programme et avec cette mm fonction cela fonctionne nickel. J'ai esseye aussi en retirant le style WS_VISIBLE, cela ne change rien, j'ai regarder sur la MSDN après les autre style qu'une fenêtre peut avoir, j'ai rien trouver d'intéressant.

Si quelqu'un peut m'aider,

Merci d'avance.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]

14 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
26 août 2007 à 21:56
Voici un exemple avec timer. Il émet un bip toutes les secondes et s'auto-détruit après 20 bips:

#include <windows.h>

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprev, LPSTR cmd, int show)
{
    MSG msg;
    SetTimer(0,0,1000,0);
    int compteur=0;
    while (GetMessage(&msg, 0, 0, 0))
    {
        switch(msg.message)
        {
        case WM_TIMER:
            Beep(800,30);
            compteur++;
            break;
        default:
            break;
        }
        if (compteur==20) break;
    }
    return 0;
}

Si tu veux utiliser le clavier il faudra un petit hook global.
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
27 août 2007 à 03:42
Je viens de poster un code source comme exemple. J'espère qu'il te sera utile:
http://www.cppfrance.com/code.aspx?ID=43899
cs_vicenzo Messages postés 178 Date d'inscription mardi 16 août 2005 Statut Membre Dernière intervention 25 août 2010 1
26 août 2007 à 12:14
Comment tu lances ton programme (code, shell) ?
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
26 août 2007 à 12:28
J'ai dans l'idée de le lancer au démarrage, mais pour le moment je l'éxécute normalement mdr, je clique dessus :D

Pour ce qui est du code de création de la fenêtre, ben c'est le code généré par visual studio, donc le code normale.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]

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

Posez votre question
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
26 août 2007 à 15:07
Mets voir le code que tu utilises pour créer la fenêtre, parce que normalement sans WS_VISIBLE on n'est pas sensé la voir.
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
26 août 2007 à 15:13
voila :D

WNDCLASSEX     wndcls;
  memset(&wndcls, 0, sizeof(WNDCLASSEX));
  wndcls.cbSize = sizeof(WNDCLASSEX);
  wndcls.lpfnWndProc   = AppWndProc;
  wndcls.style         = CS_HREDRAW | CS_VREDRAW;
  wndcls.hInstance     = hinst;
  wndcls.lpszClassName = szappname;
  wndcls.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
  wndcls.hCursor       = LoadCursor(0, IDC_ARROW);
  if(!RegisterClassEx(&wndcls)) return 0;
  hmain = CreateWindowEx(0, szappname, szappname, WS_OVERLAPPED | WS_SYSMENU,
                        CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
                        0, 0, hinst, 0);
                       
  return (hmain != 0);

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
26 août 2007 à 15:51
Salut,
A quoi te sert de créer une fenêtre qui ne sera pas visible? Tu peux créer une application Win32 sans fenêtre.
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
26 août 2007 à 20:26
Parce que je vai quand mm avoir besoin de certain messages de celle-ci

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
26 août 2007 à 20:43
Quels messages par exemple?
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
26 août 2007 à 21:19
En faite ce dont j'ai besoin, c'est de pouvoir faire un programme totalement invisble dans le bureau et dans les application du gestionnaire de tâche, mais  tout de mm visible dans la liste des processus actif en cas de plantage. Et apart créer un prog avec une fenêtre invisible je ne voi pas comment faire d'autre.

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
26 août 2007 à 21:35
Ecoute testé ton code chez moi => fenêtre invisible. T'as pas mis un ShowWindow(hmain,nCmdShow) quelque part des fois?
Si non mets ton code en entier parce que le bug n'est pas là.
Cela dit un proc sans fenêtre est visible dans la liste des proc actifs et tu peux faire une boucle de msg sans fenêtre, t'auras juste pas de WndProc mais tu peux quand même récupérer les messages dans la boucle.
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
26 août 2007 à 21:44
Une application win32 sans fenêtre( ou même un service) répond exactement à ce que tu veux faire. Reste à savoir quels messages tu veux utiliser et pourquoi.
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
26 août 2007 à 21:50
Non pas un service car celui-ci ne doit pas etre actif avant le log. En faite j'ai surtout besoins du message WM_TIMER qui il est vrai n'a rien avoir avec la présence ou non d'une fenêtre, pour le reste je me débrouillerai. Oki un prog sans fenêtre, mais cela me perturbe un peut lol, surtout pour la boucle des messages , hwnd sera quoi ?

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
27 août 2007 à 21:37
Nickel, un grand merci racpp :D C'est vraiment ce qu'il me faut :D

++
deck_bsd
___________________________________
[http://deck-bsd.eurower.net]
Rejoignez-nous