Заставить мой код ждать пока курсор загружается MS Excel 2016 - PullRequest
0 голосов
/ 16 октября 2018

Я выполняю некоторую работу по автоматизации, чтобы выполнить повторную операцию копирования-вставкиИногда сервер будет очень медленным.В то время я использовал код, приведенный ниже, чтобы дождаться, пока ожидание курсора не станет нормальным

Option Explicit

Private Const IDC_WAIT As Long = 32514

Private Type POINT
x As Long
y As Long
End Type

Private Type CURSORINFO
cbSize As Long
flags As Long
hCursor As Long
ptScreenPos As POINT
End Type

Private Declare Function GetCursorInfo _
Lib "user32" (ByRef pci As CURSORINFO) As Boolean
Private Declare Function LoadCursor _
Lib "user32" Alias "LoadCursorA" _
(ByVal hInstance As Long, ByVal lpCursorName As Long) As Long

Public Function IsWaitCursor() As Boolean

' Get handle to wait cursor
Dim handleWaitCursor As Long
handleWaitCursor = LoadCursor(ByVal 0&, IDC_WAIT)

Dim pci As CURSORINFO
pci.cbSize = Len(pci)

' Retrieve information about the current cursor
Dim ret As Boolean
ret = GetCursorInfo(pci)

If ret = False Then
    MsgBox "GetCursorInfo failed", vbCritical
    Exit Function
End If

' Returns true when current cursor equals to wait cursor
IsWaitCursor = (pci.hCursor = handleWaitCursor)

End Function

Приведенный выше код отлично работал для меня в 32-битном MS Excel 2013.Но сейчас я использую MS Excel 64-bit и приведенный выше код не работает.Кто-нибудь, пожалуйста, скажите мне, что нужно сделать

1 Ответ

0 голосов
/ 17 октября 2018
Private Const IDC_WAIT As Long = 32514
Private Type POINT
X As Long
Y As Long
End Type

Private Type CURSORINFO
cbSize As Long
flags As Long
hCursor As LongPtr
ptScreenPos As POINT
End Type

Private Declare PtrSafe Function GetCursorInfo _
Lib "User32" (ByRef pci As CURSORINFO) As Boolean
Private Declare PtrSafe Function LoadCursor Lib "User32" Alias "LoadCursorA" (ByVal hInstance As Long, ByVal lpCursorName As Long) As LongPtr

Public Function IsWaitCursor() As Boolean

' Get handle to wait cursor
Dim handleWaitCursor As LongPtr
handleWaitCursor = LoadCursor(ByVal 0&, IDC_WAIT)

Dim pci As CURSORINFO
pci.cbSize = Len(pci)

' Retrieve information about the current cursor
Dim ret As Boolean
ret = GetCursorInfo(pci)

If ret = False Then
    MsgBox "GetCursorInfo failed", vbCritical
    Exit Function
End If

' Returns true when current cursor equals to wait cursor
IsWaitCursor = (pci.hCursor = handleWaitCursor)

End Function

Приведенный выше код работал для меня.Я изменил тип данных Long на LongPtr

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...