Question

Windows Picture and Fax Viewer - Photo Printing Wizard - Templates

Asked by: BillDL

Hello Experts

The Windows Picture and Fax Viewer runs from the "Preview" or "Open" command for image file types:
rundll32.exe C:\WINDOWS\system32\shimgvw.dll,ImageView_Fullscreen %1

When I "Preview" an image in the Windows XP (SP3 with IE7) Windows Picture and Fax Viewer, the "Print" option open the "Photo Printing Wizard".  I am pretty sure this function is built-in rather than being from one of the XP PowerToys.

Although these processes are crearly tied in with Windows Explorer, The UI elements (or most of them) for the "Photo Printing Wizard" seems to be loaded from the resources in:
%SystemRoot%\system32\photowiz.dll

Those who have used this wizard will be aware that on the 4th screen of the dialog, ie. after you are welcomed, select your image(s), and select the printer, you are offered various "templates" as "available layouts":

Full Page Fax Print
Full Page Photo Print
Contact Sheet
20 x 25cm Cutout Print
13 x 18cm Cutout Prints
10 x 15cm Cutout Prints
10 x 15cm Album Prints
9 x 13cm Cutout Prints
Wallet Prints

These templates are completely independent of any other options offered by the default printer or other virtual printers, and are loaded from the internal resources of %SystemRoot%\system32\photowiz.dll.  The bitmap images that show the various layout options are stored as separate "THUMB?x?.GIF" resources, and the actual layout used to render the prints seems to be from the resource named "TMPLDATA.XML" (template data).

I have copied out the XML code from that resource by viewing the contents of the *.DLL in "Resource Hacker", and pasted the code into the Code Snippet.

I am pretty dumb at *.XML coding.  I can understand some of it, but tend to get lost.  I can see, however, that each template layout is specified using x and y coordinates, and also width and height parameters.

I was curious to see if I could add a new layout of 6 equally sized images to the page, as this handy one isn't given as an option.  I can easily modify any of the XML code within Resource Hacker and then recompile the code, and also create a new *.gif image to try and import into the resources.  I am well used to experimenting in this way, but I don't know enough about XML to figure it out.

Looking at the XML code, does this seem possible to any experts well acquainted with XML?

Thank you

<?xml version= "1.0"?>
 
