乐筑天下

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

激活新窗口

[复制链接]

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2003-11-25 15:06:04 | 显示全部楼层 |阅读模式
好的,任何熟悉API的人都请帮助….
在我将新的应用程序窗口指定为HWND_TOPMOST后,我需要将AutoCAD当前图形设置为当前窗口
这是一个场景……
我正在开发一个外部应用程序,该应用程序与AutoCAD一起在windows中运行。我需要这个应用程序保持在顶部,这样用户可以随时更改设置,并且可以看到,这样用户就可以选择与程序相关的命令
我已经能够设置外部对话框的HWND_TOPMOST设置,但每当我将命令发送到AutoCAD时,我都必须在图形窗口中单击2或3次,使其成为当前窗口,以便使用该程序。这真是一个令人沮丧的提议
我希望外部应用程序保持在顶部,但处于非活动状态,AutoCAD当前图形变为活动状态,这样我就不必在图形中单击2次或3次,然后不经意地在错误的位置单击并重新启动<我说清楚了吗?

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

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

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2003-11-26 14:37:21 | 显示全部楼层
好吧,只是让你们知道...你没事了...我收到了一封来自陌生人的电子邮件(也许他们不想冒犯我,因为他们让我感到自卑),总之答案是:
  1. Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  2. Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Boolean
  3. SetForegroundWindow FindWindow(vbNullString, AcadApplication.Caption)

他只是给我指了正确的方向,剩下的就是我的了...
这个API太棒了!!
回复

使用道具 举报

14

主题

194

帖子

5

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
250
发表于 2003-11-26 14:48:23 | 显示全部楼层
好吧,如果你没有发现,我想把你送到vbdesign.net.我有一些问题。编程应用编程接口有什么用,你如何理解?
回复

使用道具 举报

1

主题

32

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2003-11-26 15:01:33 | 显示全部楼层
KEB,只是好奇,难道你不必采取具体行动来保持灭活的窗户在顶部吗?
我以为SetForegroundWindow会把whdl放在前面,而例如PutFocus会简单地允许它处理而不放在前面。
回复

使用道具 举报

1

主题

32

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2003-11-26 15:03:25 | 显示全部楼层
达伦,看看http://www.allapi.net。他们有一些很棒的(免费的)资源。
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2003-11-26 15:08:21 | 显示全部楼层
SMadsen,非活动窗口位于控制应用程序后面。控制应用程序设置了HWND_TOPMOST位,因此将始终保持在顶部(类似于选择“始终位于顶部”复选框时的 WinZip)。
最上面的窗口可以是非活动的,无论哪个窗口是活动的窗口,它都将保留在顶部但显示为灰色。
我需要的是让最顶层的应用程序自动使AutoCAD窗口成为活动窗口,因为它是在AutoCAD之外完成的,因此该过程是通过API函数处理的。
我已经在我的程序中实现了函数调用,它工作得非常好。
Daron,API编程允许您使用在任何dll,exe,odl,arx,tlb以及您可以想象的任何其他格式的可执行二进制文件中定义为可移植的任何函数。
想想你所知道的C和C++函数。您所要做的就是在VBA中使用适当的参数和类型声明该函数,然后您可以简单地调用该C或C++函数。
例如,您希望更改 AutoCAD 的标题以反映在 VBA 中定义的插件包。在普通 VBA 中,AcadApplication.Caption 是“只读”的,因此您无法使用 AcadApplication.Caption 应用新字幕。Caption = “New Caption”,但您可以通过声明 SetWindowText C++ 命令来调用它,并在其中设置字幕。这是一个强大的东西,如果你不确定你在做什么,可能会让你陷入麻烦。
看看这篇文章,看看我的意思。
回复

使用道具 举报

1

主题

32

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2003-11-26 15:29:17 | 显示全部楼层
听起来很棒。必须尽快检查一下。
在Mac上,可以通过其窗口程序指定始终位于顶部的窗口。我对Windows中的Z排序感到困惑,似乎您可以在这样的窗口顶部强制窗口。
是的..并通过使AutoCAD为每个命令播放音乐而与同事陷入困境
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2003-11-26 15:35:28 | 显示全部楼层
我没有想到……也许可以制作一个小程序,在后台运行,每5到10分钟等待一次,然后播放他们的“you got mail”波。他们会想知道到底发生了什么。
回复

使用道具 举报

1

主题

32

帖子

3

银币

初来乍到

Rank: 1

铜币
36
发表于 2003-11-26 15:40:07 | 显示全部楼层
这是一个简单的wav的
[代码]
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2003-11-26 16:03:15 | 显示全部楼层
现在我们只需要一个计时器......
我在想......
  1. Declare Function SetTimer Lib "user32" (ByVal Hwnd As Long, ByVal IdEvent As Long, ByVal seconds As Long, ByVal Func As Variant) As Long
  2. Sub NewTimer()
  3. Dim RVal As Long
  4. RVal = SetTimer(NULL, 1, 30, NULL)
  5. End Sub

但是我得到了一个无效的NULL错误使用。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-6-29 12:55 , Processed in 1.590399 second(s), 73 queries .

© 2020-2025 乐筑天下

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