JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=73861c444cc0f1099e33426275f4ba0fMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Screenshot erstellen und speichern
Gehe zu Seite Zurück  1, 2, 3
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
HomeLess_PunkDrummer
JLI Master Trainee


Alter: 36
Anmeldedatum: 28.11.2004
Beiträge: 583
Wohnort: Alter Joghurtbecher an der A4
Medaillen: Keine

BeitragVerfasst am: 21.02.2005, 17:35    Titel: Antworten mit Zitat

Hui, ich hab jetzt auch TGA...das ist fein, jetzt wo ich die Codierung gesehen hab muss man sagen: Irgendwie gehts doch kaum besser?

Aber als TGA speichern und RLE codieren dürfte doch _etwas_ langsam sein...
_________________
"Was die Götter angeht, so ist es mir unmöglich, zu wissen, ob sie existieren oder nicht, noch, was ihre Gestalt sei. Die Kräfte, die mich hindern, es zu wissen, sind zahlreich, und auch ist die Frage verworren und das menschliche Leben kurz."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
mfc++
JLI'ler


Alter: 40
Anmeldedatum: 18.02.2004
Beiträge: 163
Wohnort: Bettlä
Medaillen: Keine

BeitragVerfasst am: 21.02.2005, 19:09    Titel: Antworten mit Zitat

bei mir klappts wunderbar sogar mit nummerierung Wink danke für die hilfe Wink
_________________
www.teslasystems.ch
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
homer Jay
Mini JLI'ler



Anmeldedatum: 13.01.2005
Beiträge: 12

Medaillen: Keine

BeitragVerfasst am: 23.02.2005, 20:23    Titel: Antworten mit Zitat

hi leuz
ich möchte ein prog schreiben, dass einen Sreenshot erstellt und ihn dann als prog startet (also den screen als hintergund)!!

das ist der code den ich habe:
CPP:
#include <ddraw.h>
#include <stdio.h>


// Bildschirmbreite und -höhe
#define SCR_WIDTH  1024//800
#define SCR_HEIGHT 768//600
// Farbtiefe des Videomodus
#define COLOR_DEPTH 16

#define IMAGE_FILE "K:\\screenshot.bmp" //"..\\..\\media\\jli.bmp"
// Prototypen

// Anwendungsfenster erzeugen
HWND CreateMainWindow(HINSTANCE hInstance);

//Callback Funktion zur Nachrichtenbehandlung
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);

// DirectDraw-Objekte initialisieren
BOOL InitDirectDraw(void);

// Objekte/Speicher freigeben
void CleanUpDirectDraw(void);

// Ausgabefunktion
void Render(void);

// Fehlermeldung erzeugen
BOOL Error(char* msg);

//Screenshot erstellen
void makeScreenshot();

// Funktion um eine Oberfläche anzulegen,
// als Grundlage dient eine Bitmap-Datei
LPDIRECTDRAWSURFACE7 CreateSurfaceFromBitmap(LPCTSTR File, int dWidth, int dHeight);

// Das Fensterhandle
HWND hWnd = 0;

// Zeiger auf das DirectDraw Interface
LPDIRECTDRAW7        lpDD7           = NULL;
LPDIRECTDRAWSURFACE7 lpDDSPrimary    = NULL;
LPDIRECTDRAWSURFACE7 lpDDSurface     = NULL;