<photo-print-wizard-templates version="1.0"
                              guid="{352A15C4-1D19-4e93-AF92-D939C2812491}">
 
    <template-definitions measurements="locale-independent">
 
        <template-def guid="{2792e30d-ea79-4b3b-8ac1-4da07ae1e584}"
 
            group="Full Page Prints"
            title="Full page fax print:"
            description="centered and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="no"
            can-rotate="yes">
 
            <!-- _locID@group="Full Page Prints"-->
            <!-- _locID@title="Full page fax print:"-->
            <!-- _locID@description="centered and rotated to fit"-->
 
            <preview-image res-name="ThumbFullpage.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="-1"      y="-1"      w="-1"      h="-1"/>
                <image-def      x="-1"      y="-1"      w="-1"      h="-1"/>
            </layout>
 
        </template-def>
 
        <template-def guid="{0f275550-0a03-49ce-a07e-e3dae9d5d936}"
 
            group="Full Page Prints"
            title="Full page photo print:"
            description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">
 
            <!-- _locID@group="Full Page Prints"-->
            <!-- _locID@title="Full page photo print:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
            <preview-image res-name="ThumbFullpage.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="-1"      y="-1"      w="-1"      h="-1"/>
                <image-def      x="-1"      y="-1"      w="-1"      h="-1"/>
            </layout>
 
        </template-def>
 
        <template-def guid="{DE1FEF65-B516-4904-97F8-DE4383A21640}"
 
            group="Contact Sheet Prints"
            title="Contact sheet:"
            description="35 prints per page"
            repeat-photos="no"
            use-thumbnails-for-printing="yes"
            print-filename="yes"
            can-crop="no"
            can-rotate="no">
 
            <!-- _locID@group="Contact Sheet Prints"-->
            <!-- _locID@title="Contact sheet:"-->
            <!-- _locID@description="40 prints per page"-->
 
            <preview-image res-name="ThumbContact.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="80000"   h="99995"/>
 
                <image-def      x="0"       y="0"       w="15000"   h="10000"/>
                <image-def      x="16250"   y="0"       w="15000"   h="10000"/>
                <image-def      x="32500"   y="0"       w="15000"   h="10000"/>
                <image-def      x="48750"   y="0"       w="15000"   h="10000"/>
                <image-def      x="65000"   y="0"       w="15000"   h="10000"/>
 
                <image-def      x="0"       y="14285"   w="15000"   h="10000"/>
                <image-def      x="16250"   y="14285"   w="15000"   h="10000"/>
                <image-def      x="32500"   y="14285"   w="15000"   h="10000"/>
                <image-def      x="48750"   y="14285"   w="15000"   h="10000"/>
                <image-def      x="65000"   y="14285"   w="15000"   h="10000"/>
 
                <image-def      x="0"       y="28570"   w="15000"   h="10000"/>
                <image-def      x="16250"   y="28570"   w="15000"   h="10000"/>
                <image-def      x="32500"   y="28570"   w="15000"   h="10000"/>
                <image-def      x="48750"   y="28570"   w="15000"   h="10000"/>
                <image-def      x="65000"   y="28570"   w="15000"   h="10000"/>
 
                <image-def      x="0"       y="42855"   w="15000"   h="10000"/>
                <image-def      x="16250"   y="42855"   w="15000"   h="10000"/>
                <image-def      x="32500"   y="42855"   w="15000"   h="10000"/>
                <image-def      x="48750"   y="42855"   w="15000"   h="10000"/>
                <image-def      x="65000"   y="42855"   w="15000"   h="10000"/>
 
                <image-def      x="0"       y="57140"   w="15000"   h="10000"/>
                <image-def      x="16250"   y="57140"   w="15000"   h="10000"/>
                <image-def      x="32500"   y="57140"   w="15000"   h="10000"/>
                <image-def      x="48750"   y="57140"   w="15000"   h="10000"/>
                <image-def      x="65000"   y="57140"   w="15000"   h="10000"/>
 
                <image-def      x="0"       y="71425"   w="15000"   h="10000"/>
                <image-def      x="16250"   y="71425"   w="15000"   h="10000"/>
                <image-def      x="32500"   y="71425"   w="15000"   h="10000"/>
                <image-def      x="48750"   y="71425"   w="15000"   h="10000"/>
                <image-def      x="65000"   y="71425"   w="15000"   h="10000"/>
 
                <image-def      x="0"       y="85710"   w="15000"   h="10000"/>
                <image-def      x="16250"   y="85710"   w="15000"   h="10000"/>
                <image-def      x="32500"   y="85710"   w="15000"   h="10000"/>
                <image-def      x="48750"   y="85710"   w="15000"   h="10000"/>
                <image-def      x="65000"   y="85710"   w="15000"   h="10000"/>
            </layout>
 
        </template-def>
 
 
    </template-definitions>
 
    <template-definitions measurements="cm">
 
        <template-def guid="{95701327-10B5-4c05-A4B7-EAA332CFCAF5}"
 
            group="20 x 25 cm. Prints"
            title="20 x 25 cm. cutout print:"
            description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">
 
            <!-- _locID@group="20 x 25 cm. Prints"-->
            <!-- _locID@title="20 x 25 cm. cutout prints:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
            <preview-image res-name="Thumb8x10.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="78740"   h="98425"/>
                <image-def      x="0"       y="0"       w="78740"   h="98425"/>
            </layout>
        </template-def>
 
        <template-def guid="{45f74fe5-de0a-4df0-9420-18aa40033816}"
 
            group="13 x 18 cm. Prints"
            title="13 x 18 cm. cutout prints:"
            description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">
 
            <!-- _locID@group="13 x 18 cm. Prints"-->
            <!-- _locID@title="13 x 18 cm. cutout prints:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
            <preview-image res-name="Thumb5x7.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="70866"   h="104330"/>
                <image-def      x="0"       y="0"       w="70866"   h="51181"/>
                <image-def      x="0"       y="53149"   w="70866"   h="51181"/>
            </layout>
 
        </template-def>
 
        <template-def guid="{81cb249b-e915-49ef-97b4-385e36a775eb}"
 
            group="10 x 15 cm. Prints"
            title="10 x 15 cm. cutout prints:"
            description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">
 
            <!-- _locID@group="10 x 15 cm. Prints"-->
            <!-- _locID@title="10 x 15 cm. cutout prints:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
            <preview-image res-name="Thumb4x6.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="79725"   h="98425"/>
                <image-def      x="0"       y="0"       w="39370"   h="59055"/>
                <image-def      x="40355"   y="0"       w="39370"   h="59055"/>
                <image-def      x="10335"   y="62992"   w="59055"   h="39370"/>
            </layout>
 
        </template-def>
 
        <template-def guid="{c70660e8-7666-44f9-8813-b356cc76e6f3}"
 
            group="9 x 13 cm. Prints"
            title="9 x 13 cm. cutout prints:"
            description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">
 
            <!-- _locID@group="9 x 13 cm. Prints"-->
            <!-- _locID@title="9 x 13 cm. cutout prints:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
            <preview-image res-name="Thumb3x5.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="72834"   h="104330"/>
                <image-def      x="0"       y="0"       w="35433"   h="51181"/>
                <image-def      x="37401"   y="0"       w="35433"   h="51181"/>
                <image-def      x="0"       y="53149"   w="35433"   h="51181"/>
                <image-def      x="37401"   y="53149"   w="35433"   h="51181"/>
            </layout>
 
        </template-def>
 
 
        <template-def guid="{1c6bce6a-236a-4ce9-b5ae-fbc097c7835b}"
 
            group="10 x 15 cm. Prints"
            title="10 x 15 cm. album prints:"
            description="cropped to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="no">
 
            <!-- _locID@group="10 x 15 cm. Prints"-->
            <!-- _locID@title="10 x 15 cm. album prints:"-->
            <!-- _locID@description="cropped to fit"-->
 
            <preview-image res-name="Thumb4x6album.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="59055"   h="86614"/>
                <image-def      x="0"       y="0"       w="59055"   h="39370"/>
                <image-def      x="0"       y="47244"   w="59055"   h="39370"/>
            </layout>
 
        </template-def>
 
        <template-def guid="{13c1f987-3af0-46a1-8378-505a8fdab269}"
 
            group="Wallet Prints"
            title="Wallet prints:"
            description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">
 
            <!-- _locID@group="Wallet Prints"-->
            <!-- _locID@title="Wallet prints:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
            <preview-image res-name="thumbwallet.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="74408"   h="98030"/>
                <image-def      x="0"       y="0"       w="23622"   h="31496"/>
                <image-def      x="25393"   y="0"       w="23622"   h="31496"/>
                <image-def      x="50786"   y="0"       w="23622"   h="31496"/>
                <image-def      x="0"       y="33267"   w="23622"   h="31496"/>
                <image-def      x="25393"   y="33267"   w="23622"   h="31496"/>
                <image-def      x="50786"   y="33267"   w="23622"   h="31496"/>
                <image-def      x="0"       y="66534"   w="23622"   h="31496"/>
                <image-def      x="25393"   y="66534"   w="23622"   h="31496"/>
                <image-def      x="50786"   y="66534"   w="23622"   h="31496"/>
            </layout>
 
        </template-def>
 
 
    </template-definitions>
 
    <template-definitions measurements="in">
 
        <template-def guid="{7A1B143B-4E84-428c-AB41-216FE98DEFB0}"
 
            group="8 x 10 in. Prints"
            title="8 x 10 in. cutout print:"
            description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">
 
            <!-- _locID@group="8 x 10 in. Prints"-->
            <!-- _locID@title="8 x 10 in. cutout print:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
            <preview-image res-name="Thumb8x10.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="80000"   h="100000"/>
                <image-def      x="0"       y="0"       w="80000"   h="100000"/>
            </layout>
 
        </template-def>
 
        <template-def guid="{803bf51f-afc2-4b52-8fb9-835f79fdab65}"
 
            group="5 x 7 in. Prints"
            title="5 x 7 in. cutout prints:"
            description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">
 
            <!-- _locID@group="5 x 7 in. Prints"-->
            <!-- _locID@title="5 x 7 in. cutout prints:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
            <preview-image res-name="Thumb5x7.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="70000"   h="102500"/>
                <image-def      x="0"       y="0"       w="70000"   h="50000"/>
                <image-def      x="0"       y="52500"   w="70000"   h="50000"/>
            </layout>
 
        </template-def>
 
 
 
        <template-def guid="{63d628ff-588d-455b-951e-1694b4952574}"
 
            group="4 x 6 in. Prints"
            title="4 x 6 in. cutout prints:"
            description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">
 
            <!-- _locID@group="4 x 6 in. Prints"-->
            <!-- _locID@title="4 x 6 in. cutout prints:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
            <preview-image res-name="Thumb4x6.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="80500"   h="103750"/>
                <image-def      x="0"       y="0"       w="40000"   h="60000"/>
                <image-def      x="40500"   y="0"       w="40000"   h="60000"/>
                <image-def      x="10500"   y="63750"   w="60000"   h="40000"/>
            </layout>
 
        </template-def>
 
        <template-def guid="{5D7FFBBE-AD55-4c87-B74D-F89570A89732}"
 
            group="3.5 x 5 in. Prints"
            title="3.5 x 5 in. cutout prints:"
            description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">
 
            <!-- _locID@group="3.5 x 5 in. Prints"-->
            <!-- _locID@title="3.5 x 5 in. cutout prints:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
            <preview-image res-name="Thumb3x5.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="72500"   h="102500"/>
                <image-def      x="0"       y="0"       w="35000"   h="50000"/>
                <image-def      x="37500"   y="0"       w="35000"   h="50000"/>
                <image-def      x="0"       y="52500"   w="35000"   h="50000"/>
                <image-def      x="37500"   y="52500"   w="35000"   h="50000"/>
            </layout>
 
        </template-def>
 
        <template-def guid="{DE4A3762-F69D-43f3-B2EF-0723B934458F}"
 
            group="4 x 6 in. Prints"
            title="4 x 6 in. album prints:"
            description="cropped to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="no">
 
            <!-- _locID@group="4 x 6 in. Prints"-->
            <!-- _locID@title="4 x 6 in. album prints:"-->
            <!-- _locID@description="cropped to fit"-->
 
            <preview-image res-name="Thumb4x6album.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="60000"   h="85000"/>
                <image-def      x="0"       y="0"       w="60000"   h="40000"/>
                <image-def      x="0"       y="45000"   w="60000"   h="40000"/>
            </layout>
 
        </template-def>
 
        <template-def guid="{ac4fb6e0-81a0-47f7-a633-5c9dc987deeb}"
 
            group="Wallet Prints"
            title="Wallet prints:"
            description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">
 
            <!-- _locID@group="Wallet Prints"-->
            <!-- _locID@title="Wallet prints:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
            <preview-image res-name="thumbwallet.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="77500"   h="100000"/>
                <image-def      x="0"       y="0"       w="25000"   h="32500"/>
                <image-def      x="26250"   y="0"       w="25000"   h="32500"/>
                <image-def      x="52500"   y="0"       w="25000"   h="32500"/>
                <image-def      x="0"       y="33750"   w="25000"   h="32500"/>
                <image-def      x="26250"   y="33750"   w="25000"   h="32500"/>
                <image-def      x="52500"   y="33750"   w="25000"   h="32500"/>
                <image-def      x="0"       y="67500"   w="25000"   h="32500"/>
                <image-def      x="26250"   y="67500"   w="25000"   h="32500"/>
                <image-def      x="52500"   y="67500"   w="25000"   h="32500"/>
            </layout>
 
        </template-def>
 
 
    </template-definitions>
 
