Was machen ich bei diesen Screenshot code falsch !?



  • jemand eine idee was ich da Falsch mache. er erstellt mir eine 2 MB große datei
    leider ist da kein screeshot drin. Sondern wenn ich die bmp datei öffen will geht es nicht da irgendwie nix drin ist. Jemand eine idee !?

    int main(void)
    {
       int width = 1024;;
       int height = 768;
       HDC hdc;
       HWND hWnd;
       hdc=GetWindowDC(GetForegroundWindow());
    
       dc2bitmap(hdc, width, height);
    
       getch();
       return 0;
    }
    int dc2bitmap(HDC hdc, int width, int height)
    {
       char filename[] = "fsdfsdf.bmp" ;
    
        HDC hdc2;
        HBITMAP aBmp;
        BITMAPINFO bi;
        HGDIOBJ OldObj;
        void *dibvalues;
        HANDLE fileHandle;
    
        BITMAPFILEHEADER bmfh;
        BITMAPINFOHEADER bmih;
            DWORD bytes_write;
        DWORD bytes_written;
    
        hdc2=CreateCompatibleDC(hdc);
    
        ZeroMemory(&bmih,sizeof(BITMAPINFOHEADER));
        bmih.biSize=sizeof(BITMAPINFOHEADER);
          bmih.biHeight=height;
            bmih.biWidth=width;
            bmih.biPlanes=1;
            bmih.biBitCount=24;
        bmih.biCompression=BI_RGB;
        bmih.biSizeImage = ((((bmih.biWidth * bmih.biBitCount) + 31) & ~31) >> 3) * bmih.biHeight;
            bmih.biXPelsPerMeter = 0;
            bmih.biYPelsPerMeter = 0;
            bmih.biClrImportant = 0;
        //bmih.biSizeImage=(3*bmih.biHeight*bmih.biWidth);
            //bmih.biSizeImage = 0; 
    
        bi.bmiHeader=bmih;
    
        aBmp=CreateDIBSection(hdc,&bi,DIB_RGB_COLORS,(void**)&dibvalues,NULL,NULL);
    
        if (aBmp==NULL)
        {
            OutputDebugString("CreateDIBSection failed!\n");
            return 0;
        }
    
        OldObj=SelectObject(hdc2,aBmp);
        BitBlt(hdc2,0,0,width,height,hdc,0,0,SRCCOPY);
    
        ZeroMemory(&bmfh,sizeof(BITMAPFILEHEADER));
        bmfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
        bmfh.bfSize=(3*bmih.biHeight*bmih.biWidth)+sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);
        bmfh.bfType=0x4d42;
            bmfh.bfReserved1 = 0;
            bmfh.bfReserved2 = 0;
    
        fileHandle=CreateFile(filename,GENERIC_READ | GENERIC_WRITE,(DWORD)0,NULL,
                                                        CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL);
        if (fileHandle==INVALID_HANDLE_VALUE)
        {
            OutputDebugString("CreateFile failed!\n");
            return 0;
        }
    
            // Write the BITMAPFILEHEADER
            bytes_write=sizeof(BITMAPFILEHEADER);
        if (!WriteFile(fileHandle,(void*)&bmfh,bytes_write,&bytes_written,NULL))
        {
            OutputDebugString("WriteFile failed!\n");
            return 0;
        }
    
            //Write the BITMAPINFOHEADER
        bytes_write=sizeof(BITMAPINFOHEADER);
        if (!WriteFile(fileHandle,(void*)&bmih,bytes_write,&bytes_written,NULL))
        {
            OutputDebugString("WriteFile failed!\n");
            return 0;
        }
    
            //Write the Color Index Array???
            bytes_write=bmih.biSizeImage;//3*bmih.biHeight*bmih.biWidth;
        if (!WriteFile(fileHandle,(void*)dibvalues,bytes_write,&bytes_written,NULL))
        {
            OutputDebugString("WriteFile failed!\n");
            return 0;
        }
    
        CloseHandle(fileHandle);
    
        DeleteObject(SelectObject(hdc2,OldObj));
        DeleteDC(hdc2);
    
        return 1;
    }
    


  • Habe das mal geteste bei mit tut es das gleich finde da aber auch nix !! Vielleicht finde ja jemand von ecuhw as darin !!



  • komisch, bei mir funktioniert es...



  • Hast du vieleicht in Windows eine andere Auflösung oder Farbtiefe eingestellt, als 1024 * 768 true color ?



  • Ist zwar nicht der eventuelle Fehler, aber warum definierst du in main

    HWND hWnd;
    

    wenn du es nicht verwendest?



  • Was bedeutet denn

    Sondern wenn ich die bmp datei öffen will geht es nicht da irgendwie nix drin ist.

    Stürzt es beim offnen ab?
    Gibt es ne Fehlermeldung?

    Oder ist "nix drin" einfach schwarz?
    Wenn ja, machst du möglicherweise ein Bild der eigenen DosBox in dem das Programm ausgeführt wird, da diese ja im Moment des Screenshot ja im Vordergrund ist.


Anmelden zum Antworten