// Windows main-Funktion
int WINAPI WinMain(HINSTANCE hInstance,      // Handle der Programminstanz
                   HINSTANCE hPrevInstance,  // Handle der letzten Instanz
                   LPSTR lpCmdLine,          // Kommandozeile
                   int nCmdShow)             // Art wie das Fenster angezeigt werden soll
{
   makeScreenshot();
    /*char buf[255];
   
    sprintf(buf,"Dieses Programm lädt das Bild %s in eine Oberfläche"
                "und blittet es auf die primäre Oberfläche",IMAGE_FILE);

    MessageBox(NULL,buf,"Beschreibung",MB_OK);*/

   
   
    // Fenster erzeugen und Handle speichern
    hWnd = CreateMainWindow(hInstance);

    // Wenn der Rückgabewert 0 ist, ist ein Fehler aufgetreten
    if(0 == hWnd)
    {
        return Error("Fehler beim Erzeugen des Fenster");
    }

    if(!InitDirectDraw())
    {
        return FALSE;
    }       

   // Struktur, in der Informationen zur Nachricht gespeichert werden
    MSG msg;

   
    // Diese Schleife läuft bis WM_QUIT gesendet wird
    while(GetMessage(&msg,NULL,0,0))
   {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    // Rückgabewert an Windows
    return 0;
}


HWND CreateMainWindow(HINSTANCE hInstance)
{
    WNDCLASSEX wndClass;                                   // WNDCLASSEX Struktur
 
    // Struktur initialisieren
    wndClass.cbSize        = sizeof(WNDCLASSEX);           // Größe angeben (nie vergessen!)
    wndClass.style         = CS_DBLCLKS | CS_OWNDC |
                             CS_HREDRAW | CS_VREDRAW;      // Standard Stile
    wndClass.lpfnWndProc   = WindowFunc;                   // Die Callback Funktion angeben

    wndClass.cbClsExtra    = 0;                            // Zusätzliche Angaben, wird nicht benötigt
    wndClass.cbWndExtra    = 0;                            // Zusätzliche Angaben, wird nicht benötigt
    wndClass.hInstance     = hInstance;                    // Anwendungsinstanz

    wndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH); // Schwarzer Pinsel
    wndClass.hCursor       = LoadCursor(NULL, IDC_ARROW);  // Normaler Cursor
    wndClass.lpszMenuName  = NULL;                         // Das Fenster hat kein Menü
    wndClass.lpszClassName = "WindowClass";                // Der Name der Klasse
    wndClass.hIcon         = LoadIcon(NULL, IDI_WINLOGO);  // Windows Logo
    wndClass.hIconSm       = LoadIcon(NULL, IDI_WINLOGO);  // Windows Logo

    RegisterClassEx(&wndClass);

    return CreateWindowEx(NULL,                   // Keine erweiterten Stile nutzen
                          "WindowClass",          // Klassenname
                          "DDSurface",            // Fenstertitel
                          WS_POPUP |              // Fenster
                          WS_VISIBLE,             // Eigenschaften
                          0, 0,                   // Anfangsposition
                          SCR_WIDTH, SCR_HEIGHT,  // und Größe  des Fensters
                          NULL,                   // Handle des Elternfensters
                          NULL,                   // Handle des Menüs
                          hInstance,              // Anwendungsinstanz
                          NULL);                  // wird nicht benötigt
}


// Diese Funktion wird von Windows aufgrufen, wenn eine Nachricht
// für Ihr Programm vorliegt
LRESULT CALLBACK WindowFunc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    // testen, um welche Nachticht es sich handelt
    switch(msg)
    {
        case WM_KEYDOWN:
         switch(wParam)
         {
            case VK_ESCAPE:                     
                    DestroyWindow(hWnd);
                break;
            }
        break;

        case WM_DESTROY:
            CleanUpDirectDraw();
         PostQuitMessage(0);
      break;

        case WM_PAINT:
            PAINTSTRUCT ps;
            BeginPaint(hWnd,&ps);
            Render();
            EndPaint(hWnd,&ps);
      break;       
    }

    // Wenn wir uns nicht um die Nachricht gekümmert haben wird sie
    // an die Standardnachrichtenverarbeitung von Windows geschickt
    return (DefWindowProc(hwnd, msg, wParam, lParam));
}


// DirectDraw initialisieren
BOOL InitDirectDraw(void)
{
    // DirectDrawObjekt anlegen   
    if(FAILED(DirectDrawCreateEx(NULL,(void**)&lpDD7,IID_IDirectDraw7,NULL)))
    { 
        return Error("Fehler beim Anlegen des DirectDraw-Objekts");
    }

    // Kooperationsebene setzen
    if(FAILED(lpDD7->SetCooperativeLevel(hWnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN)))
    {
        return Error("Fehler beim Setzen des Kooperationsebene");   
    }

    // Auflösung und Farbtiefe setzen
    if(FAILED(lpDD7->SetDisplayMode(SCR_WIDTH,SCR_HEIGHT,COLOR_DEPTH,0,0)))
    {
        return Error("Fehler beim Setzen des Kooperationsebene");   
    }

    // Struktur zur Beschreibung einer Oberfläche
    DDSURFACEDESC2 ddsd;

    // Initialisieren und Größe festlegen
    ZeroMemory(&ddsd,sizeof(ddsd));
    ddsd.dwSize = sizeof(ddsd);
   
    // Die Angabe wdCaps soll berücksichtigt werden
    ddsd.dwFlags = DDSD_CAPS;
   
    // Es soll eine primäre Oberfläche angelegt werden
    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
                         
    // Oberfläche anlegen
    if(FAILED(lpDD7->CreateSurface(&ddsd,&lpDDSPrimary,NULL)))
    {
        return Error("Fehler beim Anlegen der primären Oberfläche");
    }

    // Oberfläche laden
    lpDDSurface = CreateSurfaceFromBitmap(IMAGE_FILE,SCR_WIDTH,SCR_HEIGHT);
   
    if(!lpDDSurface)
    {
        return FALSE;
    }   

    return TRUE;
}


