Bonjour,
j'aimerai savoir comment lancer, mais surtout arreter (oui, parce que pour lancer, il suffit de faire un ShellExecute) une application service.
Ce serai pour gerer mes serveurs Apache, MySQL et SMTP
Bonjour,
j'aimerai savoir comment lancer, mais surtout arreter (oui, parce que pour lancer, il suffit de faire un ShellExecute) une application service.
Ce serai pour gerer mes serveurs Apache, MySQL et SMTP
Salut,
Je ne sais pas si ça répond à la question, mais tu peux aller voir ici :
http://www.developpez.net/forums/vie...hlight=#229238
Selon ce que tu veux faire, le Timer peut être utile ou non ...
En espérant avoir pu t'aider![]()
Bonne Continuation
Mathieu
peut etre que je me trompe, mais aucune fenetre n'est ouverte pour une application service, donc je ne pourrait pas trouver le Handle de la fenetre avec :
comme dans ton code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 HWND HandleF = FindWindow("About", "#32770");
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 HWND HandleF = FindWindow("About", "#32770"); if (HandleF) { PostMessage(HandleF, WM_CLOSE, NULL, NULL); Timer1->Enabled = false; }
Salut,
C'est peut-être moi qui me trompe sur la définition d'Application Service ...![]()
Si aucune fenêtre n'est réellement créée, je ne sais pas si FindWindow permet aussi d'accéder aux processus en cours ...
Essaye quand même;
Si cela ne marche pas, je te poste ce soir une procédure de CALLBACK qui pemet d'énumérer toutes les fenêtres actives, ainsi que les processus.
Bonne Chance
Mathieu
Finalement, j'ai retrouvé ça![]()
Unit1.h
Unit1.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 bool CALLBACK EnumWindowsProc(HWND hWnd, TListView *ListView); class TForm1 : public TForm { __published: TListView *ListView1; TButton *Button1; void __fastcall Button1Click(TObject *Sender); private: public: __fastcall TForm1(TComponent* Owner); };
Ensuite, tu reconnais ton processus ... et le tour est joué
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 void __fastcall TForm1::Button1Click(TObject *Sender) { ListView1->Items->Clear(); EnumChildWindows(GetDesktopWindow(),(WNDENUMPROC)EnumWindowsProc,(LPARAM)ListView1); EnumWindows((WNDENUMPROC)EnumWindowsProc,(LPARAM)ListView1); EnumDesktopWindows(NULL,(WNDENUMPROC)EnumWindowsProc,(LPARAM)ListView1); } bool CALLBACK EnumWindowsProc(HWND hWnd, TListView *ListView) { char WindowName[80], ClassName[80]; GetWindowText(hWnd, WindowName, 80); GetClassName(hWnd, ClassName, 80); ListView->Items->Add(); int i=ListView->Items->Count-1; ListView->Items->Item[i]->Caption=AnsiString(WindowName); ListView->Items->Item[i]->SubItems->Add(AnsiString(ClassName)); ListView->Items->Item[i]->Update(); return true; }![]()
Je pense que ça devrait convenir![]()
Bonne Continuation
Mathieu
Moi j'ai trouvé ça, je pense que ca correspond mieux, mais j'arrive pas à me servir de la structure SERVICE_STATUS du ServiceControl. J'ai trouvé ces infos dans l'aide du Windows SDK, à Service Functions :
voila ce que j'ai fais :Button1 pour Démarrer, et ca marche !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "monitor.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; SC_HANDLE schandle, startApache, stopApache; SERVICE_STATUS *service_status; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { schandle=OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { startApache=OpenService(schandle, "Apache", SERVICE_START ); StartService(startApache, NULL, NULL); } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { stopApache=OpenService(schandle, "Apache", SERVICE_STOP); ControlService(stopApache, SERVICE_CONTROL_STOP, service_status); }
Button2 pour arreter, mais ca marche pas!
tu a oublié un léger détail,
tu dois ouvrir le service avec la possibilité de Démarrer,Arrêter, interroger l'état du Service
utilise le code suivant
Avec mes Salutations
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 SERVICE_STATUS OpenServStatus; SC_HANDLE schandle; Fservice; schandle=OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); Fservice=OpenService(schandle, "Apache", SERVICE_QUERY_STATUS|SERVICE_START|SERVICE_STOP); // maintenant pour démarre le Service StartService(Fservice,NULL,NULL); // pour le Stopper ControlService(FWatchService, SERVICE_CONTROL_STOP, &OpenServStatus);
![]()
![]()
vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
je vous en souhaite une excellente lecture ...
A lire : Les règles du forum
Partager