</photo-print-wizard-templates>

                                  
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
343:
344:
345:
346:
347:
348:
349:
350:
351:
352:
353:
354:
355:
356:
357:
358:
359:
360:
361:
362:
363:
364:
365:
366:
367:
368:
369:
370:
371:
372:
373:
374:
375:
376:
377:
378:
379:
380:
381:
382:
383:
384:
385:
386:
387:
388:
389:
390:
391:
392:
393:
394:
395:
396:
397:
398:
399:
400:
401:
402:
403:
404:
405:
406:
407:
408:
409:
410:
411:
412:
413:
414:
415:
416:
417:
418:
419:
420:
421:
422:
423:
424:
425:
426:
427:
428:
429:
430:
431:
432:
433:
434:
435:
436:
437:
438:
439:
440:
441:
442:
443:
444:
445:
446:
447:
448:
449:
450:
451:
452:
453:
454:

Select allOpen in new window

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-03-22 at 06:15:36ID24253314
Tags

XML

,

DLL Resources

,

Multi-Image Printing

Topics

Windows XP Operating System

,

Images & Photo Software

,

Extensible Markup Language (XML)

Participating Experts
1
Points
500
Comments
17

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Fax printer
    Unintentionally I removed the fax printer. How can I restore it?
  2. rundll32.exe
    Dear Experts, I have many problems with my computer. Before with Windows 95, 98 I just reloaded operating system and this fixed most troubles. Now, with Windows XP Home Edition evrything are more complicated. My machine is still working, but lucks everyday worse. My...
  3. rundll32.exe problem
    Hello, I have a problem when i shutdown my laptop, rundll32.exe is not closing, i have to close it manually.. Whats the use of this rundll.exe. How can achieve the problem. Also when i goto controlpanel/software for uninstallating any programs nothing displays there.. Is the...
  4. RUNDLL32.EXE
    After running HijackThis both rundll32.exe and RUNDLL32.EXE are active are they the same? If not which should be deleted?
  5. rundll32.exe
    when in Control Panel, win xp pro SP2, clicking "system" icon results in the following error message. c:\windows\system32\rundll32.exe application not found. Any ideas please

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: BillDLPosted on 2009-03-22 at 06:18:29ID: 23951400

