GESTION DES SERVICES WINDOWS PAR LES API DANS UNE CLASSE
excrt
Messages postés75Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention 3 juillet 2006
-
2 juin 2006 à 17:49
Micky0001
Messages postés1Date d'inscriptionsamedi 3 mai 2003StatutMembreDernière intervention 2 juin 2009
-
2 juin 2009 à 21:23
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
// ton code
hServiceStatus = QueryServiceStatus( ... );
quand on lit ca, on ce dit, ah! QueryServiceStatus() retourne un « HANDLE », mais non! c'est faux! QueryServiceStatus() retourne un « BOOL » !
excrt
Messages postés75Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention 3 juillet 2006 2 juin 2006 à 17:50
en passant, retire cette phrase « pas d'erreur de compilation »
je ne veux pas être méchant mais c'est ridicule puisque
« 0 error(s), 0 warning(s) » ne veut strictement _rien_ dire ...
excrt
Messages postés75Date d'inscriptionmercredi 5 avril 2006StatutMembreDernière intervention 3 juillet 2006 2 juin 2006 à 17:49
pour la Xeme fois
#include <stdlib.h> // C
#include <cstdlib> // C++
#include // BAD! sans .h << cette version est obsolète(elle existe encore pour une raison de compatibilité avec de ~vieux programmes)
#include // GOOD
ta gestion des chaines de caractères est _Complètement_ nulle
Cl_SVR::Cl_SVR(){
service="\0"; // c'est un char*, pas d'allocation mémoire ni rien d'autre du genre
strcat(service,"inort"); // ca va faire !!!CABOUME!!!
nompc="\\\"; strcat(nompc,getenv("COMPUTERNAME")); // ca aussi!
Status();
}//end procedure
pourquoi est-ce que tu n'utiliserais pas les basic_string hein?
void Cl_SVR::PsKill(const char * proc)
{
//char * cmd = new (char[100]);
char cmd[100+1]; // si tu ne veux pas libérer la mémoire alors pas de « new » !
snprintf(cmd, 100, "pskill -t %s %s >log.txt", nompc, proc);
//strcpy(cmd,"\0");
//strcat(cmd,"pskill -t ");
//strcat(cmd,nompc);
//strcat(cmd," ");
//strcat(cmd,proc);
//strcat(cmd," >log.txt");
system(cmd);
}//end function
Je suis désolé de te le dire mais ton code n'est pas bon, mais pas du tout!
Va reviser la « Gestion Des Chaînes De Caractères » !!!
si tu utilise un « char* », tu dois lui assigner/allouer de la _Mémoire_
tu ne peux pas manipuler ton pointeur, qui, pointe sur _Rien_ !
sinon, comme j'ai dit plus haut, utilise basic_string >> #include <string>
avec basic_string, pas besoin de t'occuper de la gestion de la mémoire, basic_string le fait tout seul comme un grand!
autre petite chose, pour le « status », utilise un entier quelconque pour connaître le status et non une chaine, avec un entier ca serait tellement plus simple/rapide/... et surtout, beaucoup mais beaucoup moins lourd à gérer. si tu tiens absolument a obtenir le status en « texte », ajoute une simple/petite/... fonction qui va te retourner le status(en texte)
2 juin 2009 à 21:23
ne pas oublier le using namepsace std;
sinon ca fais tt foirer ^^
2 juin 2006 à 20:28
2 juin 2006 à 17:59
BOOL hServiceStatus;
BOOL hControlService;
BOOL hStartServices;
« h » désigne un « HANDLE », pas un BOOL
BOOL bServiceStatus;
BOOL bControlService;
BOOL bStartServices;
// serait plus ... approprié
// ton code
hServiceStatus = QueryServiceStatus( ... );
quand on lit ca, on ce dit, ah! QueryServiceStatus() retourne un « HANDLE », mais non! c'est faux! QueryServiceStatus() retourne un « BOOL » !
2 juin 2006 à 17:50
je ne veux pas être méchant mais c'est ridicule puisque
« 0 error(s), 0 warning(s) » ne veut strictement _rien_ dire ...
2 juin 2006 à 17:49
#include <stdlib.h> // C
#include <cstdlib> // C++
#include // BAD! sans .h << cette version est obsolète(elle existe encore pour une raison de compatibilité avec de ~vieux programmes)
#include // GOOD
ta gestion des chaines de caractères est _Complètement_ nulle
Cl_SVR::Cl_SVR(){
service="\0"; // c'est un char*, pas d'allocation mémoire ni rien d'autre du genre
strcat(service,"inort"); // ca va faire !!!CABOUME!!!
nompc="\\\"; strcat(nompc,getenv("COMPUTERNAME")); // ca aussi!
Status();
}//end procedure
pourquoi est-ce que tu n'utiliserais pas les basic_string hein?
#include <string>
class Cl_SVR
{
// ...
string service;
string nompc;
// ...
};
Cl_SVR::Cl_SVR() : service("inort"), nompc("\\\")
{
nompc += getenv("COMPUTERNAME");
Status();
}//end procedure
Cl_SVR::Cl_SVR(const char * s,const char * pc) : service(s), nompc("\\\")
{
nompc += pc;
Status();
}//end procedure
service.c_str() pour obtenir un pointeur sur la chaine
const char* c_str() const {
return un_pointeur_sur_la_chaine;
}
etc...
etc...
etc...
void Cl_SVR::PsKill(const char * proc)
{
//char * cmd = new (char[100]);
char cmd[100+1]; // si tu ne veux pas libérer la mémoire alors pas de « new » !
snprintf(cmd, 100, "pskill -t %s %s >log.txt", nompc, proc);
//strcpy(cmd,"\0");
//strcat(cmd,"pskill -t ");
//strcat(cmd,nompc);
//strcat(cmd," ");
//strcat(cmd,proc);
//strcat(cmd," >log.txt");
system(cmd);
}//end function
Je suis désolé de te le dire mais ton code n'est pas bon, mais pas du tout!
Va reviser la « Gestion Des Chaînes De Caractères » !!!
si tu utilise un « char* », tu dois lui assigner/allouer de la _Mémoire_
tu ne peux pas manipuler ton pointeur, qui, pointe sur _Rien_ !
sinon, comme j'ai dit plus haut, utilise basic_string >> #include <string>
avec basic_string, pas besoin de t'occuper de la gestion de la mémoire, basic_string le fait tout seul comme un grand!
autre petite chose, pour le « status », utilise un entier quelconque pour connaître le status et non une chaine, avec un entier ca serait tellement plus simple/rapide/... et surtout, beaucoup mais beaucoup moins lourd à gérer. si tu tiens absolument a obtenir le status en « texte », ajoute une simple/petite/... fonction qui va te retourner le status(en texte)
const char* getStatusString(int nStatus)
{
switch (nStatus)
{
case X: return "status X";
case Y: return "status Y";
// ...
default: break;
}
return "unknown status";
}
...
...
...