SPL - Microsoft® Windows Spool File Format
来源:互联网 发布:手机算量软件 编辑:程序博客网 时间:2024/06/06 03:04
SPL - Microsoft® Windows Spool File Format
Introduction
The print job's spooled data is contained in a spool file.
For each print job there are two spool files generated by the Windows® NT/2000 spooler. One file with the .SHD extension for job settings, and one with the .SPL extension for the drawing commands.
:!: Microsoft has released official documentation about this format in connection to the Open Protocol Specifications.
[MS-EMFSPOOL]: Enhanced Metafile Spool Format Specification
[MS-EMF]: Enhanced Metafile Format Specification
:!: Warning
While you might use the information you find here to extract EMF and other data from the Windows spoolfiles, you should remember, that this information is undocumented and might change without prior notice!
You can probably locate the information about the EMF structs in
the spool file format. But note that one major caveat with this
approach is that since the spool file format is MS proprietary,
it might change in future releases without notice. So if your
driver is dependent on a particular spool file format, it could
break on future releases. This is the reason for us recommending
that you not rely on the spool file format.
//Ashwin, Microsoft
This document includes documentation for the EMF-SPL file format.
The Windows® SPL files can include RAW data or EMF data.
RAW-SPL
In the case of RAW data, the content of the file is exactly the same as the data send to the printer.
So this data could be PCL, PostScript, ESC-P, CaPSL, Prescribe or similar.
When is RAW used?
A Print Processor must support the RAW data type or it simply won't work. Beyond that, the data types it supports have little effect.
The decision on whether to spool EMF or RAW is made by GDI based on various factors.
More information on the Spool Files page.
EMF-SPL
EMF stands for Enhanced Metafile. You can find information on standard EMF in the Windows Platform SDK.
Basically the SPL files consist of one or more standard EMF files, surrounded by some extra records. The EMF SPL files contain a special version of EMF, not compatible with standard EMF, although most of the records are the same.
SPL_HEADER
SMR_PAGE_EMF/WMF
SMR_OFFS_FONT
SMR_OFFS_FONT
SMR_EO_PAGE
SMR_PAGE_EMF/WMF
SMR_DEVMODE
SMR_OFFS_FONT
SMR_OFFS_FONT
SMR_OFFS_FONT
SMR_EO_PAGE
Records
Header
The SPL files always start with the SPL_HEADER, this record differs in the way, that the specified recordsize includes both header and data of the SPL header.
Base Record Structure
The records following the SPL_HEADER, always start with (include) the SMR base record. The nSize member specifies the size of the following data, including the size of the remaining header members and the data. nSize = (RECORDSIZE - sizeof(SMR)).
So the SMR_EO_PAGE.nSize member would be = 8, as the complete record is 16 bytes (SMR + 8)
Page Record
Every page contained in the file consists of at least one SMR_PAGE_EMF and one SMR_EO_PAGE record. The SMR_PAGE_EMF contains the EMF data for the page.
Between these 2 records, every page can include some additional records like DEVMODE and font data for the page.
Font Records
You can find more information about the various font data formats used in the SPL files, at the Font Formats page.
EOF Record (End of File)
SPL files can also include an SMR_PAGE_EMF record specifying a length of 0. This record indicates the end of file. The following data should not be considered valid.
Definition
/*****************************************************************************
* Terms of Use
* Copyright © Christoph Lindemann. All rights reserved.
*
* Permission is granted to copy, distribute and/or modify this document under
* the terms of the GNU Free Documentation License, Version 1.2 or any later
* version published by the Free Software Foundation; with no Invariant
* Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the
* license is included in the section entitled "GNU Free Documentation
* License".
*----------------------------------------------------------------------------
* History:
* 24-03-2004 Initial Document
* Christoph Lindemann, christoph@lindemann.nu
*
* 24-03-2004 Release to public
* Christoph Lindemann, christoph@lindemann.nu
*
* 10-06-2004 Added SPL_SMR_PADDING
* Thanks to Fabian Franz
*
* 11-06-2004 CORRECTED FAULTY INFORMATIONS
* Christoph Lindemann, christoph@lindemann.nu
*
* 14-06-2004 Added some text explaining the format.
* Christoph Lindemann, christoph@lindemann.nu
*
* 19-05-2005 Corrected typos in SMREXT definition
* Thanks to Peter Wasser
*
* 02-11-2005 Updated End-Of-Page records 0x0D and 0x0E
* Thanks to Krzys
*
* 15-06-2006 Updated EMF Spool Metafile record types
* Christoph Lindemann, christoph@lindemann.nu
*
* 16-06-2006 Added information about PRESTARTPAGE record
* Christoph Lindemann, christoph@lindemann.nu
*
* 08-04-2008 Updated with new info found in MS Official Released Specs.
* Christoph Lindemann, christoph@lindemann.nu
*
*****************************************************************************/
//Spool Metafile constants
#define SPLMETA_SIGNATURE 0x00010000 //Version 1.0
// Spool Metafile record types
// Please note remarks in the corresponding struct definitions
#if(WINVER >= 0x0400)
/* Windows NT Workstation 4.0 SP2 */
#define SRT_METAFILE 0x00000001 /* 1 Enhanced Meta File (EMF) NT4 */
#define SRT_ENGINE_FONT 0x00000002 /* 2 A TrueType font definition */
#define SRT_DEVMODE 0x00000003 /* 3 DevMode */
#define SRT_TYPE1_FONT 0x00000004 /* 4 A PostScript Type 1 font definition */
#define SRT_PRESTARTPAGE 0x00000005 /* 5 The start page for EPS */
#if (WINVER >= 0x0500)
/* Windows 2000 */
#define SRT_DESIGNVECTOR 0x00000006 /* 6 A font design vector (Multiple Master) */
#define SRT_SUBSET_FONT 0x00000007 /* 7 A subset font definition */
#define SRT_DELTA_FONT 0x00000008 /* 8 A delta font definition */
#define SRT_FORM_METAFILE 0x00000009 /* 9 EMF */
#define SRT_BW_METAFILE 0x0000000A /* 10 Monochrome EMF */
#define SRT_BW_FORM_METAFILE 0x0000000B /* 11 Monochrome EMF */
#define SRT_METAFILE_DATA 0x0000000C /* 12 Enhanced Meta File (EMF) Win2k */
#define SRT_EXT_METAFILE 0x0000000D /* 13 An offset to document content */
#define SRT_EXT_BW_METAFILE 0x0000000E /* 14 An offset to monochrome document content */
#define SRT_EXT_ENGINE_FONT 0x0000000F /* 15 An offset to a TrueType font definition */
#define SRT_EXT_TYPE1_FONT 0x00000010 /* 16 An offset to a PS Type 1 font definition */
#define SRT_EXT_DESIGNVECTOR 0x00000011 /* 17 An offset to a font design vector */
#define SRT_EXT_SUBSET_FONT 0x00000012 /* 18 An offset to a subset font definition */
#define SRT_EXT_DELTA_FONT 0x00000013 /* 19 An offset to a delta font definition */
#define SRT_EXT_PS_JOB_DATA 0x00000014 /* 20 Document-level PostScript data */
#if (WINVER >= 0x0501)
/* Windows XP */
#define SRT_EXT_EMBED_FONT 0x00000015 /* 21 an offset to embedded font identifiers */
#endif
#endif
#endif
/*****************************************************************************
* SPL_HEADER
*----------------------------------------------------------------------------
* SPL file header for EMFSPL files
*****************************************************************************/
typedef struct tagSPLHEADER {
DWORD SIGNATURE;
DWORD nSize; // record size INCLUDING header
DWORD offDocumentName; // offset of Job Title from start
DWORD offPort; // offset of portname from start
BYTE HeaderData[];
} SPL_HEADER, *PSPL_HEADER;
/*****************************************************************************
* SMR - Base record
*----------------------------------------------------------------------------
* Base record type for the Spool Metafile.
*****************************************************************************/
typedef struct tagSMR{
DWORD iType; // Spool metafile record type
DWORD nSize; // length of the following data
// NOT INCLUDING this header
} SMR, *PSMR;
/*****************************************************************************
* SMREXT - Extended record
*----------------------------------------------------------------------------
* Contains neg. distance to start of Data
*****************************************************************************/
typedef struct tagSMREXT{
SMR smr;
DWORD DistanceLow;
DWORD DistanceHigh;
} SMREXT, *PSMREXT;
/*****************************************************************************
* SMRPRESTARTPAGE - PRESTARTPAGE
*----------------------------------------------------------------------------
* Written before pagedata is written to spoolfile
* Used as a temporary "end of file" indicating following data is not
* fully spooled yet
*****************************************************************************/
typedef struct tagSMRPRESTARTPAGE{
SMR smr;
DWORD Unknown1;
DWORD Unknown2; //0xFFFFFFFF
} SMRPRESTARTPAGE, *PSMRPRESTARTPAGE;
/*****************************************************************************
* SMR_PAGE - EMF/Page data
*----------------------------------------------------------------------------
* EMF/Page data
*****************************************************************************/
typedef struct tagSMRPAGE{
SMR smr; // if smr.nSize == 0, this indicates EndOfFile
BYTE EMFData[];
} SMR_PAGE, *PSMR_PAGE;
/*****************************************************************************
* SMR_DEVMODE - DEVMODE data
*----------------------------------------------------------------------------
* DEVMODE data
*****************************************************************************/
typedef struct tagSMRDEVMODE{
SMR smr;
BYTE DEVMODEData[];
} SMR_DEVMODE, *PSMR_DEVMODE;
/*****************************************************************************
* SMR_FONT - FONT data
*****************************************************************************/
typedef struct tagSMRFONT{
SMR smr;
BYTE FONTData[];
} SMR_FONT, *PSMR_FONT;
/*****************************************************************************
* SMR_EXTFONT - Extended Font Data
*----------------------------------------------------------------------------
* Contains neg. distance to start of
* Font Data
* Font data is typically embedded as
* GDICOMMENT in the prev EMF data
*****************************************************************************/
typedef struct tagEXTFONT{
SMREXT smrext;
} SMR_EXTFONT, *PSMR_EXTFONT;
/*****************************************************************************
* SMR_EOPAGE - End of Page
*----------------------------------------------------------------------------
* Contains neg. distance to
* start of page record
*****************************************************************************/
typedef struct tagSMREOPAGE{
SMREXT smrext;
} SMR_EOPAGE, *PSMR_EOPAGE;
More information, examples and tools
Books
Windows Graphics Programming: Win32 GDI and DirectDraw by Feng Yuan.
The world's most complete guide to Windows graphics programming!
Win32 GDI and DirectDraw: Accurate, under the hood, and in depth
Beyond the API: Internals, restrictions, performance, and real-life problems
Complete: Pixel, lines, curves, filled area, bitmap, image processing, fonts, text, metafile, printing
And more
http://www.amazon.com/exec/obidos/ASIN/0130869856
Articles, Code and Tools
EMF Printer Spool File Viewer (Article, Code & Tool)
A viewer application for EMF format spool files.
http://www.codeproject.com/dotnet/EMFSpoolViewer.asp
Spool File View (Tool)
An EMF-Spool file viewer. Shows information about SHD and SPL files. For developers.
splview.zip
O&K Printer Viewer (Tool)
Viewing and saving as image the printed documents.
http://www.prnwatch.com/ok-printer-viewer/
Metafile Extraction (Article)
By Vipin Aravind
Part 1:http://www.microsoft.com/india/msdn/articles/130.aspx
Part 2:http://www.angelfire.com/extreme4/vprint/MetafileExtractionPartII.htm
PrintMirror (Driver)
Open Source printer which creates EMF files
http://sourceforge.net/projects/printmirror/
SPL Viewer (Tool)
Viewer for SPL files. Freeware. English/German
http://www.lvbprint.de/html/splviewer.htm
EMF Printer(Driver)
Virtual printer for creation of EMFs and more! http://emfprinter.sourceforge.net
EMFexplorer (Tool)
A program to manipulate Windows Metafile data. This open-source software displays, scales, rotates documents, and, using GDI+, optionally enhances their quality.
http://frazmitic.free.fr/emfexplorer/
Introduction
The print job's spooled data is contained in a spool file.
For each print job there are two spool files generated by the Windows® NT/2000 spooler. One file with the .SHD extension for job settings, and one with the .SPL extension for the drawing commands.
:!: Microsoft has released official documentation about this format in connection to the Open Protocol Specifications.
[MS-EMFSPOOL]: Enhanced Metafile Spool Format Specification
[MS-EMF]: Enhanced Metafile Format Specification
:!: Warning
While you might use the information you find here to extract EMF and other data from the Windows spoolfiles, you should remember, that this information is undocumented and might change without prior notice!
You can probably locate the information about the EMF structs in
the spool file format. But note that one major caveat with this
approach is that since the spool file format is MS proprietary,
it might change in future releases without notice. So if your
driver is dependent on a particular spool file format, it could
break on future releases. This is the reason for us recommending
that you not rely on the spool file format.
//Ashwin, Microsoft
This document includes documentation for the EMF-SPL file format.
The Windows® SPL files can include RAW data or EMF data.
RAW-SPL
In the case of RAW data, the content of the file is exactly the same as the data send to the printer.
So this data could be PCL, PostScript, ESC-P, CaPSL, Prescribe or similar.
When is RAW used?
A Print Processor must support the RAW data type or it simply won't work. Beyond that, the data types it supports have little effect.
The decision on whether to spool EMF or RAW is made by GDI based on various factors.
More information on the Spool Files page.
EMF-SPL
EMF stands for Enhanced Metafile. You can find information on standard EMF in the Windows Platform SDK.
Basically the SPL files consist of one or more standard EMF files, surrounded by some extra records. The EMF SPL files contain a special version of EMF, not compatible with standard EMF, although most of the records are the same.
SPL_HEADER
SMR_PAGE_EMF/WMF
SMR_OFFS_FONT
SMR_OFFS_FONT
SMR_EO_PAGE
SMR_PAGE_EMF/WMF
SMR_DEVMODE
SMR_OFFS_FONT
SMR_OFFS_FONT
SMR_OFFS_FONT
SMR_EO_PAGE
Records
Header
The SPL files always start with the SPL_HEADER, this record differs in the way, that the specified recordsize includes both header and data of the SPL header.
Base Record Structure
The records following the SPL_HEADER, always start with (include) the SMR base record. The nSize member specifies the size of the following data, including the size of the remaining header members and the data. nSize = (RECORDSIZE - sizeof(SMR)).
So the SMR_EO_PAGE.nSize member would be = 8, as the complete record is 16 bytes (SMR + 8)
Page Record
Every page contained in the file consists of at least one SMR_PAGE_EMF and one SMR_EO_PAGE record. The SMR_PAGE_EMF contains the EMF data for the page.
Between these 2 records, every page can include some additional records like DEVMODE and font data for the page.
Font Records
You can find more information about the various font data formats used in the SPL files, at the Font Formats page.
EOF Record (End of File)
SPL files can also include an SMR_PAGE_EMF record specifying a length of 0. This record indicates the end of file. The following data should not be considered valid.
Definition
/*****************************************************************************
* Terms of Use
* Copyright © Christoph Lindemann. All rights reserved.
*
* Permission is granted to copy, distribute and/or modify this document under
* the terms of the GNU Free Documentation License, Version 1.2 or any later
* version published by the Free Software Foundation; with no Invariant
* Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the
* license is included in the section entitled "GNU Free Documentation
* License".
*----------------------------------------------------------------------------
* History:
* 24-03-2004 Initial Document
* Christoph Lindemann, christoph@lindemann.nu
*
* 24-03-2004 Release to public
* Christoph Lindemann, christoph@lindemann.nu
*
* 10-06-2004 Added SPL_SMR_PADDING
* Thanks to Fabian Franz
*
* 11-06-2004 CORRECTED FAULTY INFORMATIONS
* Christoph Lindemann, christoph@lindemann.nu
*
* 14-06-2004 Added some text explaining the format.
* Christoph Lindemann, christoph@lindemann.nu
*
* 19-05-2005 Corrected typos in SMREXT definition
* Thanks to Peter Wasser
*
* 02-11-2005 Updated End-Of-Page records 0x0D and 0x0E
* Thanks to Krzys
*
* 15-06-2006 Updated EMF Spool Metafile record types
* Christoph Lindemann, christoph@lindemann.nu
*
* 16-06-2006 Added information about PRESTARTPAGE record
* Christoph Lindemann, christoph@lindemann.nu
*
* 08-04-2008 Updated with new info found in MS Official Released Specs.
* Christoph Lindemann, christoph@lindemann.nu
*
*****************************************************************************/
//Spool Metafile constants
#define SPLMETA_SIGNATURE 0x00010000 //Version 1.0
// Spool Metafile record types
// Please note remarks in the corresponding struct definitions
#if(WINVER >= 0x0400)
/* Windows NT Workstation 4.0 SP2 */
#define SRT_METAFILE 0x00000001 /* 1 Enhanced Meta File (EMF) NT4 */
#define SRT_ENGINE_FONT 0x00000002 /* 2 A TrueType font definition */
#define SRT_DEVMODE 0x00000003 /* 3 DevMode */
#define SRT_TYPE1_FONT 0x00000004 /* 4 A PostScript Type 1 font definition */
#define SRT_PRESTARTPAGE 0x00000005 /* 5 The start page for EPS */
#if (WINVER >= 0x0500)
/* Windows 2000 */
#define SRT_DESIGNVECTOR 0x00000006 /* 6 A font design vector (Multiple Master) */
#define SRT_SUBSET_FONT 0x00000007 /* 7 A subset font definition */
#define SRT_DELTA_FONT 0x00000008 /* 8 A delta font definition */
#define SRT_FORM_METAFILE 0x00000009 /* 9 EMF */
#define SRT_BW_METAFILE 0x0000000A /* 10 Monochrome EMF */
#define SRT_BW_FORM_METAFILE 0x0000000B /* 11 Monochrome EMF */
#define SRT_METAFILE_DATA 0x0000000C /* 12 Enhanced Meta File (EMF) Win2k */
#define SRT_EXT_METAFILE 0x0000000D /* 13 An offset to document content */
#define SRT_EXT_BW_METAFILE 0x0000000E /* 14 An offset to monochrome document content */
#define SRT_EXT_ENGINE_FONT 0x0000000F /* 15 An offset to a TrueType font definition */
#define SRT_EXT_TYPE1_FONT 0x00000010 /* 16 An offset to a PS Type 1 font definition */
#define SRT_EXT_DESIGNVECTOR 0x00000011 /* 17 An offset to a font design vector */
#define SRT_EXT_SUBSET_FONT 0x00000012 /* 18 An offset to a subset font definition */
#define SRT_EXT_DELTA_FONT 0x00000013 /* 19 An offset to a delta font definition */
#define SRT_EXT_PS_JOB_DATA 0x00000014 /* 20 Document-level PostScript data */
#if (WINVER >= 0x0501)
/* Windows XP */
#define SRT_EXT_EMBED_FONT 0x00000015 /* 21 an offset to embedded font identifiers */
#endif
#endif
#endif
/*****************************************************************************
* SPL_HEADER
*----------------------------------------------------------------------------
* SPL file header for EMFSPL files
*****************************************************************************/
typedef struct tagSPLHEADER {
DWORD SIGNATURE;
DWORD nSize; // record size INCLUDING header
DWORD offDocumentName; // offset of Job Title from start
DWORD offPort; // offset of portname from start
BYTE HeaderData[];
} SPL_HEADER, *PSPL_HEADER;
/*****************************************************************************
* SMR - Base record
*----------------------------------------------------------------------------
* Base record type for the Spool Metafile.
*****************************************************************************/
typedef struct tagSMR{
DWORD iType; // Spool metafile record type
DWORD nSize; // length of the following data
// NOT INCLUDING this header
} SMR, *PSMR;
/*****************************************************************************
* SMREXT - Extended record
*----------------------------------------------------------------------------
* Contains neg. distance to start of Data
*****************************************************************************/
typedef struct tagSMREXT{
SMR smr;
DWORD DistanceLow;
DWORD DistanceHigh;
} SMREXT, *PSMREXT;
/*****************************************************************************
* SMRPRESTARTPAGE - PRESTARTPAGE
*----------------------------------------------------------------------------
* Written before pagedata is written to spoolfile
* Used as a temporary "end of file" indicating following data is not
* fully spooled yet
*****************************************************************************/
typedef struct tagSMRPRESTARTPAGE{
SMR smr;
DWORD Unknown1;
DWORD Unknown2; //0xFFFFFFFF
} SMRPRESTARTPAGE, *PSMRPRESTARTPAGE;
/*****************************************************************************
* SMR_PAGE - EMF/Page data
*----------------------------------------------------------------------------
* EMF/Page data
*****************************************************************************/
typedef struct tagSMRPAGE{
SMR smr; // if smr.nSize == 0, this indicates EndOfFile
BYTE EMFData[];
} SMR_PAGE, *PSMR_PAGE;
/*****************************************************************************
* SMR_DEVMODE - DEVMODE data
*----------------------------------------------------------------------------
* DEVMODE data
*****************************************************************************/
typedef struct tagSMRDEVMODE{
SMR smr;
BYTE DEVMODEData[];
} SMR_DEVMODE, *PSMR_DEVMODE;
/*****************************************************************************
* SMR_FONT - FONT data
*****************************************************************************/
typedef struct tagSMRFONT{
SMR smr;
BYTE FONTData[];
} SMR_FONT, *PSMR_FONT;
/*****************************************************************************
* SMR_EXTFONT - Extended Font Data
*----------------------------------------------------------------------------
* Contains neg. distance to start of
* Font Data
* Font data is typically embedded as
* GDICOMMENT in the prev EMF data
*****************************************************************************/
typedef struct tagEXTFONT{
SMREXT smrext;
} SMR_EXTFONT, *PSMR_EXTFONT;
/*****************************************************************************
* SMR_EOPAGE - End of Page
*----------------------------------------------------------------------------
* Contains neg. distance to
* start of page record
*****************************************************************************/
typedef struct tagSMREOPAGE{
SMREXT smrext;
} SMR_EOPAGE, *PSMR_EOPAGE;
More information, examples and tools
Books
Windows Graphics Programming: Win32 GDI and DirectDraw by Feng Yuan.
The world's most complete guide to Windows graphics programming!
Win32 GDI and DirectDraw: Accurate, under the hood, and in depth
Beyond the API: Internals, restrictions, performance, and real-life problems
Complete: Pixel, lines, curves, filled area, bitmap, image processing, fonts, text, metafile, printing
And more
http://www.amazon.com/exec/obidos/ASIN/0130869856
Articles, Code and Tools
EMF Printer Spool File Viewer (Article, Code & Tool)
A viewer application for EMF format spool files.
http://www.codeproject.com/dotnet/EMFSpoolViewer.asp
Spool File View (Tool)
An EMF-Spool file viewer. Shows information about SHD and SPL files. For developers.
splview.zip
O&K Printer Viewer (Tool)
Viewing and saving as image the printed documents.
http://www.prnwatch.com/ok-printer-viewer/
Metafile Extraction (Article)
By Vipin Aravind
Part 1:http://www.microsoft.com/india/msdn/articles/130.aspx
Part 2:http://www.angelfire.com/extreme4/vprint/MetafileExtractionPartII.htm
PrintMirror (Driver)
Open Source printer which creates EMF files
http://sourceforge.net/projects/printmirror/
SPL Viewer (Tool)
Viewer for SPL files. Freeware. English/German
http://www.lvbprint.de/html/splviewer.htm
EMF Printer(Driver)
Virtual printer for creation of EMFs and more! http://emfprinter.sourceforge.net
EMFexplorer (Tool)
A program to manipulate Windows Metafile data. This open-source software displays, scales, rotates documents, and, using GDI+, optionally enhances their quality.
http://frazmitic.free.fr/emfexplorer/
0 0
- SPL - Microsoft® Windows Spool File Format
- Microsoft Windows Bitmap File Format Summary
- MICROSOFT EXCEL FILE FORMAT
- Microsoft Office File Format Documents
- Windows Prefetch File Format
- Excel文件格式(MICROSOFT EXCEL FILE FORMAT)
- windows/linux file format transfer
- Force Windows spool file use jobid as its name
- Microsoft Portable Executable and Common Object File Format Specification
- file format
- File and Print Services for Microsoft® Windows® Clients (Samba)
- The BOOT.INI File of Microsoft® Windows™ NT/2000/XP/2003
- 最新溢出Windows Explorer URL File format overflow
- Visual Studio, Microsoft Portable Executable and Common Object File Format Specification
- Microsoft Office Word、Excel and PowerPoint 2007 file format compatible package
- Visual Studio, Microsoft Portable Executable and Common Object File Format Specification
- microsoft library (.lib) format
- spool
- FlipsMax(投掷硬币实验)
- 【POJ】2356 - Find a multiple(抽屉原理 & STL)
- 山东理工OJ 2072 删数问题
- [Android]仿支付宝自定义View密码框
- 分组 分页查询 (group by 和order by使用 )
- SPL - Microsoft® Windows Spool File Format
- input file文件上传
- 鞍点-week7-C语言习题集
- 如何在Android Studio中创建assets文件夹
- 七步从AngularJS菜鸟到专家(4和5):指令和表达式
- JAVA学习笔记--基本事件
- MFC类别型录网之对象动态创建
- Vacations(动态规划加贪心)
- 102. Binary Tree Level Order Traversal