对话框中的选中/取消选中框
说到Windows API,我完全是个新手。我需要能够选中/取消选中Inventor中对话框上的一个框。我希望有人能帮我解决这个问题/从哪里开始?我可以打开并激活对话框<谢谢**** Hidden Message ***** 我认为你想从某种反应器或至少是一个VB(a)程序来操作对话框,该程序打开窗口并执行一些操作...
你需要知道几件事,取决于你得到的,将取决于你需要多少。让我们从基础开始:
要通过VB(a)操作Windows控件,您需要使用SendMessage或SetWindowLong ...每个都有积极和消极...我会让你研究这些..
要发送消息或设置窗口或控件的样式,您需要知道句柄,以获得您需要能够枚举特定窗口上的所有控件,您必须通过其类或其句柄找到该窗口..因此,您看到它都围绕着将所有重要的句柄转到要操作的复选框。
句柄因实例而异,因此,如果您现在打开窗口,它将是一回事,但下次打开它时,它将有所不同..那么我们如何以一定程度的准确性找到这一点...
通过窗口标题,但由于它不是最上面的窗口,我们如何确定地知道该标题可能是什么。
除非标题是静态的,否则我们不会这样做,那么我们也不知道这是真的......所以我们必须找到主应用程序AutoCAD的标题......这是使用VB(a)中的Appplication.Caption属性相对容易地完成的。
获得标题后,可以使用 FindWindow API 获取 AutoCAD 应用程序窗口的句柄。有了它,您就可以使用 EnumerateChildWindows,直到找到包含要操作的控件的窗口的类和/或标题。显然,通配符比较是为了确保您拥有正确的窗口。
按标题和/或类找到对话框后,枚举所有控件,直到找到要操作的控件。当然,您需要使用Spy ++进行一些窥探工作,以确定类,键,文本或其他唯一可识别的项目,以了解您拥有正确的复选框。EnumChildWindowsProc 将标识要操作的控件的句柄。
最后,有了句柄,您可以使用 SendMessage 或 SetWindowLong 将复选框更改为选中状态。
对以下内容进行一些研究:
FindWindow
EnumChildWindows
SendMessage
SetWindowLong
上述过程所需的所有常量也需要调查以确定您需要哪些常量。 谢谢,我会调查的。 谢谢你的帮助。看看这些命令,我的脑子里肯定有点不对劲。找出解决方案所需的时间可能不会节省自动化首先需要的时间。我现在正在通过sendkeys进行此操作。现在它是有效的,我将在将来看到错误。 很好的选择——因为他忘记了,或者帮了你一个忙,忽略了最难的部分——实际上告诉了对话框何时弹出。 正确,我可以打开它。它试图找到它的句柄,我在使用windows API时遇到了问题。 也许如果我有时间,我会发布一些代码片段来展示它的作用。 如果你有时间,谢谢,但如果你不这样做,请不要走你的路。 我自己也有兴趣看到这个(VBA?)代码。在劫持另一个应用程序的界面时,我曾经遇到的一个问题是在弹出对话框时抓住它。由于这是一个VBA论坛,我假设代码是用VBA编写的,并且AddressOf运算符不可用 - 这意味着轮询。
轮询意味着陷入循环,等待并耗尽资源。添加Doevents在某些方面有所帮助 - 但也意味着我可能会错过一个对话框打开,这个对话框可能不会像有些人那样*保持*打开状态 - 以及你的代码被困在循环中的可能性。
当然,如果它是一个“通用对话”,它的父级Hwnd可能不一定是调用应用程序的父级Hwnd - 因此可能涉及一些侦探工作。(通过 API 创建公共对话框时,将“父”hwnd 设置为桌面 hwnd 是获取非模式对话框的简单方法。
我已经编写了一个与AddressOf等价的函数,另外,使用系统定时器可以有效地通知调用函数任何活动。
页:
[1]
2