void Render(void)
{
    // die Oberfläche, die das geladene Bild enthält
    // auf die primäre Oberfläche Blitten   
    if(FAILED(lpDDSPrimary->Blt(NULL,lpDDSurface,NULL,DDBLT_WAIT,NULL)))
    {
        Error("Blt ist fehlgeschlagen");
    }
}

LPDIRECTDRAWSURFACE7 CreateSurfaceFromBitmap(LPCTSTR File, int dWidth, int dHeight)
{
   // Device Context für das Bild und die DirectDraw-Oberfläche anlegen
    HDC hBmDC,hSurfDC;

    // Handle der zu ladenden Bitmap
    HBITMAP hBM;                   
   
    // Oberflächenbeschreibung
    DDSURFACEDESC2 SurfDesc; 
   
    // Zeiger auf die Oberfläche
   LPDIRECTDRAWSURFACE7 lpDDSurface;   
   
   // Bild laden
    hBM = (HBITMAP)LoadImage(NULL,File,IMAGE_BITMAP,dWidth,dHeight,LR_LOADFROMFILE);

    // testen ob ein Fehler während des Ladens aufgetreten ist
    if(NULL == hBM)
    {
        return 0;
    }

   // Oberflächenbeschreibung initialisieren
    ZeroMemory(&SurfDesc, sizeof(SurfDesc));
   SurfDesc.dwSize = sizeof(SurfDesc);
   
    // Caps, Höhe und Breite sollen berücksichtigt werden
    SurfDesc.dwFlags =   DDSD_CAPS   | DDSD_HEIGHT | DDSD_WIDTH;

    SurfDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
   SurfDesc.dwWidth  = dWidth;
   SurfDesc.dwHeight = dHeight;
   
    // Oberfläche anlegen
    if(FAILED(lpDD7->CreateSurface(&SurfDesc,&lpDDSurface,NULL)))
    {
        return 0;
    }

    ZeroMemory(&SurfDesc,sizeof(SurfDesc));
    SurfDesc.dwSize = sizeof(SurfDesc);

    lpDDSurface->GetSurfaceDesc(&SurfDesc);


    // wo befindet sich die erzeugt Oberfläche ?
    if(SurfDesc.ddsCaps.dwCaps & DDSCAPS_VIDEOMEMORY)
    {
       if(SurfDesc.ddsCaps.dwCaps & DDSCAPS_LOCALVIDMEM)
       {
           OutputDebugString("Oberfläche befindet sich im LOCALVIDMEM (Grafikspeicher)\n");
       }
       else
       {
           OutputDebugString("Oberfläche befindet sich im NONLOCALVIDMEM (AGP-Speicher)\n");
       }
    }
    else
    {
        OutputDebugString("Oberfläche befindet sich im SYSTEMSPEICHER\n");   
    }

   // Device Context der Oberfläche holen
    lpDDSurface->GetDC(&hSurfDC);

    // Compatiblen Device Context für das Bild anlegen
    hBmDC = CreateCompatibleDC(hSurfDC);

    // Bild in den Device Context holen
    SelectObject(hBmDC,hBM);

    // Bild in die Oberfläche kopieren
    BitBlt(hSurfDC,0,0,dWidth,dHeight,hBmDC,0,0,SRCCOPY);

   // Device Context freigeben
    lpDDSurface->ReleaseDC(hSurfDC);
   
    // Device Context und Bild löschen
    DeleteDC(hBmDC);
   DeleteObject(hBM);

    // Zeiger auf die Oberfläche zurückgeben
    return lpDDSurface;
}


// Objekte/Speicher freigeben
void CleanUpDirectDraw(void)
{
    if(NULL != lpDDSurface)
    {
        lpDDSurface->Release();
        lpDDSurface = NULL;   
    }
    if(NULL != lpDDSPrimary)
    {
        lpDDSPrimary->Release();
        lpDDSPrimary = NULL;
    }
    if(NULL != lpDD7)
    {
        lpDD7->Release();
        lpDD7 = NULL;
    }
}



// Fehlermeldung ausgeben
BOOL Error(char* msg)
{
    // als MessageBox
    MessageBox(0,msg,"Error",MB_OK);
   
    // und in das Ausgabefenster
    OutputDebugString(msg);
    OutputDebugString("\n");
    return FALSE;
}