Oh yes, and before you ask, yes I do have several other ways to do multi-page prints (Paint Shop Pro, an Epson program, etc).  This is just a challenge to see if I can keep it all in one place using what Windows XP has available.

 

by: BillDLPosted on 2009-03-22 at 06:39:07ID: 23951456

Here are examples of the proposed layout as the thumbnail Gifs that I would import into the DLL file.

  • New-Thumbs.jpg
    • 7 KB

    A representation of how the template would be shown in the dialog, (either one or the other).

    A representation of how the template would be shown in the dialog, (either one or the other).
 

by: sirbountyPosted on 2009-03-23 at 06:54:12ID: 23957616

Hey BillDL - the xml isn't that difficult to read, but to determine if what you're trying is possible, you'd simply have to 'try' it...
I wish I had the present environment to try and test this myself, but life has gotten too hectic as of late for me.
However, here's what I'm reading from the file, along with some possibly attempts for you...

Taking one section, the Wallet prints definition, I first see that it has its own unique guid.  If that's merely a reference for the definition to be located in the configuration, or a pointer to some other storage location for further description (i.e. the registry), I don't know.
I did a quick scan of my XP device's registry, though this one is still xp2 and ie6, and didn't come up with a registry reference.

So, if it's simply an internal reference, I'd say you could try creating your own unique guid and proceed from there.
       <template-def guid="{ac4fb6e0-81a0-47f7-a633-5c9dc987deeb}"

