Newsgroup: it.comp.lang.c++
Titolo: Screenshot ed altro ...

iao a tutti,
sono un studente d'informatica e sono alle prime armi nella
programmazione c++/win32!
per un progetto dovrei realizzare un applicazione per l'insegnamento in
multicast. mi spiego : gli studenti dovrebbero vedere sul loro monitor
quello ke il prof sta facendo. ho gia del codice c++ per l'invio di
pacchetti via UDP.
il mio problema é il seguente : come ottere un "print screen" e salvarlo
in un file bmp ?
ho trovato su questo ng qualcosa : GetDesktopWindow ... sono sulla buona
strada ???
ben inteso ke, dopo, il bmp verra suddiviso e compresso. l'idea é poi di
utilizzare un algoritmo ke permettesse di inviare solo quello ke é
cambiato.
utilizzo ms visual c++ 6.0 (non so se cambia qualcosa ...)
accetto suggerimenti, consigli, insulti ed altro .... :-))))
grazie mille
Marcel Beyeler (
marcel....@eivd.ch
)
ps.: allego il copy&paste del codice per l'invio dei dati via udp ...
magari interessa a qualcuno ...
-------------------------------------------------------------------------
#include <windows.h> 
#include <winsock.h>
#define DEST_MCAST        "234.5.6.7"     
#define DESTINATION_PORT  4567            
#define SOURCE_PORT       0               
int WINAPI WinMain (
              HINSTANCE hInstance,    // Handle to the current instance
              HINSTANCE hPrevInstance,// Handle to the previous instance
              LPTSTR lpCmdLine,       // Pointer to the command line
              int nCmdShow)           // Show window state. 
{
  int iOptVal = 64;                   
  char szMessage[] = "Multicasting message!";                      
                                    // Sent message string
  TCHAR szError[100];               // Error message string
  SOCKET Sock = INVALID_SOCKET;     // Datagram window socket
  SOCKADDR_IN source_sin,           // Source socket address
              dest_sin;             // Destination socket address
  WSADATA WSAData;                  // Contains details of the 
                                    // Winsock implementation
 
  // Initialize Winsock. 
  if (WSAStartup (MAKEWORD(1,1), &WSAData) != 0) 
  {
    wsprintf (szError, TEXT("WSAStartup failed! Error: %d"), 
              WSAGetLastError ());
    MessageBox (NULL, szError, TEXT("Error"), MB_OK);
    return FALSE;
  }
  // Create a datagram window socket, Sock.
  if ((Sock = socket (AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET) 
  {
    wsprintf (szError, TEXT("Allocating socket failed! Error: %d"), 
              WSAGetLastError ());
    MessageBox (NULL, szError, TEXT("Error"), MB_OK);
    return FALSE;
  }
  // Fill out source socket's address information.
  source_sin.sin_family = AF_INET;
  source_sin.sin_port = htons (SOURCE_PORT);  
  source_sin.sin_addr.s_addr = htonl (INADDR_ANY);
  // Associate the source socket's address with the socket, Sock.
  if (bind (Sock, 
            (struct sockaddr FAR *) &source_sin, 
            sizeof (source_sin)) == SOCKET_ERROR) 
  {
    wsprintf (szError, TEXT("Binding socket failed! Error: %d"), 
              WSAGetLastError ());
    MessageBox (NULL, szError, TEXT("Error"), MB_OK);
    closesocket (Sock);
    return FALSE;
  }
 
  // Set the Time-to-Live of the multicast.
  if (setsockopt (Sock, 
                  IPPROTO_IP, 
                  IP_MULTICAST_TTL, 
                  (char FAR *)&iOptVal, 
                  sizeof (int)) == SOCKET_ERROR)
  {
    wsprintf (szError, TEXT("setsockopt failed! Error: %d"), 
              WSAGetLastError ());
    MessageBox (NULL, szError, TEXT("Error"), MB_OK);
    closesocket (Sock);
    return FALSE;
  }
 
  // Fill out the desination socket's address information.
  dest_sin.sin_family = AF_INET;
  dest_sin.sin_port = htons (DESTINATION_PORT);  
  dest_sin.sin_addr.s_addr = inet_addr (DEST_MCAST);
 
  // Send a message to the multicasting address.
  if (sendto (Sock, 
              szMessage,
              strlen (szMessage) + 1,
              0,
              (struct sockaddr FAR *) &dest_sin,
              sizeof (dest_sin)) == SOCKET_ERROR)
  {
    wsprintf (szError, TEXT("sendto failed! Error: %d"), 
              WSAGetLastError ());
    MessageBox (NULL, szError, TEXT("Error"), MB_OK);
    closesocket (Sock);
    return FALSE;
  }
  else
    MessageBox (NULL, TEXT("Sending data succeeded!"), TEXT("Info"), 
                MB_OK);
  // Disable sending on Sock before closing it.
  shutdown (Sock, 0x01);
  // Close Sock.
  closesocket (Sock);
  WSACleanup ();
  return TRUE;
}
-------------------------------------------------------------------------

Ciao,
Questo newsgroup si occupa del linguaggio C++ in quanto tale, e non di
aspetti specifici di particolari implementazioni. Per questo non e' il
posto piu' adatto per porre domande specifiche come la tua.
Potresti avere piu' fortuna su uno dei seguenti gruppi:
Per Win32 (95, 98, NT): it.comp.programmare.win32
Per Dos/Win 3.x: it.comp.os.dos
Per Linux:      it.comp.os.linux.development
Per C++Builder: i gruppi borland.public.cppbuilder.*, disponibili sul
                server 
newsgroups.borland.com
 (prevalentemente in 
                inglese, ma si puo' postare anche in italiano)
Grazie,
Nicola Musatti


Devi chiedere su it.comp.programmare.win32 . Questo NG si occupa solo del
linguaggio C++.