RDP ohne interaktion implementiern?



  • Dass mit dem übers Netz schicken ist kein Problem...möchte nur wissen wie ich auf denn Speicher des hdc zugreifen kann.



  • Kenne mich mit der GDI nicht so aus!



  • www.c-plusplus.net schrieb:

    Kenne mich mit der GDI nicht so aus!

    Ich auch nicht 😉

    Es funktioniert jedenfalls so:

    Sender:

    screen_x = GetSystemMetrics(SM_CXSCREEN);
    screen_y = GetSystemMetrics(SM_CYSCREEN);
    deskDC = GetDC(0);
    memDC = CreateCompatibleDC(deskDC);
    memBMP = CreateCompatibleBitmap(deskDC, screen_x, screen_y);
    SelectObject(memDC, memBMP);
    
    // see http://msdn.microsoft.com/en-us/library/dd183402%28v=vs.85%29.aspx
    imgSize = ((screen_x * 32 + 31) / 32) * 4 * screen_y;
    buf = (char*)malloc(imgSize);
    
    BITMAPINFO bmpInfo = {0};
    bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bmpInfo.bmiHeader.biWidth = screen_x;
    bmpInfo.bmiHeader.biHeight = screen_y;
    bmpInfo.bmiHeader.biPlanes = 1;
    bmpInfo.bmiHeader.biBitCount = 32;
    bmpInfo.bmiHeader.biCompression = BI_RGB;
    bmpInfo.bmiHeader.biSizeImage = 0;
    bmpInfo.bmiHeader.biXPelsPerMeter = 0;
    bmpInfo.bmiHeader.biYPelsPerMeter = 0;
    bmpInfo.bmiHeader.biClrUsed = 0;
    bmpInfo.bmiHeader.biClrImportant = 0;
    
    BitBlt(memDC, 0, 0, screen_x, screen_y, deskDC, 0, 0, SRCCOPY);
    GetDIBits(memDC, memBMP, 0, screen_y, buf, &bmpInfo, DIB_RGB_COLORS);
    

    Empfänger:

    winDC = GetDC(hwnd);
    memDC = CreateCompatibleDC(winDC);
    memBMP = CreateCompatibleBitmap(memDC, SCREEN_X, SCREEN_Y);
    SelectObject(memDC, memBMP);
    
    bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
    bmpInfo.bmiHeader.biWidth = SCREEN_X;
    bmpInfo.bmiHeader.biHeight = SCREEN_Y;
    bmpInfo.bmiHeader.biPlanes = 1;
    bmpInfo.bmiHeader.biBitCount = 32;
    bmpInfo.bmiHeader.biCompression = BI_RGB;
    bmpInfo.bmiHeader.biSizeImage = imgSize;
    bmpInfo.bmiHeader.biXPelsPerMeter = 0;
    bmpInfo.bmiHeader.biYPelsPerMeter = 0;
    bmpInfo.bmiHeader.biClrUsed = 0;
    bmpInfo.bmiHeader.biClrImportant = 0;
    
    SetDIBitsToDevice(winDC, 0, 0, SCREEN_X, SCREEN_Y, 0, 0, 0, 
      SCREEN_Y, buf, &bmpInfo, DIB_RGB_COLORS);
    

    Wobei das natürlich suboptimal ist, ich würde an deiner Stelle versuchen die Bitmaps auf Senderseite direkt in eine Art Videostream oder so was umzuwandeln. Wenn du noch Interesse an einem vollständigen Beispielprogramm hast, schreib eben.



  • Vielen Dank das reicht mir so.



  • @cooky451

    Spätestens bei übertragung ins "WAN" auf einen anderen PC wirst Du ohne starke Kompression nicht mal ein Bild pro Sec haben.. Ohne jetzt das gross nachgerechnet zu haben!



  • xy schrieb:

    @cooky451

    Spätestens bei übertragung ins "WAN" auf einen anderen PC wirst Du ohne starke Kompression nicht mal ein Bild pro Sec haben.. Ohne jetzt das gross nachgerechnet zu haben!

    Der nächste Experte. Bitte erst alles lesen und danach schreiben, danke 🙄



  • cooky451 schrieb:

    xy schrieb:

    @cooky451

    Spätestens bei übertragung ins "WAN" auf einen anderen PC wirst Du ohne starke Kompression nicht mal ein Bild pro Sec haben.. Ohne jetzt das gross nachgerechnet zu haben!

    Der nächste Experte. Bitte erst alles lesen und danach schreiben, danke 🙄

    Naja





  • Mit dem freien x264 Codec, eventuell in Verbindung mit ffmpeg könnte man es schaffen, einen direkten .mp4 Videostream zu erzeugen. ffmpeg ist leider relativ bescheiden dokumentiert, aber vielleicht reicht der x264 Codec ja. Solche Kompressionsverfahren belasten die CPU natürlich, aber auf Qualität muss man ja nicht sonderlich achten und ich denke nicht, dass es viel performanter geht bevor nicht flächendeckend vdsl verfügbar ist.

    Edit:
    Alles klar 😉



  • Bitte beim Thema bleiben...


Anmelden zum Antworten