The next several attributes are fairly self-explanatory (group, title, description, etc).

            group="Wallet Prints"
            title="Wallet prints:"
            description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">

This next section also leaves me a bit confused - perhaps someone else has better insight, but it appears to be another external reference of some sort, but may also be simply configurable references...
            <!-- _locID@group="Wallet Prints"-->
            <!-- _locID@title="Wallet prints:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
Next, I'd suppose you'd need to apply a thumbnail image to point to here, replacing the gif filename with yours above perhaps...
            <preview-image res-name="thumbwallet.gif" res-type="HTML" res-module="photowiz.dll"/>
 

The 'meat' of the definition is in the layout group:
            <layout>

You have the main area defined first:
                <imageable-area x="0"       y="0"       w="77500"   h="100000"/>

Then you'll see three sub-groups: the first starting at pos (0,0) with the width/height shown, the next starts at vertical position 26250, the final at 52500
                <image-def      x="0"       y="0"       w="25000"   h="32500"/>
                <image-def      x="26250"   y="0"       w="25000"   h="32500"/>
                <image-def      x="52500"   y="0"       w="25000"   h="32500"/>

The next row would contain the same three columns, but starting at horizontal position 33750:
                <image-def      x="0"       y="33750"   w="25000"   h="32500"/>
                <image-def      x="26250"   y="33750"   w="25000"   h="32500"/>
                <image-def      x="52500"   y="33750"   w="25000"   h="32500"/>

and then finally at horizontal 67500:
                <image-def      x="0"       y="67500"   w="25000"   h="32500"/>
                <image-def      x="26250"   y="67500"   w="25000"   h="32500"/>
                <image-def      x="52500"   y="67500"   w="25000"   h="32500"/>


