C/Visual C - Imprimir pantalla (PrintScreen) URGENTE PLZ!

 
Vista:

Imprimir pantalla (PrintScreen) URGENTE PLZ!

Publicado por Francisco Perez (3 intervenciones) el 14/04/2001 17:20:05
Borland Turbo C++/MS-DOS |
Question: to capture the screen and send it to printer, what do i have to do?

Para capturar lo que tengo en pantalla y dar la opcion de enviarlo a la impresora o a un archivo de texto que debo hacer.. es con caracter de urgencia lo necesito para un trabajo de la universidad.. Gracias..
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Imprimir pantalla (PrintScreen) URGENTE PLZ!

Publicado por Endos (143 intervenciones) el 14/04/2001 19:49:30
geninterrupt(0x05); // Simular pulsacion Impr Pant

Saludos,
Endos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir pantalla (PrintScreen) URGENTE PLZ!

Publicado por Francisco Perez (3 intervenciones) el 14/04/2001 22:22:23
Tambien necesito dar la opcion de enviar lo que esta en pantalla a un archivo de texto, que pueda ser leido con cualquier editor como NOTEPAD de Win9Xpor ejemplo.

Gracias de antemano!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir pantalla (PrintScreen) URGENTE PLZ!

Publicado por Endos (143 intervenciones) el 15/04/2001 01:39:46
Entonces es un poco mas complicado.
Aqui tienes el codigo. Si lo llamas sin parametros, envia el contenido a la impresora.
Si especificas un parametro lo toma como el archivo donde hay que escribir. Por ejemplo 'salida.txt'.

#include <stdio.h>
#include <dos.h>

int main(int argc, char *argv[])
{
unsigned char far *Video=(unsigned char far *)MK_FP(0xB800,0x0000);
register int X,Y;
FILE *Out;

if(argc==1) // No hay parametros?
geninterrupt(0x05); // Enviar a la impresora
else // A un archivo
{
if((Out=fopen(argv[1],"wt"))==NULL)
{
printf("Error al intentar crear el archivo especificado\n");
return -1;
}

// La pantalla es de 80x25, pero la anchura es el doble porque hay un byte
// de atributos que nos lo saltamos al leer
for(Y=0; Y<25; Y++)
{
for(X=0; X<160; X+=2)
putc(*(Video+X),Out); // Mandar caracter al archivo

putc('\n',Out); // Mandar un salto de linea
Video+=160; // Siguiente linea
}
fclose(Out); // Cerrar archivo
}
return 0;
}

Saludos,
Endos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir pantalla (PrintScreen) URGENTE PLZ!

Publicado por Germán B. (143 intervenciones) el 15/04/2001 03:11:51
Para evitar depender de la dirección de memoria del video (que no es igual para cualquier máquina / tarjeta), y aprovechando que es con Borland, se puede usar la función gettext(). Levanta el contenido de la pantalla (o un sector) a la memoria.
Si mal no recuerdo el tamaño del buffer a utilizar debe tener la cantidad de caracteres a capturar * 2 bytes. Por cada posición guarda en un byte el color y en otro el carácter.
Una vez obtenida la información se puede imprimir, grabar en archivo, etc.
G
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir pantalla (PrintScreen) URGENTE PLZ!

Publicado por Francisco Perez (3 intervenciones) el 15/04/2001 05:02:05
G, puedes hacerme un ejemplo de la funcion igual como la que me hizo Endos ?
La verdad no entiendo el ejemplo que trae el Turbo C.
Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir pantalla (PrintScreen) URGENTE PLZ!

Publicado por Germán B. (143 intervenciones) el 15/04/2001 23:50:32
#include <stdio.h>
#include <conio.h>

void main(void) {
static char buf[25][80][2];
int x, y;
FILE *Salida;

gettext(1,1,80,25,(void *)buf);
if((Salida=fopen("salida.txt","wt"))==NULL) {
printf("No se puede abrir el archivo\n");
return;
}
for(y=0;y<25;y++) {
for(x=0;x<80;x++)
putc(buf[y][x][0],Salida);
putc('\n',Salida);
}
fclose(Salida);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir pantalla (PrintScreen) URGENTE PLZ!

Publicado por Endos (143 intervenciones) el 15/04/2001 14:31:25
Perdona que te contradiga pero sobre Dos en modo texto, la dirección es siempre la misma.
Estamos hablando de un modo texto CGA que es compatible con cualquier tarjeta de video del mercado.
Al igual que puedo asegurar que la memoria de video en cualquier modo grafico VGA empieza en 0xA000:0x0000, sea la tarjeta que sea.
Otra cosa son los modos SVGA que cada fabricante los hace como quiere...

Saludos,
Endos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Imprimir pantalla (PrintScreen) URGENTE PLZ!

Publicado por Germán B. (143 intervenciones) el 15/04/2001 16:48:47
Yo tuve algunos problemas con alguna máquina, pero fue hace muchos años y puede que haya sido alguna tarjeta vieja. Y me parece que no era igual la forma de guardar los atributos de display (o "color") entre una hércules mono y una vga, cosa que no importaría para lo que necesita Francisco, pero es lo que me llevó a no depender del acceso directo a la memoria porque no pude resolverlo.
G
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar