在excel vba 2013中获取游标状态

您好我已经创build了一个macros,它做了一个严重的鼠标点击和鼠标移动(按键macros)进入Oracle(程序/数据库)大量重复的数据。 我使用Dataload Classic或Dataloader Classic(按键程序)将数据input到oracle,但缺less“Smarts”,所以我创build了自己的一些“Smarts”按键程序。

现在我正在使用SLEEP命令/函数在每次鼠标移动和鼠标点击后等待几秒/毫秒,但问题是有时候Oracle会很慢,“暂停”/“加载”/或“冻结”冻结时间可能会超过SLEEP命令的初始等待时间,并继续执行程序,从而搞砸了一切。

例:

如果something_happens然后
睡2000年
万一

在DataLoad classic / Dataloader Classic中,可以select更改多久可以等待/暂停每个鼠标单击或鼠标鼠标等。最让我感兴趣的是“HOURGLASS CHECK”选项。 这个小时的玻璃检查表明,如果鼠标仍然处于沙漏状态,您可以设置程序等待的时间。 当然用户可以input毫秒或秒。

Excel VBA中是否有任何代码可以检查鼠标状态的这个HOUR GLASS? 睡眠命令是不够的,我需要这个小时玻璃检查我的程序。 请帮助我解决这个难题。

先谢谢你

您可以尝试使用win api函数LoadCursor和GetCursorInfo来确定当前游标是否等于等待游标。

函数首先加载win-defined等待游标,然后获取当前游标并检查它们是否相同。 HTH

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 

尝试检查screen.MousePointer属性,如果忙(沙漏)

 While screen.MousePointer = 11 Sleep(500) Wend