So, the attempt that I would try would be something like the following, hopefully providing what you're looking for.
If not - I had fun trying. :^)  Good luck!

        <template-def guid="{634b3c81-47e0-4416-acc9-56fd6d64106c}"
 
            group="Custom layout"
            title="Custom layout:"
           description="cropped and rotated to fit"
            repeat-photos="no"
            use-thumbnails-for-printing="no"
            print-filename="no"
            can-crop="yes"
            can-rotate="yes">
 
            <!-- _locID@group="Custom layout"-->
            <!-- _locID@title="Custom layout:"-->
            <!-- _locID@description="cropped and rotated to fit"-->
 
            <preview-image res-name="billsThumb.gif" res-type="HTML" res-module="photowiz.dll"/>
 
            <layout>
                <imageable-area x="0"       y="0"       w="77500"   h="100000"/>
                <image-def      x="0"       y="0"       w="37500"   h="32500"/>
                <image-def      x="38750"   y="0"       w="37500"   h="32500"/>
                <image-def      x="0"       y="33750"   w="37500"   h="32500"/>
                <image-def      x="38750"   y="33750"   w="37500"   h="32500"/>
                <image-def      x="0"       y="67500"   w="37500"   h="32500"/>
                <image-def      x="38750"   y="67500"   w="37500"   h="32500"/>
            </layout>
 
        </template-def>

                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:

Select allOpen in new window

 

by: BillDLPosted on 2009-03-23 at 08:18:06ID: 23958583

Thank you sirbounty

Yes, I had considered the unique GUIDs and searched the registry for them.  It would appear to only be an internal thing, because none are stored in the registry.  I also checked for temporary registry values and temporary files created at runtime, but can't find any external references to the GUIDs (with or without the hyphens).  Obviously there may be implications if other program files are hard-coded with the GUIDs that are in the XML code, and may not recognise one I may try to add myself.  

I was also puzzled by the _locID@group=" lines, and assumed that because they seemed to be enclosed in <!--  "--> like JavaScript style, that they were programmers' comments.

You have explained the way the rows and columns are defined very well and it falls right into place with a more visual representation as I look at it now, thanks to your breakdown.

One of the reasons I was trying to create a different layout was to try and avoid the cropping of images.  That's the annoyance of the "Photo Printing Wizard" with some layouts.  I've tested the printing using a virtual pdf printer and it hacks off significant slices of some images, depending on the layout.

For the full page single image prints, there are two options.  One centres and only rotates to fit the page orientation, but the other crops and rotates to fit the page orientation.  Fair enough, just use the one that doesn't crop anything, but for the multi-image page layouts (except the contact sheet), they all crop images.

That's obviously dictated by the instruction:
can-crop="yes"
and this occurs (obviously) for those layout types with the description=" " lines: "cropped to fit" and "cropped and rotated to fit".

I would hope to get a layout that doesn't crop anything, but I suppose that experimentation with images created using standard digital camera image sizes will obviously yield the best layout parameters if I can get this working.  

In the end it looks like the program just isn't capable of RESIZING images to fit.  The Contact Sheet layout is the only one with the instruction:
use-thumbnails-for-printing="yes"
All others say "no".  It's probably extracting the actal thumbnail in the image metadata to use for the purpose and it doesn't matter about resizing degradation because the printed thumbnails are tiny anyway.

I have noticed one annoyance with this Photo Printing Wizard.  When choosing the "Contact Sheet: 35 Prints per page" layout, you would expect to be able to change the "number of times to use each picture" to "35" and have it display the preview at the right to reflect this after a short delay.  Not so.  That field can only accept "15" as the maximum number.  It will only scroll up to 15 using the clickable up arrow, and if you directly enter and overwrite 15 with 35, it reverts back to 15 after a short delay.  Pressing Enter to try and force the value in the field (like MS Word font sizes below 8 or MS Word custom zoom size) just operates as an OK or Next command and prints.  The Print Preview panel at the right never shows more than 15 thumbnail images, and the printout matches the preview.  Very annoying.

This is pretty stange, given that the definitions in the dll's internal XML page clearly show 5 columns (0, 16250, 32500, 48750, 65000) x 7 rows (0, 14285, 28570, 42855, 57140, 71425, 85710) = 35 for the "Contact Sheet Prints" layout template.

Going back to the <!-- _locID@description="whatever"--> lines, the one for the Contact Sheet Prints says:
<!-- _locID@description="40 prints per page"-->
From that, I assume that these lines are just programmers' comments and that 40 per page was one of the originally tested layouts and the comment wasn't changed after they decided on 35 instead.

Anyway, I am going to do some experimentation after I figure out how to stop the original C:\WINDOWS\system32\dllcache\photowiz.dll from replacing the one I will modify, but without disabling Windows File Protection and messing up the dllcache.  I'm not sure if it would work if I just moved the file out of the dllcache folder somewhere, and then later copied the modified back there.  I think a list of files is kept in the registry or one of the SFC-related files.  We'll see.