void makeScreenshot()
{
            //********************SREENSHOT**************************
         HDC hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL);
         HDC hdcCompatible = CreateCompatibleDC(hdcScreen);
 
         int iWidth  = GetDeviceCaps(hdcScreen, HORZRES);
         int iHeight = GetDeviceCaps(hdcScreen, VERTRES);

         HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen,
                                            iWidth,
                                            iHeight);
 
         HBITMAP hbmOldBitmap = (HBITMAP)SelectObject(hdcCompatible, hbmScreen);

         BitBlt(hdcCompatible,
                      0,0,
                    iWidth,
                   iHeight,
                  hdcScreen,
                      0,0,
                  SRCCOPY);

          /* Nun Speicher für einen Puffer reservieren, der die Daten
         der 32-Bit-Bitmap temporär aufnimmt. */

         DWORD dwImageSize = (DWORD)(iWidth * iHeight * 32 / 8 );
         //void *pImage = HeapAlloc(GetProcessHeap(), 0, dwImageSize); // oder so
         void *pImage = new BYTE[dwImageSize];

         /* Als Nächstes Daten der 32-Bit-Bitmap in den Puffer laden. */
         BITMAPINFO bmi =
         {   
         sizeof(BITMAPINFOHEADER),
                iWidth,
               iHeight,
                    1,
                   32,
                BI_RGB,
                    0,
                    0,
                    0,
                    0,
                    0
                     };

         GetDIBits(hdcCompatible, hbmScreen, 0, (UINT)iHeight, pImage, &bmi, DIB_RGB_COLORS);

         /* Neue Datei erstellen. */
         HANDLE hFile = CreateFile(
         "K:\\screenshot.bmp",
         GENERIC_WRITE,
         0,
         NULL,
         CREATE_ALWAYS,
         FILE_ATTRIBUTE_NORMAL,
         NULL);

         if(hFile == INVALID_HANDLE_VALUE)
         {
         /*return */MessageBox(NULL, "CreateFile failed.", "Failure", MB_ICONERROR);
         }

         /* Jetzt Header für Bitmap präparieren. */
         BITMAPFILEHEADER bmpfh =
         {
         'MB',
         sizeof(BITMAPFILEHEADER),
         0,
         0,
         sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)
         };

         /* Nun Header für Bitmap in Datei schreiben. */
         DWORD dwWritten;

         if(!WriteFile(hFile, &bmpfh, sizeof(BITMAPFILEHEADER), &dwWritten, NULL) || dwWritten != sizeof(BITMAPFILEHEADER))
         {
            /*return*/ MessageBox(NULL, "WriteFile failed.", "Failure", MB_ICONERROR);
         }

         if(!WriteFile(hFile, &bmi.bmiHeader, sizeof(BITMAPINFOHEADER), &dwWritten, NULL) || dwWritten != sizeof(BITMAPINFOHEADER))
         {
            /*return*/ MessageBox(NULL, "WriteFile failed.", "Failure", MB_ICONERROR);
         }

         /* Anschließend Image in Datei schreiben. */
         if(!WriteFile(hFile, pImage, dwImageSize, &dwWritten, NULL) || dwWritten != dwImageSize)
         {
            /*return*/ MessageBox(NULL, "WriteFile failed.", "Failure", MB_ICONERROR);
         }

         SelectObject(hdcCompatible, hbmOldBitmap);
         delete pImage;
         DeleteObject(hbmScreen);
         DeleteDC(hdcScreen);
         DeleteDC(hdcCompatible);
         //*****************************SCREENSHOT-ENDE*************************

};


das prog macht zwar den screen aber startet das prog dann nicht, aber wenn ich den funktions aufruf makeSreenshot(); weglasse (vorausgesetzt die bmp existiert bereits auf der festplatte) fuktioniert es!!

Ich hoffe es kann mir jemand helfen
danke im voraus homer Jay
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
mfc++
JLI'ler


Alter: 40
Anmeldedatum: 18.02.2004
Beiträge: 163
Wohnort: Bettlä
Medaillen: Keine

BeitragVerfasst am: 25.02.2005, 18:33    Titel: Antworten mit Zitat

ich hätte ne andere frage (sorry) im eigene dateien ordner sind ja (in xp) meine musik, eigene bilder und so. ich möchte die screenshots in meine screenshots speichern (wie man den ordner macht weiss ich) aberwie ich dahinkomme weiss ich nicht. also wie ich zu den eigenen dateien komme weiss ich nit. manche haben es auf c: manche auf d: u.s.w

danke im voraus
_________________
www.teslasystems.ch
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 25.02.2005, 19:00    Titel: Antworten mit Zitat

Es gibt da einige Registrierungseinträge unter:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
C++Builder
Senior JLI'ler



Anmeldedatum: 04.10.2003
Beiträge: 235

Medaillen: Keine

BeitragVerfasst am: 25.02.2005, 19:13    Titel: Antworten mit Zitat

hier : http://www.online-tutorials.net/system/pfad-des-windows-system-ordners/sourcecodes-t-19-32.html gibt es ja eine Funktion für das Windows und System verzeichniss vlt gibt es auch so eine Funktion für Eigen Dateien
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 25.02.2005, 19:29    Titel: Antworten mit Zitat

Jetzt hab ichs Smile

http://msdn.microsoft.com/library/en-us/shellcc/platform/shell/reference/functions/shgetfolderpath.asp
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3
Seite 3 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum