SendMessage



  • Servus an alle,
    mein Kumpel hat mich neulich gefragt, ob ich eine Oberfläche für seinen Portscanner(in C) schreib. Das hab ich dann auch gemacht, aber da gibt es ein kleines Problem! Hier erstmal das Programm:

    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <winsock.h>
    #include <io.h>
    #include <string.h>
    
    char *buffer = NULL;
    char *buffer1 = NULL;
    char *buffer2 = NULL;
    char *buffer3 = NULL;
    
    char string[900];
    char string1[900];
    char string2[900];
    
    char Code[900];
    char Zwischen[900];
    
    char Nix[2]={""};
    
    char nochma[2];
    
    int socket_nummer;
    int laenge;
    int stp=0,enp=0;
    int ergebnis;
    unsigned short int portnummer;
    struct sockaddr_in adressinfo;
    char ip_adresse[80];
    
    HWND        hButton1;
    HWND        hText7;
    
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                        PSTR szCmdLine, int iCmdShow)
    {
        HWND     hWnd;
        MSG      msg;
        WNDCLASS wc;
        HWND     hTextAnfang;
        HWND     hTextAnfang1;
        HWND        hText;                   
        HWND        hText2;
        HWND        hText3;
        HWND        hText4;
        HWND        hText5;
        HWND        hText6;
    
        WNDCLASSEX  WindowClass;            
    
        const char szAppName[] = "LittleScanner";
    
       wc.style          = CS_HREDRAW | CS_VREDRAW;
    
        wc.cbClsExtra     = 0;
        wc.cbWndExtra     = 0;
        wc.hInstance      = hInstance;
        wc.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
        wc.hCursor        = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground  = GetSysColorBrush(COLOR_3DFACE);
        wc.lpszMenuName   = NULL;
        wc.lpfnWndProc    = WndProc;
        wc.lpszClassName  = szAppName;
    
        RegisterClass(&wc);
    
        hWnd = CreateWindow( szAppName,
                             "LittleScanner",
                             WS_OVERLAPPEDWINDOW| WS_VISIBLE,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             CW_USEDEFAULT,
                             NULL,
                             NULL,
                             hInstance,
                             NULL );
    
        ShowWindow(hWnd, iCmdShow);
        UpdateWindow(hWnd);
    
        hTextAnfang = CreateWindow("STATIC", "LittleScanner",
                        WS_VISIBLE | WS_CHILD, 20, 5, 180, 40, hWnd, NULL, hInstance, NULL);
        if(!hTextAnfang) return FALSE;
    
        hText = CreateWindow("STATIC", "Geben Sie die Ip-Addresse ein: ",
                        WS_VISIBLE | WS_CHILD, 20,80, 150, 20, hWnd, NULL, hInstance, NULL);
        if(!hText) return FALSE;
    
        hText3 = CreateWindow("STATIC", "Start-Port: ",
                        WS_VISIBLE | WS_CHILD, 20, 120, 100, 20, hWnd, NULL, hInstance, NULL);
        if(!hText3) return FALSE;
    
        hText2 = CreateWindow("STATIC", "End-Port:",
                        WS_VISIBLE | WS_CHILD, 20, 160, 100, 20, hWnd, NULL, hInstance, NULL);
        if(!hText2) return FALSE;
    
        hButton1 = CreateWindow("BUTTON", "Beginne zu scannen",
                           WS_VISIBLE | WS_CHILD, 20, 220, 200, 20,
                           hWnd, NULL, hInstance, NULL);
        if(!hButton1) return FALSE;
    
        SendMessage(hText, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);    
        SendMessage(hText2, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
        SendMessage(hText3, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
        SendMessage(hText7, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
        SendMessage(hButton1, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
    
        while(GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
            static HWND hEdit;
            static HWND hText5;
            static HWND hText6;
            static HWND hTextf;
    
        switch(message)
        {
        case WM_CREATE:
            {
                hEdit = CreateWindowEx(WS_EX_CLIENTEDGE,
                                       "edit",
                                       buffer,    
                                       WS_CHILD | WS_VISIBLE,
                                       200, 80, 200, 20,
                                       hWnd,
                                       NULL,
                                       ((LPCREATESTRUCT) lParam) -> hInstance,
                                       NULL);
    
                free(buffer);
    
                hText5 = CreateWindowEx(WS_EX_CLIENTEDGE,
                                      "edit", 
                                      buffer1,
                                      WS_VISIBLE | WS_CHILD, 
                                      200, 120, 200, 20, 
                                      hWnd,
                                      NULL,
                                      ((LPCREATESTRUCT) lParam) -> hInstance,
                                       NULL);
                free(buffer1);
    
                hText6 = CreateWindowEx(WS_EX_CLIENTEDGE,
                                      "edit", 
                                      buffer2,
                                      WS_VISIBLE | WS_CHILD, 
                                      200, 160, 200, 20, 
                                      hWnd,
                                      NULL,
                                      ((LPCREATESTRUCT) lParam) -> hInstance,
                                       NULL);
                free(buffer2);
    
                hTextf = CreateWindowEx(WS_EX_CLIENTEDGE,
                                      "edit", 
                                      buffer3,
                                      WS_VISIBLE | WS_CHILD | ES_MULTILINE | WS_VSCROLL, 
                                      20, 300, 600, 250, 
                                      hWnd,
                                      NULL,
                                      ((LPCREATESTRUCT) lParam) -> hInstance,
                                       NULL);
                free(buffer3);
    
            SendMessage(hEdit, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
            SendMessage(hText5, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
            SendMessage(hText6, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
            SendMessage(hTextf, WM_SETFONT, (WPARAM)GetStockObject(DEFAULT_GUI_FONT), TRUE);
    
            return 0;
    
            }
    
        case WM_COMMAND:
                    {        
                            if(lParam == (LPARAM)hButton1)        
                            {
                                      int iLength;
    
                                      strcpy(Code,Nix);
    
                                      iLength = GetWindowTextLength(hEdit);
                                      buffer = malloc(iLength);
                                      GetWindowText(hEdit, buffer, iLength+1);
                                      strcpy(string,buffer);
                                      strcpy(ip_adresse,string);
    
                                      iLength = GetWindowTextLength(hText5);
                                      buffer1 = malloc(iLength);
                                      GetWindowText(hText5, buffer1, iLength+1);
                                      strcpy(string1,buffer1);
                                      sscanf(string1,"%d",&stp);
    
                                      iLength = GetWindowTextLength(hText6);
                                      buffer2 = malloc(iLength);
                                      GetWindowText(hText6, buffer2, iLength+1);
                                      strcpy(string2,buffer2);
                                      sscanf(string2,"%d",&enp);
    
                                      free(buffer);
    
                                      WSADATA wsaData;
                                      if(WSAStartup(MAKEWORD(1,1), &wsaData) != 0)
                                      {
                                                                   sprintf(Code,"WSA konnte nicht initialisiert werden.");
                                                                   SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
                                      }
                                      else if(stp > 65535)
                                      {
                                                                   sprintf(Code,"Fehler:\r\n\r\nStart-Port darf nicht größer als 65535!");
                                                                   SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
                                                                   stp=0;
                                      }
                                      else if(enp > 65535)
                                      {
                                                                   sprintf(Code,"Fehler:\r\n\r\nEnd-Port darf nicht größer als 65535!");
                                                                   SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
                                                                   enp=0;
                                      }
                                      else if(strcmp(ip_adresse,Nix)==0)
                                      {
                                                                   sprintf(Code,"Fehler:\r\n\r\nSie haben die Ip Adresse nicht eingegeben!");
                                                                   SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
                                      }
                                      else if(stp==0)
                                      {
                                                                   sprintf(Code,"Fehler:\r\n\r\nSie haben den Start-Port nicht eingegeben!");
                                                                   SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
                                      }
                                      else if(enp==0)
                                      {
                                                                   sprintf(Code,"Fehler:\r\n\r\nSie haben den End-Port nicht eingegeben!");
                                                                   SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
                                      }
                                      else
                                      {    
                                                                   sprintf(Zwischen,"Scanne IP: %s / Ports: %i bis %i!\r\n",ip_adresse,stp,enp--);
                                                                   strcpy(Code,Zwischen);
                                                                   SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
                                                                   sprintf(Zwischen,"\r\nBeginne mit PortScannen!! -- Bitte warten\r\n\r\n");
                                                                   strcat(Code,Zwischen);
                                                                   SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
    
                                                                   enp=enp+2;
    
                                                                   for (portnummer = stp ;portnummer < enp ;portnummer++)
                                                                   {
                                                                       sprintf(Zwischen,"Scanne Port: %d\r\n\r\n",portnummer);
                                                                       strcat(Code,Zwischen);
                                                                       SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
                                                                       socket_nummer = socket(AF_INET, SOCK_STREAM, 0);
                                                                       adressinfo.sin_family = AF_INET;
                                                                       adressinfo.sin_addr.s_addr = inet_addr(ip_adresse);
                                                                       adressinfo.sin_port = htons(portnummer);
                                                                       laenge = sizeof(adressinfo);
                                                                       ergebnis = connect(socket_nummer, (struct sockaddr *)&adressinfo, laenge);
                                                                       if (ergebnis == 0)
                                                                       {
                                                                                    sprintf(Zwischen,"Verbindungsaufbau erfolgreich an");
                                                                                    strcat(Code,Zwischen);
                                                                                    SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
                                                                                    sprintf(Zwischen," IP %s - Port %d\r\n\r\n",ip_adresse,portnummer);
                                                                                    strcat(Code,Zwischen);
                                                                                    SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
                                                                       }
                                                                       SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
    
                                                                       close(socket_nummer);
                                                                    }
    
                                       sprintf(Zwischen,"\r\n\r\n");
                                       strcat(Code,Zwischen);
                                       SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
                                       WSACleanup();
                                       }
                                } 
                          }    
                          break;    
    
        case WM_CLOSE:
            {
                DestroyWindow(hWnd);
                return 0;
            }
        case WM_DESTROY:
            {
                PostQuitMessage(0);
                return 0;
            }
        }
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    

    Damit das Programm funktioniert müsst ihr libws2_32.a als Parameter setzen. Aber jetzt zu meinem Problem:

    Solange das Programm nach den Ports scannt, schreibt es nichts in das Editfeld, obwohl ich den Befehl: SendMessage(hTextf, WM_SETTEXT, 0,(LPARAM)Code);
    immer wieder schreib. Erst wenn alles abgescannt worden ist, schreibt er das gesammte Ergebnis in das Editfeld. Kann mir jemand sagen, was ich falsch gemacht habe oder wie ich das machen kann?

    Danke im Voraus,

    Felix



  • Ich glaube das während deines Vorgangs die Oberfläche deines Programmes nicht aktualisiert, sprich er schreibt es aber du siehst es nicht. Mir ist aber grade die Funktion für den manuellen Refresh entfallen... sry



  • UpdateWindow(hTextf);

    klar.

    Vielen Dank,

    Felix


Anmelden zum Antworten