Thanks again for your insight.  I'll leave this open for a few days or a week until I get the chance to mess with it.

 

by: sirbountyPosted on 2009-03-23 at 08:25:40ID: 23958671

You're probably right now that I look at those lines - they do appear as comments.
No problem if you want this one deleted - after I read through it, I was intrigued by it and thought I'd spend a few moments trying to dissect it.  Again, it's not something I've ever done, and would have little experience on - so most of my comments are just my own interpretations/theories.

Best of luck to you - have fun! :^)

 

by: BillDLPosted on 2009-03-23 at 08:59:19ID: 23959122

Aaaah, but your "interpretations and theories" are invaluable, and thanks for your time dissecting it.

Out of interest, what did you use to inspect it?  Visual Studio?  Or did you just use the Resource Hacker program I used?

I was intrigued like you when I discovered the guts of that particular DLL and wondered if it was possible to improve it.  I have inspected, modified, and recompiled a lot of Windows dll, exe, cpl, and ocx files over the years with that handy little resource hacker tool, and learned quite a few things in the process.

For example, I was ticked off at the fact that Windows XP's MSConfig dialog isn't wide enough to make it useful in the Boot.ini and Startup tabs, so I modified and widened it.

I keep meaning to install Visual Studio Express and try to learn something useful from scratch, but I never seem to have the time.

 

by: sirbountyPosted on 2009-03-23 at 09:12:51ID: 23959291

No, I simply took your output above and scanned through it on my own.
I've not dissected any OS DLLs myself, and only created/compiled one or two of my own, but that sounds like a great app - the Resource Hacker. . .

Been using VS for maybe 2-3 years now - you'll find lots of fun there, trust me!


 

by: BillDLPosted on 2009-03-23 at 09:21:50ID: 23959403

For anyone interested in the Windows File Protection issue.
<disclaimer>
Given that this DLL is not one that is crucial to whether Windows will boot and run normally, I determined that it wasn't too risky to mess with it.  Any other Windows System File would obviously have to be evaluated for importance.
</disclaimer>

Move C:\Windows\system32\dllcache\photowiz.dll from that folder to a non-system folder.  It is compressed, and may show as a different colour.

Modify the C:\Windows\System32\photowiz.dll file in situ and save.

You are informed that an important protected system file has been screwed with and needs to be restored, but seeing as it can't find it in the "dlcache" folder, it will prompt for the Windows setp CD.  Click the Cancel button and it will ask you for a final confirmation about whether you wish to keep the potentially "unsafe" file version.  Say yes.

Make a copy of the modified photowiz.dll file, Right-Click on it and choose "Properties".  Under the "General" tab, click the "Advanced" button.  Check the box entitled "Compress contents to ave disc space".  Click "OK", then click "Apply" in the file properties dialog.  Click OK to close the properties dialog.

Move that modified and compressed file to the C:\Windows\system32\dllcache folder.

If C:\Windows\System32\photowiz.dll becomes corrupt, is deleted, or is modified from now on, it will (or should) be replaced by the backed-up modified version.

 

by: BillDLPosted on 2009-03-28 at 19:54:25ID: 24011247

Hi sirbounty

Well, i's working fine with the new layout template.  It was trial and error and looks as though the new definition tags have to be placed in the XML file in alphabetic order to match the name of the GIF resource.  Because my GIF was named "CUSTOM.GIF", it came at the top of the resources in the Resource Hacker as can be seen by the first screenshot.

To get it to work, I needed to add the new layout definitions block as the very first set of definitions in the XML File (Attached as a *.txt file).

I have attached two screenshots:

1. Shows the new layout template in use when using the "Photo Printing Wizard" from the Windows Picture and Fax Viewer
2. Shows the "print" rendered using my virtual PDF Printer and opened in Foxit PDF Reader using the layout as printed (ie. not rotated).

It's clear that it does not crop the images, it only resizes to fit.  The original image was a 1600 x 1200 *.jpg image, but I have tested also using 2400 x 1200 images, 1024 x 768, 800 x 600, etc, and none are cropped.  This is because I modified the XML resource where it defined the following:

can-crop="yes"
can-rotate="yes"

to

can-crop="no"
can-rotate="yes"

You will see from my example image in my original question showing two examples of GIF "layout" thumbnails that I created one with 6 vertically orientated images and the other showing them horizontally.  Your modification created the template for horizontally orientated images, so I used the GIF to match the printed layout.

