------------------------------------------------------------
[BUG/PRB.] VFP 9.0 FIX - THE MODERN PRINT DIALOG
January 2026
------------------------------------------------------------
CCB
1. BUG:
In vfp8 (and vfp6, vfp7), it calls the PrintDlgA Windows API to display the Legacy Print Dialog.
Please refer to the picture printdialog-vfp8.png:
In vfp9, it calls the PrintDlgExA Windows API to display the Legacy Print Dialog on early Windows XP,
Windows Vista, Windows 7, Windows 8 and Windows 8.1, Windows 10 and Windows 11 21H2.
Please refer to the picture printdialog-vfp9.png:
In vfp9, it calls the PrintDlgExA Windows API to display the Modern Print Dialog on Windows 11 22H2 or later.
Please refer to the picture printdialog-win11.png:
2. CAUSE:
There are some BUGs in the following code.
3. RESOLUTION:
We can write some code to fix the BUG.
Fun4925d4 :: ; proc near
push ebp ;0x004925d4 : 55
lea ebp , dword ptr [ esp + 0FFFFFD50h ] ;0x004925d5 : 8dac2450fdffff
sub esp , 0368h ;0x004925dc : 81ec68030000
mov eax , dword ptr [ Data937090 ] ;0x004925e2 : a190709300
mov dword ptr [ ebp + 02ACh ] , eax ;0x004925e7 : 8985ac020000
mov eax , dword ptr [ ebp + 02B8h ] ;0x004925ed : 8b85b8020000
push ebx ;0x004925f3 : 53
push esi ;0x004925f4 : 56
xor esi , esi ;0x004925f5 : 33f6
mov dword ptr [ ebp + 104 ] , eax ;0x004925f7 : 894568
mov dword ptr [ ebp + 124 ] , edx ;0x004925fa : 89557c
push edi ;0x004925fd : 57
lea edx , dword ptr [ ebp + 100 ] ;0x004925fe : 8d5564
lea eax , dword ptr [ ebp + 0FFFFFF48h ] ;0x00492601 : 8d8548ffffff
mov dword ptr [ ebp - 16 ] , ecx ;0x00492607 : 894df0
mov dword ptr [ ebp + 108 ] , esi ;0x0049260a : 89756c
mov dword ptr [ ebp + 120 ] , esi ;0x0049260d : 897578
mov dword ptr [ ebp + 112 ] , 01h ;0x00492610 : c7457001000000
mov dword ptr [ ebp - 8 ] , esi ;0x00492617 : 8975f8
mov dword ptr [ ebp + 080h ] , esi ;0x0049261a : 89b580000000
call Fun42c27f ;0x00492620 : e85a9cf9ff
push esi ;0x00492625 : 56
push eax ;0x00492626 : 50
call Fun42c2be ;0x00492627 : e8929cf9ff
cmp eax , esi ;0x0049262c : 3bc6
pop ecx ;0x0049262e : 59
pop ecx ;0x0049262f : 59
jne Label49263c ;0x00492630 : 750a
xor eax , eax ;0x00492632 : 33c0
call Fun492afb ;0x00492634 : e8c2040000
mov dword ptr [ ebp - 8 ] , eax ;0x00492639 : 8945f8
Label49263c ::
lea eax , dword ptr [ ebp + 100 ] ;0x0049263c : 8d4564
push eax ;0x0049263f : 50
lea eax , dword ptr [ ebp + 0FFFFFF48h ] ;0x00492640 : 8d8548ffffff
call Fun42d200 ;0x00492646 : e8b5abf9ff
mov eax , dword ptr [ ebp - 8 ] ;0x0049264b : 8b45f8
cmp eax , esi ;0x0049264e : 3bc6
je Label5c8324 ;0x00492650 : 0f84ce5c1300
mov eax , dword ptr [eax] ;0x00492656 : 8b00
mov eax , dword ptr [eax] ;0x00492658 : 8b00
Label49265a ::
mov dword ptr [ ebp + 88 ] , eax ;0x0049265a : 894558
mov al , byte ptr [ Data9428dc ] ;0x0049265d : a0dc289400
xor ebx , ebx ;0x00492662 : 33db
mov byte ptr [ ebp + 119 ] , al ;0x00492664 : 884577
call Fun551e94 ;0x00492667 : e828f80b00
;
; -------------------------------------------------
; VFP 9.0 FIX - THE MODERN PRINT DIALOG
; August 2024
; -------------------------------------------------
; CCB
;
; The Modern Print Dialog.
;
; 2024/8/14, by ccb
;
cmp dword ptr vfpa_sys9163_data,0FFFFFFFFh
je Label49268c
mov eax , dword ptr [ Data9392c0 ] ;0x0049266c : a1c0929300
and eax , 0FFFFFF00h ;0x00492671 : 2500ffffff
cmp eax , 0500h ;0x00492676 : 3d00050000
jl Label49268c ;0x0049267b : 7c0f
cmp dword ptr [ ebp + 88 ] , ebx ;0x0049267d : 395d58
je Label49268c ;0x00492680 : 740a
mov dword ptr [ ebp + 080h ] , 01h ;0x00492682 : c7858000000001000000
Label49268c ::
mov eax , dword ptr [ ebp + 104 ] ;0x0049268c : 8b4568
test eax , eax ;0x0049268f : 85c0
jne Label5c832f ;0x00492691 : 0f85985c1300
Label492697 ::
mov eax , dword ptr [ ebp + 124 ] ;0x00492697 : 8b457c
mov esi , dword ptr [ ebp - 16 ] ;0x0049269a : 8b75f0
mov dword ptr [ ebp + 92 ] , eax ;0x0049269d : 89455c
and dword ptr [ ebp + 92 ] , 080h ;0x004926a0 : 81655c80000000
mov dword ptr [ ebp + 96 ] , eax ;0x004926a7 : 894560
and dword ptr [ ebp + 96 ] , 010h ;0x004926aa : 83656010
Label4926ae ::
pushd 015h ;0x004926ae : 6a15
pop ecx ;0x004926b0 : 59
xor eax , eax ;0x004926b1 : 33c0
lea edi , dword ptr [ ebp - 104 ] ;0x004926b3 : 8d7d98
rep stosd ;0x004926b6 : f3ab
pushd 015h ;0x004926b8 : 6a15
pop ecx ;0x004926ba : 59
lea edi , dword ptr [ ebp + 4 ] ;0x004926bb : 8d7d04
rep stosd ;0x004926be : f3ab
mov eax , dword ptr [ ebp + 88 ] ;0x004926c0 : 8b4558
xor edx , edx ;0x004926c3 : 33d2
xor edi , edi ;0x004926c5 : 33ff
inc edx ;0x004926c7 : 42
cmp dword ptr [ ebp + 92 ] , edi ;0x004926c8 : 397d5c
mov dword ptr [ ebp + 8 ] , eax ;0x004926cb : 894508
mov dword ptr [ ebp - 100 ] , eax ;0x004926ce : 89459c
jne Label4926dc ;0x004926d1 : 7509
cmp dword ptr [ esi + 12 ] , edi ;0x004926d3 : 397e0c
jne Label5c833a ;0x004926d6 : 0f855e5c1300
Label4926dc ::
mov eax , dword ptr [ ebp + 080h ] ;0x004926dc : 8b8580000000
neg eax ;0x004926e2 : f7d8
sbb eax , eax ;0x004926e4 : 1bc0
and eax , 012h ;0x004926e6 : 83e012
add eax , 042h ;0x004926e9 : 83c042
cmp dword ptr [ ebp + 080h ] , edi ;0x004926ec : 39bd80000000
mov dword ptr [ ebp + 4 ] , eax ;0x004926f2 : 894504
mov dword ptr [ ebp + 16 ] , edi ;0x004926f5 : 897d10
mov dword ptr [ ebp + 12 ] , edi ;0x004926f8 : 897d0c
mov dword ptr [ ebp + 24 ] , 0400h ;0x004926fb : c7451800040000
je Label5c8348 ;0x00492702 : 0f84405c1300
mov eax , dword ptr [ ebp + 02BCh ] ;0x00492708 : 8b85bc020000
or dword ptr [ ebp + 80 ] , 0FFFFFFFFh ;0x0049270e : 834d50ff
mov dword ptr [ ebp - 4 ] , eax ;0x00492712 : 8945fc
mov eax , dword ptr [ ebp + 02C0h ] ;0x00492715 : 8b85c0020000
mov dword ptr [ ebp + 0 ] , eax ;0x0049271b : 894500
lea eax , dword ptr [ ebp - 4 ] ;0x0049271e : 8d45fc
mov dword ptr [ ebp + 48 ] , edx ;0x00492721 : 895530
mov dword ptr [ ebp + 52 ] , 0FFFEh ;0x00492724 : c74534feff0000
mov dword ptr [ ebp + 56 ] , edx ;0x0049272b : 895538
mov dword ptr [ ebp + 36 ] , edx ;0x0049272e : 895524
mov dword ptr [ ebp + 40 ] , edx ;0x00492731 : 895528
mov dword ptr [ ebp + 44 ] , eax ;0x00492734 : 89452c
Label492737 ::
call Fun492b5e ;0x00492737 : e822040000
cmp dword ptr [ ebp + 080h ] , edi ;0x0049273c : 39bd80000000
lea eax , dword ptr [ ebp + 4 ] ;0x00492742 : 8d4504
push eax ;0x00492745 : 50
je Label5c8365 ;0x00492746 : 0f84195c1300
call Fun492597 ;0x0049274c : e846feffff
mov ebx , eax ;0x00492751 : 8bd8
Label492753 ::
neg ebx ;0x00492753 : f7db
sbb ebx , ebx ;0x00492755 : 1bdb
inc ebx ;0x00492757 : 43
call Fun492c0d ;0x00492758 : e8b0040000
test ebx , ebx ;0x0049275d : 85db
mov eax , dword ptr [ ebp + 16 ] ;0x0049275f : 8b4510
mov dword ptr [ esi + 12 ] , eax ;0x00492762 : 89460c
mov eax , dword ptr [ ebp + 12 ] ;0x00492765 : 8b450c
mov dword ptr [ esi + 16 ] , eax ;0x00492768 : 894610
je Label5c8373 ;0x0049276b : 0f84025c1300
Label492771 ::
cmp dword ptr [ ebp + 96 ] , 00h ;0x00492771 : 837d6000
jne Label5c837f ;0x00492775 : 0f85045c1300
Label49277b ::
test byte ptr [ ebp + 125 ] , 02h ;0x0049277b : f6457d02
jne Label5c83fd ;0x0049277f : 0f85785c1300
Label492785 ::
mov eax , dword ptr [ ebp + 124 ] ;0x00492785 : 8b457c
and eax , 01h ;0x00492788 : 83e001
mov dword ptr [ ebp - 20 ] , eax ;0x0049278b : 8945ec
jne Label5c84af ;0x0049278e : 0f851b5d1300
test byte ptr [ ebp + 125 ] , 01h ;0x00492794 : f6457d01
jne Label5c84af ;0x00492798 : 0f85115d1300
Label49279e ::
movzx ebx ,byte ptr [ ebp + 119 ] ;0x0049279e : 0fb65d77
call Fun551e94 ;0x004927a2 : e8edf60b00
cmp dword ptr [ ebp + 120 ] , 00h ;0x004927a7 : 837d7800
jne Label5c86b6 ;0x004927ab : 0f85055f1300
Label4927b1 ::
mov ecx , dword ptr [ ebp + 02ACh ] ;0x004927b1 : 8b8dac020000
mov eax , dword ptr [ ebp + 108 ] ;0x004927b7 : 8b456c
call Fun42bf1d ;0x004927ba : e85e97f9ff
pop edi ;0x004927bf : 5f
pop esi ;0x004927c0 : 5e
pop ebx ;0x004927c1 : 5b
add ebp , 02B0h ;0x004927c2 : 81c5b0020000
leave ;0x004927c8 : c9
ret 0Ch ;0x004927c9 : c20c00
4. APPLIES TO:
VFP 6.0.8167.0
VFP 6.0.8961.0 (SP5)
VFP 7.0.0.9262
VFP 7.0.0.9465 (SP1)
VFP 8.0.0.2521
VFP 8.0.0.3117 (SP1)
VFP 9.0.0.2412
VFP 9.0.0.3504 (SP1)
VFP 9.0.0.4611 (SP2)
VFP 9.0.0.5015 (SP2)
VFP 9.0.0.5411 (SP2)
VFP 9.0.0.5721 (SP2)
VFP 9.0.0.5815 (SP2)
VFP 9.0.0.6303 (SP2)
VFP 9.0.0.6602 (SP2)
VFP 9.0.0.7423 (SP2)
The bug has been fixed in VFP Advanced.
5. REFERENCE WEBSITES:
1, baiyujia.com:
http://www.baiyujia.com
http://www.baiyujia.com/vfpdocuments/f_vfp9fix335.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix6.asp
http://www.baiyujia.com/vfpdocuments/f_vfp9fix205.asp
2, winhelponline.com:
https://www.winhelponline.com/blog/restore-legacy-print-dialog-windows-11/
3, foxite.com:
https://www.foxite.com/archives/windows-11-bug-in-print-dialog-0000498017.htm
https://www.foxite.com/archives/different-prompts-for-prniter-in-vfp6-9-0000501168.htm
https://www.foxite.com/archives/pdialog-class-and-copies-in-windows-11-0000497105.htm
6. OTHER:
For reference only, there is no guarantees.
Any questions or suggestions, please send me an email at ccb2000@163.com.
|