“将密钥发送到”对话框
我有一个vba代码,用于AutoCAD 2015。它能够在AutoCAD中激活一个命令,打开一个对话框。然后它将继续该对话框上的SendKey我在2018年尝试了同样的事情,但SendKey在对话框中不起作用。但是,当我关闭对话框时,它会在命令行中运行sendkeys。不太清楚发生了什么。
谢谢您的帮助
Sub Catchment()
On Error Resume Next
Set AcadApp = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set AcadApp = CreateObject("AutoCAD.Application")
End If
AppActivate AcadApp.Caption
AcadApp.Visible = True
AcadApp.Application.WindowState = acNorm
AcadApp.ActiveSpace = acModelSpace
If AcadApp.Documents.Count = 0 Then
AcadApp.Documents.Add
End If
AcadApp.ActiveDocument.SendCommand "_CREATECATCHMENTFROMOBJECT" & vbCr
End Sub
Sub Catchment_Storm_SendKeys()
Dim myApp As String
DoEvents
Application.Wait (Now + TimeValue("0:00:01"))
Sleep 250
SendKeys "{TAB}{TAB}{TAB}{TAB}", True
Sleep 250
SendKeys "{ENTER}", True
Sleep 250
SendKeys "{TAB}{TAB}{TAB}{TAB}", True
End Sub
**** Hidden Message ***** 有没有办法通过设定对话框中的标题来更改对话框的焦点?
这是一个很好的例子https://stackoverflow.com/a/30353590
该链接引用的是Excel,但与此相同,Autocad/VBA将不会处理剩余的VBA语句,直到模式对话框被取消。 我试着跟着。因此,我无法获得模态窗口的句柄,但我可以设置一个计时器,让VBA等待,直到离开窗口?像这样吗?
我不这么认为。看起来您不会使用AutoCAD/VBA函数SendKeys,而是使用Windows API SendMessage函数。计时器有10毫秒的延迟,以便在调用TIMERPROC之前显示对话框。TIMERPROC函数使用FindWindow调用获得对话框的句柄,然后向它发出SendMessage。
这里有几个可能对您有用的链接:
https://www . Google . com/search?q = windows+消息+泵+VBA & rlz = 1c 1 gceu _ enus 820 us 820 & OQ = windows+消息+泵+vba&aqs=chrome..69i 57.8716 j0j 8 & sourceid = chrome & ie = UTF-8
https://docs . Microsoft . com/en-us/windows/desktop/API/winuser/nf-winuser-settimer
几年前,我使用Spy++查看操作系统中传递的消息...
https://docs . Microsoft . com/en-us/visual studio/debugger/introducing-spy-increment?view=vs-2017
页:
[1]