乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 228|回复: 13

对话框中的选中/取消选中框

[复制链接]

2

主题

25

帖子

2

银币

初来乍到

Rank: 1

铜币
33
发表于 2008-4-4 09:44:31 | 显示全部楼层 |阅读模式
说到Windows API,我完全是个新手。我需要能够选中/取消选中Inventor中对话框上的一个框。我希望有人能帮我解决这个问题/从哪里开始?我可以打开并激活对话框<谢谢

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2008-4-4 11:30:25 | 显示全部楼层
我认为你想从某种反应器或至少是一个VB(a)程序来操作对话框,该程序打开窗口并执行一些操作...
你需要知道几件事,取决于你得到的,将取决于你需要多少。让我们从基础开始:
要通过VB(a)操作Windows控件,您需要使用SendMessage或SetWindowLong ...每个都有积极和消极...我会让你研究这些..
要发送消息或设置窗口或控件的样式,您需要知道句柄,以获得您需要能够枚举特定窗口上的所有控件,您必须通过其类或其句柄找到该窗口..因此,您看到它都围绕着将所有重要的句柄转到要操作的复选框。
句柄因实例而异,因此,如果您现在打开窗口,它将是一回事,但下次打开它时,它将有所不同..那么我们如何以一定程度的准确性找到这一点...
通过窗口标题,但由于它不是最上面的窗口,我们如何确定地知道该标题可能是什么。
除非标题是静态的,否则我们不会这样做,那么我们也不知道这是真的......所以我们必须找到主应用程序AutoCAD的标题......这是使用VB(a)中的Appplication.Caption属性相对容易地完成的。
获得标题后,可以使用 FindWindow API 获取 AutoCAD 应用程序窗口的句柄。有了它,您就可以使用 EnumerateChildWindows,直到找到包含要操作的控件的窗口的类和/或标题。显然,通配符比较是为了确保您拥有正确的窗口。
按标题和/或类找到对话框后,枚举所有控件,直到找到要操作的控件。当然,您需要使用Spy ++进行一些窥探工作,以确定类,键,文本或其他唯一可识别的项目,以了解您拥有正确的复选框。EnumChildWindowsProc 将标识要操作的控件的句柄。
最后,有了句柄,您可以使用 SendMessage 或 SetWindowLong 将复选框更改为选中状态。
对以下内容进行一些研究:
FindWindow
EnumChildWindows
SendMessage
SetWindowLong
上述过程所需的所有常量也需要调查以确定您需要哪些常量。
回复

使用道具 举报

2

主题

25

帖子

2

银币

初来乍到

Rank: 1

铜币
33
发表于 2008-4-4 11:57:19 | 显示全部楼层
谢谢,我会调查的。
回复

使用道具 举报

2

主题

25

帖子

2

银币

初来乍到

Rank: 1

铜币
33
发表于 2008-4-7 10:42:07 | 显示全部楼层
谢谢你的帮助。看看这些命令,我的脑子里肯定有点不对劲。找出解决方案所需的时间可能不会节省自动化首先需要的时间。我现在正在通过sendkeys进行此操作。现在它是有效的,我将在将来看到错误。
回复

使用道具 举报

7

主题

42

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2008-4-7 13:12:59 | 显示全部楼层
很好的选择——因为他忘记了,或者帮了你一个忙,忽略了最难的部分——实际上告诉了对话框何时弹出。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2008-4-7 13:21:10 | 显示全部楼层
正确,我可以打开它。它试图找到它的句柄,我在使用windows API时遇到了问题。
回复

使用道具 举报

2

主题

25

帖子

2

银币

初来乍到

Rank: 1

铜币
33
发表于 2008-4-8 07:21:27 | 显示全部楼层
也许如果我有时间,我会发布一些代码片段来展示它的作用。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2008-4-8 08:18:02 | 显示全部楼层
如果你有时间,谢谢,但如果你不这样做,请不要走你的路。
回复

使用道具 举报

2

主题

25

帖子

2

银币

初来乍到

Rank: 1

铜币
33
发表于 2008-4-8 12:44:13 | 显示全部楼层
我自己也有兴趣看到这个(VBA?)代码。在劫持另一个应用程序的界面时,我曾经遇到的一个问题是在弹出对话框时抓住它。由于这是一个VBA论坛,我假设代码是用VBA编写的,并且AddressOf运算符不可用 - 这意味着轮询。
轮询意味着陷入循环,等待并耗尽资源。添加Doevents在某些方面有所帮助 - 但也意味着我可能会错过一个对话框打开,这个对话框可能不会像有些人那样*保持*打开状态 - 以及你的代码被困在循环中的可能性。
当然,如果它是一个“通用对话”,它的父级Hwnd可能不一定是调用应用程序的父级Hwnd - 因此可能涉及一些侦探工作。(通过 API 创建公共对话框时,将“父”hwnd 设置为桌面 hwnd 是获取非模式对话框的简单方法。
回复

使用道具 举报

7

主题

42

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2008-4-9 05:58:05 | 显示全部楼层

我已经编写了一个与AddressOf等价的函数,另外,使用系统定时器可以有效地通知调用函数任何活动。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-4 23:39 , Processed in 0.645778 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表