----------------------------------------------------------------------------------------------- [BUG/PRB.] VFP 9.0 FIX - THE NUMBER OF TIMES TO TRY AGAIN AFTER OPEN CLIPBOARD FAILED January 2024 ----------------------------------------------------------------------------------------------- CCB 1. BUG: In vfp9 (and vfp6, vfp7, vfp8), somtimes the open clipboard command runs failed on Windows 10 or later. 2. CAUSE: There are some compatible problems when the open clipboard command calls the OpenClipboard Windows API for the Clipboard User Service or other programs. Now if the open clipboard command calls the OpenClipboard Windows API failed, it will call the OpenClipboard Windows API many times again. There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Fun8a63a7 :: ; proc near push ebp ;0x008a63a7 : 55 mov ebp , esp ;0x008a63a8 : 8bec sub esp , 054h ;0x008a63aa : 83ec54 and dword ptr [ Data9382a0 ] , 00h ;0x008a63ad : 8325a082930000 push esi ;0x008a63bb : 56 ; ; ---------------------------------------------------------------------------------------------- ; VFP 9.0 FIX - SYS(9121) THE NUMBER OF TIMES TO TRY AGAIN AFTER OPEN CLIPBOARD FAILED ; March 2023 ; ---------------------------------------------------------------------------------------------- ; CCB ; ; SYS(9121) - The number of times to try again after open clipboard failed. ; ; 2023/3/7, by ccb ; ; mov eax , dword ptr [ Data937fb4 ] ;0x008a63b4 : a1b47f9300 ; mov eax , dword ptr [eax] ;0x008a63b9 : 8b00 ; push dword ptr [eax] ;0x008a63bc : ff30 ; call OpenClipboard ;0x008a63be : ff1558739100 mov dword ptr vfpa_openclipboard_openclipboard_cnt,00h Label8a63c3 :: mov eax , dword ptr [ Data937fb4 ] mov eax , dword ptr [eax] push dword ptr [eax] call OpenClipboard test eax , eax jne Label8a63c4 mov ecx,dword ptr vfpa_sys9121_data inc dword ptr vfpa_openclipboard_openclipboard_cnt cmp dword ptr vfpa_openclipboard_openclipboard_cnt,ecx ja Label8a63c4 push dword ptr vfpa_sys9074_data call Sleep jmp Label8a63c3 Label8a63c4 :: test eax , eax ;0x008a63c4 : 85c0 je Label8a6465 ;0x008a63c6 : 0f8499000000 lea edx , dword ptr [ ebp - 4 ] ;0x008a63cc : 8d55fc lea eax , dword ptr [ ebp - 84 ] ;0x008a63cf : 8d45ac call Fun42c27f ;0x008a63d2 : e8a85eb8ff pushd 00h ;0x008a63d7 : 6a00 push eax ;0x008a63d9 : 50 call Fun42c2be ;0x008a63da : e8df5eb8ff test eax , eax ;0x008a63df : 85c0 pop ecx ;0x008a63e1 : 59 pop ecx ;0x008a63e2 : 59 jne Label8a6453 ;0x008a63e3 : 756e pushd 01h ;0x008a63e5 : 6a01 call GetClipboardData ;0x008a63e7 : ff155c749100 mov esi , eax ;0x008a63ed : 8bf0 test esi , esi ;0x008a63ef : 85f6 jne Label8a6409 ;0x008a63f1 : 7516 mov eax , dword ptr [ Data9382a0 ] ;0x008a63f3 : a1a0829300 pushd 01012h ;0x008a63f8 : 6812100000 call Fun42bf2a ;0x008a63fd : e8285bb8ff mov dword ptr [ Data9382a8 ] , eax ;0x008a6402 : a3a8829300 jmp Label8a6453 ;0x008a6407 : eb4a Label8a6409 :: pushd 05012h ;0x008a6409 : 6812500000 push esi ;0x008a640e : 56 call GlobalSize ;0x008a640f : ff15c0719100 call Fun42bf2a ;0x008a6415 : e8105bb8ff push esi ;0x008a641a : 56 mov dword ptr [ Data9382a8 ] , eax ;0x008a641b : a3a8829300 call GlobalLock ;0x008a6420 : ff15b8719100 mov ecx , dword ptr [ Data9382a8 ] ;0x008a6426 : 8b0da8829300 mov ecx , dword ptr [ecx] ;0x008a642c : 8b09 jmp Label8a6439 ;0x008a642e : eb09 Label8a6430 :: cmp dl , 0Ah ;0x008a6430 : 80fa0a je Label8a6438 ;0x008a6433 : 7403 mov byte ptr [ecx] , dl ;0x008a6435 : 8811 inc ecx ;0x008a6437 : 41 Label8a6438 :: inc eax ;0x008a6438 : 40 Label8a6439 :: mov dl , byte ptr [eax] ;0x008a6439 : 8a10 test dl , dl ;0x008a643b : 84d2 jne Label8a6430 ;0x008a643d : 75f1 mov eax , dword ptr [ Data9382a8 ] ;0x008a643f : a1a8829300 sub ecx , dword ptr [eax] ;0x008a6444 : 2b08 push esi ;0x008a6446 : 56 mov dword ptr [ Data9382a0 ] , ecx ;0x008a6447 : 890da0829300 call GlobalUnlock ;0x008a644d : ff15b4719100 Label8a6453 :: lea eax , dword ptr [ ebp - 4 ] ;0x008a6453 : 8d45fc push eax ;0x008a6456 : 50 lea eax , dword ptr [ ebp - 84 ] ;0x008a6457 : 8d45ac call Fun42d200 ;0x008a645a : e8a16db8ff call CloseClipboard ;0x008a645f : ff1560739100 Label8a6465 :: mov eax , dword ptr [ Data9382a0 ] ;0x008a6465 : a1a0829300 pop esi ;0x008a646a : 5e leave ;0x008a646b : c9 ret ;0x008a646c : c3 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_vfp9fix247.asp 2, microsoft.com: https://devblogs.microsoft.com/oldnewthing/20041101-00/?p=37433 3, foxite.com: https://www.foxite.com/archives/vfp-bug-and-how-to-fix-it-0000493666.htm 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |