kollibar
Messages postés45Date d'inscriptionsamedi 7 juin 2003StatutMembreDernière intervention31 janvier 2006 8 sept. 2004 à 10:31
salut!
juste un petit comment,
sous windows Xp, les fonctions pour eteindre le pc et pour desactivé ctrl+alt+suppr ne fonctionne pas!
pour eteindre l ecran il fautr rajouter avant la fontion ExitWindows(c'est pour avoir les privilèges pour eteindre le pc):
/* objet version windows */
OSVERSIONINFOEX osversion;
ZeroMemory (&osversion, sizeof(OSVERSIONINFOEX));
osversion.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if(!(GetVersionEx ((OSVERSIONINFO *)&osversion))) {
/* si echec de la recuperation de version => recuperation sans les info complementaire */
osversion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (!GetVersionEx ((OSVERSIONINFO *)&osversion)) return false;
}
if (osversion.dwPlatformId == VER_PLATFORM_WIN32_NT) {
// noyau NT
/* ajout des privileges pour pouvoir eteindre l'ordinateur
sur les systemes NT seulement */
HANDLE hToken;
TOKEN_PRIVILEGES tokenprivilege;
// recup un Token pour ce process
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return( FALSE );
if (GetLastError() != ERROR_SUCCESS) return FALSE;
}
pour le ctrl+alt+suppr je sais pas
Sinon tu pourrais organiser ton prog de meilleur facon:
commande=??
switch(commande) {
case "!time" : time();break;
case "!flashwin" : flashwin();break;
.......
}
la lecture en serait plus simple et tu pourrais mettre tes fonctions ds des fichiers a part.
cs_shown
Messages postés40Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention24 décembre 2007 8 sept. 2004 à 02:51
Merci pour tes commentaires NitRic jvais essayer d'arranger tout ca mais ca va me prendre un peu de temps : le temps d'apprendre :)
Surtout pour valider les valeurs retournées ça j'ai pas pris l'habitude de le faire, c'est un mauvais pli...
NitRic
Messages postés402Date d'inscriptionmardi 1 mai 2001StatutMembreDernière intervention15 août 2011 8 sept. 2004 à 02:26
Essaie, manuellement, de créer des répertoires et/ou fichiers avec, au total, plus de 260 caractères ...
ex:
Cré un répertoire sur ton bureau, entre dedans et cré un nouveau répertoire, entre dans ce dernier et cré un nouveau répertoire et ainsi de suite ...
Tu auras une erreur un moment donné; Nom de fichier trop long.
la define MAX_PATH n'existe pas pour rien, utilise la, elle est très utile.
Moi le maximum que j'ai réussi à faire c'est 247 caractères pour un nom de fichier incluant les noms des répertoires ou il ce trouvait, sous NTFS.
Si `jamais` tu veux un _bon_ conseil, valide les valeurs retournées par tes fonctions, la valeur de tes variables, ...
Tu pourais aussi te créer une petite routine pour gérer les commandes recues, cette fonction pourait te retourner un entier(signé ou non) ainsi que les paramètres/commandes/... et avec cet entier tu fais un petit switch() dans lequel tu `call` les routines appropriées selon la commande recu en leurs passant les paramètres/commandes/...
En passant, tu as une tonne d'include inutile!
winsock2.h inclu déjà windows.h et windows.h inclus winbase.h, winuser.h, windef.h, winresrc.h, wingdi.h, winreg.h, etc ... Te casse pas la tête pour rien =P
#niclude <winsock2.h> /* cela suffit :) */
Tu devrais, t'en qu'a apprendre, apprendre à dev de facon modulaire, le fait d'avoir plusieurs .c/.cpp/.h/.hpp/.lib/..., en autant qu'il/elle soit utile, n'est pas méchant, inutile, stupide, malpropre, ... tout au contraire, c'est parfait, même pour un projet aussi petit que le tient, ca rend le code beaucoup plus `propre`, lisible, structuré, ...
8 sept. 2004 à 10:31
juste un petit comment,
sous windows Xp, les fonctions pour eteindre le pc et pour desactivé ctrl+alt+suppr ne fonctionne pas!
pour eteindre l ecran il fautr rajouter avant la fontion ExitWindows(c'est pour avoir les privilèges pour eteindre le pc):
/* objet version windows */
OSVERSIONINFOEX osversion;
ZeroMemory (&osversion, sizeof(OSVERSIONINFOEX));
osversion.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if(!(GetVersionEx ((OSVERSIONINFO *)&osversion))) {
/* si echec de la recuperation de version => recuperation sans les info complementaire */
osversion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (!GetVersionEx ((OSVERSIONINFO *)&osversion)) return false;
}
if (osversion.dwPlatformId == VER_PLATFORM_WIN32_NT) {
// noyau NT
/* ajout des privileges pour pouvoir eteindre l'ordinateur
sur les systemes NT seulement */
HANDLE hToken;
TOKEN_PRIVILEGES tokenprivilege;
// recup un Token pour ce process
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) return( FALSE );
// recup le LUID du privilege d'arret
LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tokenprivilege.Privileges[0].Luid);
tokenprivilege.PrivilegeCount = 1; // one privilege to set
tokenprivilege.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
//recupere les privileges pour areter l ordinateur
AdjustTokenPrivileges(hToken, FALSE, &tokenprivilege, 0, (PTOKEN_PRIVILEGES)NULL, 0);
if (GetLastError() != ERROR_SUCCESS) return FALSE;
}
pour le ctrl+alt+suppr je sais pas
Sinon tu pourrais organiser ton prog de meilleur facon:
commande=??
switch(commande) {
case "!time" : time();break;
case "!flashwin" : flashwin();break;
.......
}
la lecture en serait plus simple et tu pourrais mettre tes fonctions ds des fichiers a part.
8 sept. 2004 à 02:51
Surtout pour valider les valeurs retournées ça j'ai pas pris l'habitude de le faire, c'est un mauvais pli...
8 sept. 2004 à 02:26
ex:
Cré un répertoire sur ton bureau, entre dedans et cré un nouveau répertoire, entre dans ce dernier et cré un nouveau répertoire et ainsi de suite ...
Tu auras une erreur un moment donné; Nom de fichier trop long.
la define MAX_PATH n'existe pas pour rien, utilise la, elle est très utile.
Moi le maximum que j'ai réussi à faire c'est 247 caractères pour un nom de fichier incluant les noms des répertoires ou il ce trouvait, sous NTFS.
MAX_PATH(260) est amplement suffisant :)
char path[ MAX_PATH + 1];
GetModuleFileName( NULL, path, MAX_PATH ); /* parfait! */
Si `jamais` tu veux un _bon_ conseil, valide les valeurs retournées par tes fonctions, la valeur de tes variables, ...
Tu pourais aussi te créer une petite routine pour gérer les commandes recues, cette fonction pourait te retourner un entier(signé ou non) ainsi que les paramètres/commandes/... et avec cet entier tu fais un petit switch() dans lequel tu `call` les routines appropriées selon la commande recu en leurs passant les paramètres/commandes/...
En passant, tu as une tonne d'include inutile!
winsock2.h inclu déjà windows.h et windows.h inclus winbase.h, winuser.h, windef.h, winresrc.h, wingdi.h, winreg.h, etc ... Te casse pas la tête pour rien =P
#niclude <winsock2.h> /* cela suffit :) */
Tu devrais, t'en qu'a apprendre, apprendre à dev de facon modulaire, le fait d'avoir plusieurs .c/.cpp/.h/.hpp/.lib/..., en autant qu'il/elle soit utile, n'est pas méchant, inutile, stupide, malpropre, ... tout au contraire, c'est parfait, même pour un projet aussi petit que le tient, ca rend le code beaucoup plus `propre`, lisible, structuré, ...
Bref, c'était mon avis sur le sujet :)
~(.:: NitRic ::.)~