当按钮使用user32库调用新窗口时,VBA失去控制流



我使用VBA与user32库来操作窗口。在我正在制作的应用程序中,当我单击某个按钮时,我已经有了句柄,一个新窗口适当地弹出。然后我需要按下新窗口上的一个按钮。但在代码点击第一个按钮后,代码不再向前移动。

如果我最初通过按F8来逐步执行代码,那么我可以手动关闭新窗口,手动重新打开它,然后继续逐步执行我的代码,它可以很好地完成程序。如果我最初按F5只是为了运行程序而没有跳过,那么我仍然需要手动关闭窗口,并且在打开新窗口后代码会卡住,因此没有任何进展。

我如何确保程序不失去控制后,按钮单击和新窗口弹出?

'assume the objects are declared already and the functions are correctly imported.
printDialogWindow = FindWindow(vbNullString, "Print")
preferencesButton = findwindowEx(printDialogWindow, 0&, "Button", "P&references")
Call SendMessage(PreferencesButton, BY_CLICK, 0, ByVal 0&)
'code stalls here
printPreferencesWindow = FindWindow(vbNullString,"Printing Preferences")

好的,所以我发现简单的解决方案是使用Win32 "PostMessage"函数,而不是"sendmessage"。SendMessage在将控制权返回给调用程序之前将等待一个响应。PostMessage将消息放入队列中,然后立即将控制权交还给调用程序。在我的示例中,由于该窗口的队列中没有其他消息,因此它会立即处理消息,因此不会出现问题。

最新更新