Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Interpretar archivos de Spool SHD.SPL (https://www.clubdelphi.com/foros/showthread.php?t=76930)

ASAPLTDA 06-12-2011 03:23:57

Interpretar archivos de Spool SHD.SPL
 
Buenas noches foristas,
TEngo la necesidad de interpretar los archivos de spool (spool\printers) que se generarn antes de la impresion de estos. La idea que tengo es leer el contenido y extraer la prte texto de ellos para evitar tener que digitar toda la informacion cuando se imrpimen los datos.

Encontre este comentarios de un usuario que tiene una necesidad parecida. Anexo los datos encontrados para ver si alguno de ustedes tiene algo ya resuelto o una idea de como resolverlo,

Estoy desarrollando una aplicación para control de impresión en windows.
necesito elaborar un programa que pueda leer correctamente el archivo .shd
que windows crea en el subdirectorio \spool\printers

Lo que he podido averiguar es que está elaborado con la siguiente
estructura:

The SHD file consists of a header followed by the data.
Código Delphi [-]
#define SHD_SIGNATURE_4B $0000494B //Windows 9x
#define SHD_SIGNATURE_66 $00004966
#define SHD_SIGNATURE_67 $00004967 //Win2000/XP
#define SHD_SIGNATURE_68 $00004968 //Windows 2003

# _SHADOW_FILE_HEADER_68 looks similar to #_SHADOW_FILE_HEADER_67

typedef struct _SHADOW_FILE_HEADER_67 {
DWORD dwSignature; //SHD_SIGNATURE_67
DWORD dwHeaderSize;
WORD wStatus;
WORD wUnknown1;
DWORD dwJobID;
DWORD dwPriority;
DWORD offUserName; //Offset of WideChar+0
DWORD offNotifyName; //Offset of WideChar+0
DWORD offDocumentName; //Offset of WideChar+0
DWORD offPort; //Offset of WideChar+0
DWORD offPrinterName; //Offset of WideChar+0
DWORD offDriverName; //Offset of WideChar+0
DWORD offDevMode; //Offset of DEVMODE
DWORD offPrintProcessor; //Offset of WideChar+0
DWORD offDataFormat; //Offset of WideChar+0
DWORD dwUnknown2;
SYSTEMTIME stSubmitTime;
DWORD dwStartTime;
DWORD dwUntilTime;
DWORD dwSizeSPL; //Size of SPL File
DWORD dwPageCount;
DWORD dwSizeSecurityInfo; //Size of SecurityInfo
DWORD offSecurityInfo; //Offset of SECURITY_DESCRIPTOR
DWORD dwUnknown3;
DWORD dwUnknown4;
DWORD dwUnknown5;
DWORD offComputername; //Offset of WideChar+0
DWORD dwSPLSize2;
} SHADOW_FILE_HEADER_67, *PSHADOW_FILE_HEADER_67;

typedef struct _SHADOW_FILE_HEADER_66 {
DWORD dwSignature; //SHD_SIGNATURE_66
WORD wStatus;
WORD wUnknown1;
DWORD dwJobID;
DWORD dwPriority;
DWORD offUserName; //Offset of WideChar+0
DWORD offNotifyName; //Offset of WideChar+0
DWORD offDocumentName; //Offset of WideChar+0
DWORD offPort; //Offset of WideChar+0
DWORD offPrinterName; //Offset of WideChar+0
DWORD offDriverName; //Offset of WideChar+0
DWORD offDevMode; //Offset of DEVMODE
DWORD offPrintProcessor; //Offset of WideChar+0
DWORD offDataFormat; //Offset of WideChar+0
DWORD dwUnknown2;
SYSTEMTIME stSubmitTime;
DWORD dwStartTime;
DWORD dwUntilTime;
DWORD dwSizeSPL; //Size of SPL File
DWORD dwPageCount;
DWORD dwSizeSecurityInfo; //Size of SecurityInfo
DWORD offSecurityInfo; //Offset of SECURITY_DESCRIPTOR
DWORD dwUnknown3;
DWORD dwUnknown4;
DWORD dwUnknown5;
} SHADOW_FILE_HEADER_66, *PSHADOW_FILE_HEADER_66;

typedef struct _SHADOW_FILE_HEADER_4B {
DWORD dwSignature; //SHD_SIGNATURE_4B
WORD wStatus;
WORD wUnknown1;
DWORD dwJobID;
DWORD dwPriority;
DWORD offUserName; //Offset of WideChar+0
DWORD offNotifyName; //Offset of WideChar+0
DWORD offDocumentName; //Offset of WideChar+0
DWORD offPort; //Offset of WideChar+0
DWORD offPrinterName; //Offset of WideChar+0
DWORD offDriverName; //Offset of WideChar+0
DWORD offDevMode; //Offset of DEVMODE
DWORD offPrintProcessor; //Offset of WideChar+0
DWORD offDataFormat; //Offset of WideChar+0
DWORD dwUnknown2;
SYSTEMTIME stSubmitTime;
DWORD dwStartTime;
DWORD dwUntilTime;
DWORD dwSizeSPL; //Size of SPL File
DWORD dwPageCount;
DWORD dwSizeSecurityInfo; //Size of SecurityInfo
DWORD offSecurityInfo; //Offset of SECURITY_DESCRIPTOR
DWORD dwUnknown3;
} SHADOW_FILE_HEADER_4B, *PSHADOW_FILE_HEADER_4B;


Cualquier información, contactar a HUGO CORTES pesfom @ yahoo . com

Casimiro Noteví 06-12-2011 10:55:46

Amigo ASAPLTDA, de un usuario novato me lo espero, pero de tí me ha resultado raro, no sé si alguien está entrando con tu nick :confused:
El código debe ponerse entre etiquetas [delphi], [sql], [code], etc.
No se pone emails porque los robots ya lo habrán detectado y serás bombardeado con correo spam.
No se pide a nadie que te contacte por email, entonces, ¿para qué están los foros?.
En fin, no lo entiendo :confused::confused::confused:

ASAPLTDA 06-12-2011 17:17:12

Informacion Inadecuada
 
Hola Casimiro, gracias por tus comentarios. podrias eliminar el correo de la persona, es que fue una copia de las intrucciones de lectura que encontre comom ayuda, y por error se me fue el correo del senor Gracias


La franja horaria es GMT +2. Ahora son las 02:27:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi