Lancement d'un programme via un service

Signaler
Messages postés
61
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
Bonjour tout le monde
Voilà mon problème : j'ai fait un petit prog qui, lorsqu'il y a fermeture de session ou de windows, il me lancer une fonction  toto. Ca fonctionne très bien (je vous ai mis le code en dessous). Mais lorsque je démarre ce prog par un service ac l'utilisateur system, je le vois bien dans les processus démarrés mais il n'est pas pris en compte lors de la fermeture de session. Quelqu'un aurait une idée du pourquoi de la chose ??????????

Merci par avance

#include <windows.h>
#include <string>
#include <stdio.h>
#include
#include "fonction2.h"



#define IDM_QUIT 1
#define IDM_OPEN 2




LRESULT CALLBACK MainWndProc(HWND, UINT, WPARAM, LPARAM);




int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance,
                                                LPSTR lpCmdLine, int nCmdShow)
{
    HWND hwnd;
    MSG msg;
    WNDCLASS wc;




    wc.style = 0;
    wc.lpfnWndProc = MainWndProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = NULL;
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE);
    wc.lpszMenuName =  NULL;
    wc.lpszClassName = "MaWinClass";




    if(!RegisterClass(&wc)) return FALSE;




    hwnd = CreateWindow("MaWinClass", "Titre", WS_OVERLAPPEDWINDOW,
                                   CW_USEDEFAULT, CW_USEDEFAULT, 400, 300,
                                                   NULL, NULL, hinstance, NULL);
    if (!hwnd) return FALSE;




    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);




       while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
/******************************************************************************/




LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
         case WM_CREATE:     return 0;




        case WM_QUERYENDSESSION :
          toto(lParam);
            return 0;
           




        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
 
     default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
}








 Laetitia

3 réponses

Messages postés
1
Date d'inscription
vendredi 2 mai 2003
Statut
Membre
Dernière intervention
21 décembre 2006

Bonjour,



Tu répondes toi même a ta question.



Quand tu es l'utilisateur system tu ne reçois pas le message
WM_QUERYENDSESSION de l'utilisateur principal, et heuresement.
Depuis un service il faut regarder du coté de RegisterServiceCtrlHandlerEx

Rémi
Messages postés
61
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
19 janvier 2007

Merci mais je ne connais pas RegisterServiceCtrlHandlerEx : c'est quoi ? Comment je l'utilise ?
Et sinon, j ene peux pas lancer ce prog avec l'utilisateur qui a ouvert sa session par exemple ?

 Laetitia
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Ton code n'est pas un service Windows.
Tu peux regarder les réponses que je t'avais proposées ICI.
Voici un petit tutorial pour débuter avec les services:
http://chgi.developpez.com/windows/services/