Struttura dei dati FORM_INFO_2
Lo spooler di stampa e il driver della stampante Unidrv sono migliorati in Windows Vista per offrire un supporto migliore dei moduli stampanti in ambienti multilingue. Lo spooler supporta stringhe MUI (Multi-Language User Interface) per i nomi visualizzati del modulo e la nuova struttura di dati FORM_INFO_2 per includere le informazioni aggiuntive necessarie per supportare le stringhe MUI.
La struttura dei dati FORM_INFO_1 è definita come segue.
typedef struct _FORM_INFO_1 {
DWORD Flags;
LPTSTR pName;
SIZEL Size;
RECTL ImageableArea;
} FORM_INFO_1, *PFORM_INFO_1;
In FORM_INFO_1, il membro pName è l'unico campo stringa, quindi è possibile usarlo per creare il nome della chiave usato dalle routine di ricerca interne per individuare i moduli nel database interno e anche come nome visualizzato visualizzato agli utenti finali.
La struttura FORM_INFO_2, definita nell'esempio di codice seguente, aggiunge campi aggiuntivi per fornire supporto MUI.
typedef struct _FORM_INFO_2 {
DWORD Flags;
LPTSTR pName;
SIZEL Size;
RECTL ImageableArea;
LPCSTR pKeyword;
DWORD StringType;
LPCTSTR pMuiDll;
DWORD dwResourceId;
LPCTSTR pDisplayName;
LANGID wLangId;
} FORM_INFO_2, *PFORM_INFO_2;
FORM_INFO_2 aggiunge il membro pKeyword per abilitare l'aggiunta di una parola chiave distinct, che può essere diversa dal nome visualizzato.
Questa struttura consente anche di aggiungere la DLL della risorsa e l'ID risorsa al database forms usando il membro pMuiDll e dwResourceId. Quando il membro StringType ha il valore di STRING_MUIDLL e i membri pMuiDll e dwResourceId contengono la DLL della risorsa e l'identificatore del nome visualizzato, la funzione AddForm nello spooler cerca il nome visualizzato nella DLL e lo registra internamente. Quando la funzione GetForm o EnumForms viene chiamata con un valore Level pari a 2, le informazioni restituite nella struttura FORM_INFO_2 conterranno il nome visualizzato a cui fa riferimento pDisplayName e l'ID lingua corrispondente in wLangID.
I driver della stampante che continuano a usare la struttura FORM_INFO_1 quando chiamano AddForm archivieranno solo le informazioni presenti in tale struttura nel database dei moduli. I membri della struttura FORM_INFO_2 non trovati nella struttura FORM_INFO_1 saranno NULL o 0 quando viene eseguita una query a GetForm o EnumForms che restituisce una struttura FORM_INFO_2.
Per altre informazioni sull'aggiunta di moduli stampanti e sull'uso delle strutture di dati FORM_INFO_1 e FORM_INFO_2, vedere la documentazione di Microsoft Windows SDK.