My next attempt will be to try and create a new set of definitions so I have a template to match the 6 vertically orientated images in the other GIF file.  Maths was not, and still isn't, my strong point.  In fact I'm really pretty bad at working out this type of "array" structure and visualising it, but I'll have a go at it.

So, thanks for helping with a proof of concept and a working and useful modification.  You'll see from my last screenshot that I quite like modifying programs.  Look at the arrow ;-)

Thank you
Bill

 

by: BillDLPosted on 2009-03-28 at 19:56:23ID: 31561072

Excellent answer.  It gave me all I needed to know so I could understand the XML tags and how they defined the data.

 

by: BillDLPosted on 2009-03-28 at 20:00:17ID: 24011268

Oh by the way, it would seem that the GUIDs are not related to anything outside of the program.  I did search regedit and "all files containing text" for the new GUID you gave, and for the other ones already in the XML file.  None were found, so I was confident that there would be no conflicts, but I don't think it would matter.  Better to try and avoid duplicated usage though, just in case.

 

by: BillDLPosted on 2009-03-28 at 20:02:35ID: 24011276

You're wondering if that image is of me, aren't you?
It's my Mother and Father :-)

 

by: sirbountyPosted on 2009-03-28 at 20:06:13ID: 24011286

Nah, I've seen your photo, so I knew it wasn't you. :^)
The GUID above was generated from .Net (System.Guid.NewGuid.ToString()), so that you know it wasn't a haphazardly thrown together one you might not be able to use...
Great work here - you're more persistent than I would have been, but I suppose necessity is the mother of all inventions, eh?   Thanx for the grade - glad I could help (what little I think I did!).

 

by: BillDLPosted on 2009-03-28 at 20:42:12ID: 24011353

Hmmm.  That's an old photo now, when I had hair and a 70's porn-star moustache, if it's the one Pete Long has in his "rogues gallery" along with your own mugshot.  Maybe it's time to update my photo and give you a fright.

You read my mind about GUIDs.  I was just sitting thinking about whether there is some worldwide database of previously used GUIDs that programmers look up.  Every time I look at the Class Identifiers (CLSID) keys and values while checking out things in Regedit or in *.reg files, I wonder why program setup packages don't sometimes overwrite existing values or keys in the registry.

I don't have Visual Studio .NET installed, so I can't test the generation of new GUIDs.  Given that it appears to be a featue new to .NET it won't be available from a VB Script, and I'm sure the presence of the .NET Framework doesn't qualify as a library souce.

 

by: sirbountyPosted on 2009-03-28 at 20:48:35ID: 24011365

Yes, I think mine is quite old as well - those were the days, eh (EE-related comment...we've come a long way).
As for your GUID needs...easy enough with vbscript - name it
CreateGuid.vbs

Enjoy!

Dim objTL : Set objTL = CreateObject("Scriptlet.TypeLib")
Wscript.Echo "Your magically generated GUID: " &  objTL.Guid

                                              
1:
2:

Select allOpen in new window

 

by: BillDLPosted on 2009-03-28 at 23:52:27ID: 24011672

Hey, I am enjoying.  Quite amazing really.  I should have studied all this stuff a long while ago.  Many thanks for that additional information.  I'm sure I'll find a use for it some day soon, but it's very handy to keep a note of for informational purposes even if not.

If you want some interesting reading, here's some real meaty stuff to digest:

http://en.wikipedia.org/wiki/Globally_Unique_Identifier
http://en.wikipedia.org/wiki/UUID
http://blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx

Happy reading, and see you in my next question which will be:

(a) how to convert time stamps in the registry to normal time
or
(b) how in a batch file to convert a comma-separated string, that is a file size in Bytes, into KB or MB

Actually (b) is a live one under my consideration right now at http://www.experts-exchange.com/Q_24260460.html if you want some points there by rewriting an economical streamlined batch file or adding a conversion routine to my clunky old batch file.

Cheers
Bill



 

by: sirbountyPosted on 2009-03-30 at 07:42:17ID: 24019413

I gave up, for the most part, trying to pull blood from a stone using batch files. It used to be fun, and I know for some of the site's batch experts it still is.  But once you learn how to do things in vbscript/wsh/wmi, etc, it's almost comical to think I wasted so much brainpower on batch file conversions..
And we've got enough of those experts still hanging around that when I do see one that interests me, I don't even try because I know it'll take much more testing for me to formulate a working function than those that still eat and breathe batch scripts. :^)

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...