mstg007 发表于 2019-3-27 12:08:50

“将密钥发送到”对话框

我有一个vba代码,用于AutoCAD 2015。它能够在AutoCAD中激活一个命令,从而打开一个对话框。然后它将继续该对话框上的sendkeys
2018年我也在尝试同样的事情,但sendkeys在对话框中不起作用。但是,当我关闭对话框时,它会在命令行中运行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


mstg007 发表于 2019-3-27 13:50:16

哈哈。这很有趣。我没有意识到几年前我问过这个问题
http://www.theswamp.org/index.php?topic=49598.msg547399#msg547399

mstg007 发表于 2019-3-27 14:37:06

卢兹。提示;我患有老年痴呆症's,但在;至少我不知道't有阿尔茨海默病's“;模因
回到你的问题上来——这是模态与非模态的情况吗——也就是说,它在后者中会正常工作吗?

mstg007 发表于 2019-3-27 14:40:51

它是模态的。我必须单击“确定”按钮取消它。

DavidS 发表于 2019-3-27 14:47:46

有没有办法通过在对话框中定位标题来将焦点更改为对话框?

mstg007 发表于 2019-3-28 09:27:22


https://stackoverflow.com/a/30353590该链接引用的是Excel,但同样,在模式对话框关闭之前,Autocad/VBA不会处理剩余的VBA语句。

DavidS 发表于 2019-3-28 09:34:54

我试着跟随。因此,我无法获得模式窗口的句柄,但我可以放置一个计时器,让VBA等待到窗口外?像这样的?

mstg007 发表于 2019-3-28 13:04:14


我不'我不这么认为 看来你赢了'不要使用AutoCAD/VBA函数SendKeys,而是使用Windows API SendMessage函数 计时器是一个10毫秒的延迟,允许在调用TIMERPROC之前显示对话框 TIMERPROC函数使用FindWindow调用获取对话框的句柄,然后向其发出SendMessage
这里有几个你可能会觉得有用的链接:
https://www.google.com/search?q=windows+消息+泵+vba&rlz=1C1GCEU_enUS820US820&oq=windows+消息+泵+vba&aqs=铬.69i57.8716j0j8&sourceid=chrome&ie=UTF-8https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-settimer几年前,我使用Spy++查看在操作系统中传递的消息…https://docs.microsoft.com/en-us/visualstudio/debugger/introducing-spy-increment?view=vs-2017
页: [1]
查看完整版本: “将密钥发送到”对话框