Windows API SendMessage để đóng băng màn hình trong Excel VBA
Tôi có một số quy trình trong Excel khiến màn hình nhấp nháy, giật và cập nhật liên tục. Tôi cần dừng nó lại và trước khi ai đó đề xuất, tôi xin nói rõ: Application.SreenUpdating=False không hiệu quả với sự cố này.
Tôi đang sử dụng thứ gì đó vượt quá khả năng của tôi nhưng GẦN như có tác dụng. Tôi đang sử dụng:
# If VBA7 Or Win64 Then Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" ( ByVal hwnd As LongPtr , ByVal wMsg As LongPtr , ByVal wParam As LongPtr , lParam As Any ) As LongPtr # Else Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" ( ByVal hwnd As Long , ByVal wMsg As Long , ByVal wParam As Long , lParam As Any ) As Long # End If
sau đó để đóng băng màn hình:
SendMessage Application . hwnd , WM_SETREDRAW , 1 &, 0 &
sau đó tôi chạy mã của mình và để Bỏ đóng băng màn hình:
SendMessage Application . hwnd , WM_SETREDRAW , 0 &, 0 &
Nhưng vấn đề là khi nó đang chạy, màn hình lại trở về ảnh chụp màn hình từ rất lâu trước đó thay vì đóng băng màn hình như hiện tại. Làm thế nào để nó đóng băng màn hình hiện tại?
Cảm ơn
Trả lời:
Hãy thử cách này thay thế:
#Nếu Win64 Thì
Khai báo riêng tư PtrSafe Function LockWindowUpdate Lib "user32" (ByVal hWndLock As LongPtr) As Long
#Khác
Khai báo riêng tư Hàm LockWindowUpdate Lib "user32" (ByVal hWndLock As Long) As Long
#Kết thúc nếu
Andreas.
Trả lời:
Xin chào, cảm ơn Andreas đã trả lời, tôi nên nói vậy, nhưng tôi đã sử dụng LockWindowUpdate nhưng mặc dù nó hoạt động tốt trên máy của tôi, nhưng nó lại không có tác dụng gì trên máy của đồng nghiệp tôi và máy của anh ấy vẫn tiếp tục nhấp nháy liên tục.
Trả lời:
trên máy của tôi, nó không có tác dụng gì trên máy của đồng nghiệp tôi và máy của anh ấy vẫn nhấp nháy liên tục.
Trong trường hợp này, Window Handle bị sai, hãy thử dùng 0 làm handle để vô hiệu hóa toàn bộ màn hình. (Hoặc sử dụng GetForeGroundWindow tương ứng với FindWindow để lấy handle cửa sổ chính xác).
Andreas.
Comments
Post a Comment