christdu13
Messages postés
18
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
15 juin 2006
15 juin 2006 à 14:58
rebonjour a tous et a toute
voila maintenan j'arrive a faire appelle a la 2eme fenetre le seul probleme c'est que je ne sait pas quoi passer comme parametre a ma fonction de logiciel installé car il faut que je lui passe un HWND.
Voila mon code:
BOOL CALLBACK Menu(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam)<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /?>
{
switch(Msg)
{
case WM_CLOSE: //Quand on demande de fermer
EndDialog(hWnd, 0); //On obéit et on ferme
return 0; //On retourne 0
case WM_COMMAND:
{
switch(wParam)
{
case IDC_BUTTON1:
Fenetre1(hInstance2,hPrevInstance,lpszArgument,nFunsterStil);
return 0;
case IDC_BUTTON2:
return 0;
case IDC_BUTTON3:
return 0;
case IDC_BUTTON4:
return 0;
case IDC_BUTTON5:
return 0;
case IDC_BUTTON6:
return 0;
case IDC_BUTTON7: //Sur le bouton Quitter
EndDialog(hWnd, 0);
return 0;
}
}
return 0;
}
return FALSE;
}
/**************************************************************************************/
/* fenetre qui affiche les logiciels installés */
int APIENTRY Fenetre1(HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)
{
HWND hwnd; /* handle pour notre fenetre */
MSG messages; /* messages sauvegardés dans cette variable */
WNDCLASSEX wincl; /* structure pour notre classe de fenetre */
/* Structure de notre classe fenetre */
wincl.hInstance = hThisInstance; /* nom de l'instance d'application */
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure; /* Fonction appelée automatiquement par windows */
wincl.style = CS_DBLCLKS; /* Catch double-clicks */
wincl.cbSize = sizeof (WNDCLASSEX);
/* utilisation d'une icone et d'un pointeur de souris par défaut */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* No menu */
wincl.cbClsExtra = 0; /* No extra bytes after the window class */
wincl.cbWndExtra = 0; /* structure or the window instance */
/* Utilisation des couleur windows pour le texte et l'arriere plan */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
/* enregistrement de la classe fenetre, et si cela echoue on quitte le programme */
if (!RegisterClassEx (&wincl))
return 0;
/* la classe fenetre est enregistrée et l'on continu */
/* on crée notre fenêtre avec CreateWindow()
// on quitte si çà s'est mal passé */
if ((hwnd = CreateWindow(
szClassName, // le nom de notre classe
"Programme", // le titre de la fenêtre
WS_OVERLAPPEDWINDOW, // le style de la fenêtre
100,100, // ses positions x et y au début
700, 400, // la taille de la fenêtre (Largeur, Hauteur)
NULL, // sa fenetre parent
NULL, // chargement du menu
hThisInstance, // l'instance de l'appli, puis enfin une donnée tjrs mise à NULL
NULL)) == NULL) return FALSE;
// à ce stade, hwnd est le "handle" de notre fenêtre créée
// il nous servira souvent tout le long du programme
HWND statique = CreateWindowEx(0, "STATIC", "Logiciels installés",
WS_VISIBLE|WS_CHILD,10, 10, 600, 20 , hwnd,0, hThisInstance, NULL);
lsthWnd = CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", NULL,
WS_VISIBLE|WS_CHILD|LBS_SORT|LBS_NOTIFY|WS_HSCROLL|WS_VSCROLL,
10, 35, 600, 350, hwnd, (HMENU)ID_LISTBOX, hThisInstance, NULL);
/* Les arguments:
* 1er: c'est l'effet de la fenetre (0, 2, etc... pour mettre au niveau de la fenetre (nbr paire)
1, 3, etc... pour mettre en relief (nbr impaire)
WS_EX_CLIENTEDGE pour mettre en fond)
* 2eme: Statique
* 3eme: Ce qu'on écrit
* 5eme: Distance par rapport au bord de droite de la fenetre en pixels
* 6eme: Distance par rapport au bord du haut de la fenetre en pixels
* 7eme: Largeur de l'espace requis pour ecrire en pixels
* 8eme: Hauteur de l'espace requis pour ecrire en pixels
* 10eme:
* 11eme: On lui fournit l'instance de l'application
* 12eme: Toujours a NULL*/
if (lsthWnd == NULL)
{
MessageBox(hwnd, "Erreur lors de la création de la ListBox.", 0, 16);
return 0;
}
/* montrer la fenetre */
ShowWindow (hwnd, nFunsterStil);
/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
/* Transforme les clés en caracteres (message) */
TranslateMessage(&messages);
/* Envoie les message au WindowProcedure */
DispatchMessage(&messages);
}
/* Le programme donne la valeur de "PostQuitMessage()" soit 0 */
return messages.wParam;
}
/**************************************************************************************/
/* fonction appelé par windows avec DispatchMessage() */
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) /* selon fenetre de message */
{
case WM_TIMER:
{
/* Ce cas à lieu au demarrage de la fenetre c'est pour cela que l'on */
/* appel la fonction à l'interieur de celui-ci */
KillTimer(hwnd,wParam);
if (wParam==0)
{
InstallSoftware(lsthWnd);
}
} break;
case WM_CREATE:
SetTimer(hwnd,0,0,0);
break;
case WM_DESTROY:
/* ce cas sert a quitter la fenetre window en envoyant PostQuitMessage(0) */
/* a window pour qu'il ferme cette fenetre */
PostQuitMessage (0);
break;
default: /* for messages that we don't deal with */
return DefWindowProc (hwnd, message, wParam, lParam);
}
return 0;
}
/**************************************************************************************/
/* InstallSoftware(ListBox); où ListBox est le HWND de la ListBox */
void InstallSoftware(HWND ListBox)
{
char uninstallKey[] = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall";
DWORD taille=10240;
DWORD taille1=taille;
DWORD taille2=taille;
HKEY Retour;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,uninstallKey,0,KEY_ALL_ACCESS,&Retour))
{
char * NomVal;
NomVal = new char[taille];
unsigned long NNom=taille;
int n=0;
long Ret;
do
{
taille1=taille; taille2=taille;NomVal[0]=0;
Ret = RegEnumKeyEx( Retour,n,NomVal,&taille1,NULL,NULL,NULL,NULL );
if ((Ret != ERROR_NO_MORE_ITEMS))
{
int len= strlen(uninstallKey);
char * NomValCle = new char[len+strlen(NomVal)+2];
strcpy(NomValCle,uninstallKey);
if (NomValCle[len-1]!='\\')
{
NomValCle[len]='\\';
NomValCle[len+1]='\0';
}
strcat(NomValCle,NomVal);
long Ret2;
unsigned long Ty2=0;
HKEY Retour2;
RegOpenKeyEx(HKEY_LOCAL_MACHINE,NomValCle,0,KEY_ALL_ACCESS,&Retour2);
char * NomVal2;
NomVal2 = new char[taille];
unsigned char * Valeur2;
Valeur2 = new unsigned char[taille];
long n2=0;
char Nom[MAX_PATH];
Nom[0]=0;
do
{
taille1=taille; taille2=taille;NomVal2[0]=0;Valeur2[0]=0;Ty2=0;
Ret2 = RegEnumValue(Retour2,n2,NomVal2,&taille1,0,&Ty2,Valeur2,&taille2);
if (strcmp("DisplayName",NomVal2)==0)
strcpy(Nom,(char*)Valeur2);
n2++;
} while ( (Ret2 != ERROR_NO_MORE_ITEMS) );
if (Nom[0]!=0)
{
//SendMessage(hWnd, WM_SETICON, ICON_BIG,(LPARAM) LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON)));
SendMessage(ListBox,LB_ADDSTRING,0,(LPARAM) (LPCTSTR) Nom);
//SetDlgItemText(ListBox, IDC_LIST1, Nom);
}
delete[]NomValCle;
}
n++;
} while ( (Ret != ERROR_NO_MORE_ITEMS) );
}
}
voila enn clair mon programme sans la premiere WinMain qui appelle une dialogBox donc on sen fou.
Ben la les logiciels installé ce s'affiche pas tout comme la fenetre
vous avez une idée?
merci d'avance a+