je vais surement dire des bétises, mais ce serait ti pas mieux d'inclure la fonction scanner dans un thread, et mettre dans la boucle while une condition en + (un booléen qui vaut TRUE)
sauf, qd tu appuie sur le boutton, ça remet le booléen en FALSE, et hop tu sors du thread, voilà, je suis pas bien sûr que c'est ce que tu voulais, m'enfin, si ça peut t'aider, voilà un exemple :
http://www.cppfrance.com/article.aspx?Val=1706
manger des galettes et des crêpes
mailto:galett@voila.fr-------------------------------
Réponse au message :
-------------------------------
> tu as essaye void scanner() appele dans une WinMain sans fenetre ni rien pour voir si elle sort correctement ?
> return 0 direct apres son appel, tu sauras. On verra ensuite, faut avancer pas a pas.
> Tu devrais charger le book Petzold et ses sources, il y a un exemple complet de ce type.
> http://perso.wanadoo.fr/persans-brunews/
> section telechargement, encore tout neuf.
> BruNews, ciao...
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > voila le code source
> >
> >
> > #include <windows.h>
> > #include <fenetre.h>
> > #include <stdlib.h>
> > #include <winsock.h>
> > #include <CStr.cpp>
> >
> > #define Command_ID 300
> >
> > LRESULT CALLBACK WinProc(HWND, UINT, WPARAM, LPARAM);
> > void Command_Click(int);
> > void scanner();
> > void stop();
> >
> > HWND fenetre;
> >
> > SOCKET sock;
> >
> > int WINAPI WinMain(HINSTANCE instance1, HINSTANCE instance2, LPSTR lps, int nShow)
> > {
> > MSG message;
> > WNDCLASSEX fen;
> >
> > // Création de la classe
> > fen.hInstance = instance1; // Instance
> > fen.lpszClassName = "scanner"; // Nom de la classe
> > fen.lpfnWndProc = WinProc; // Adresse de la procédure
> > fen.style = CS_DBLCLKS; // Style
> > fen.cbSize = sizeof(WNDCLASSEX); // Taille
> > fen.hIcon = LoadIcon(instance1,"MAIN"); // Grande icone
> > fen.hIconSm = LoadIcon(NULL,NULL); // Petite icone
> > fen.hCursor = LoadCursor(NULL, IDC_ARROW); // Curseur
> > fen.lpszMenuName = NULL; // Menu
> > fen.cbClsExtra = 0;
> > fen.cbWndExtra = 0;
> > fen.hbrBackground = (HBRUSH)(COLOR_3DFACE+1); // Couleur de fond
> > if(!RegisterClassEx(&fen)) return 0;
> >
> > fenetre = CreateWindowEx(0,"scanner","Scanner",WS_POPUP|WS_CAPTION|WS_SYSMENU|WS_VISIBLE|WS_MINIMIZEBOX,250,100,250,350,HWND_DESKTOP,NULL,hInst,NULL);
> > if(fenetre == NULL) return 0;
> >
> > CreateEdit(1," ", 0,75,245,250,fenetre,0,1,1,1); //MESSAGE
> > CreateEdit(2,"127.0.0.1",30, 5,118, 20,fenetre,0,0,0,0); //IP
> >
> > CreateStatic(1,"IP : ",5, 5, 20,20,fenetre);
> >
> > CreateCommand(1,"Scanner", 30, 30,55,21,fenetre);
> > CreateCommand(2,"Stop",90, 30,55,21,fenetre);
> >
> > WSADATA WSAData;
> > WSAStartup(MAKEWORD(2,0),&WSAData);
> >
> > ShowWindow(fenetre, SW_SHOW);
> > UpdateWindow(fenetre);
> >
> > while (GetMessage(&message, NULL, 0, 0))
> > {
> > TranslateMessage(&message);
> > DispatchMessage(&message);
> > }
> >
> > closesocket(sock);
> > WSACleanup();
> >
> > return message.wParam;
> > }
> >
> > LRESULT CALLBACK WinProc(HWND fenetre2, UINT message2, WPARAM wParam, LPARAM lParam)
> > {
> > switch (message2)
> > {
> > case WM_DESTROY:
> > PostQuitMessage(0);
> > break;
> >
> > case WM_CLOSE:
> > DestroyWindow(fenetre2);
> > break;
> >
> > case WM_COMMAND:
> > if(HIWORD(wParam) == BN_CLICKED)Command_Click(LOWORD(wParam) - Command_ID);
> > break;
> >
> > default:
> > return DefWindowProc(fenetre2,message2,wParam,lParam);
> > break;
> > }
> >
> > return 0;
> > }
> >
> > void Command_Click(int Index)
> > {
> > switch (Index)
> > {
> > case 1:
> > scanner();
> > break;
> >
> > case 2:
> > stop();
> > break;
> >
> > }
> > }
> >
> >
> > void scanner()
> > {
> > char*IP = GetText(edit[2]);
> > int PORT = 1,n;
> >
> > SOCKADDR_IN sin;
> > sock = socket(AF_INET,SOCK_STREAM,0);
> >
> > sin.sin_addr.s_addr = inet_addr(IP);
> > sin.sin_family = AF_INET;
> >
> > while(PORT < 1000) <<<LA BOUCLE ICI
> > {
> > sin.sin_port = htons(PORT);
> >
> > n = connect(sock,(SOCKADDR *)&sin,sizeof(sin));
> > if(n == 0)
> > {
> > SetWindowText(edit[1],"FERME");
> > }
> > if(n != 0)
> > {
> > SetWindowText(edit[1],"ff\nOUVERT <<<<<<<<");
> > }
> >
> > PORT++;
> > }
> >
> > closesocket(sock);
> > WSACleanup();
> > }
> >
> > void stop()
> > {
> > closesocket(sock);
> > WSACleanup();
> > }
> >
> >
> >
> > Romano

> >
romano492@hotmail.com> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > On pourrait peut-etre te dire pourquoi si on avait, au moins, ta proc de fenetre.
> > > BruNews, ciao...
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > > g un prb avec les fenetres windows
> > > > des que jentre dans une boucle (while ou for) la fenetre se bloke
> > > > Romano

> > > >
romano492@hotmail.com> > >
> >
>