乐筑天下

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

VB窗口中一个命令调用另一命令

[复制链接]
Kye

12

主题

83

帖子

10

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
129
发表于 2017-9-11 11:52:00 | 显示全部楼层 |阅读模式
读这个贴【请问能将cad窗口设为当前窗口吗】
想将exe窗口调用至前台,捣鼓了一天,百度到一句话任务栏的窗口API 中的bringwindowtotop SetWindowPos SetForegroundWindow无法实现将其调至前台,遂放弃
从这个 和 学习了可以用如题的用法,实现了VB--->LSP---->VB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;分割线2020-05-29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;仅仅填加了备注,程序无实际变化 当年写这句VB--->LSP---->VB 现在看来我自己都有点莫名其妙
'一般情况下,VB中运行lisp命令只能放入程序的末端如Command1
'此程序示例实现了lisp命令前置即 [完整VB 命令]+[VB其他内容构成一个新的VB命令'也就是VB命令==[完整VB 命令]+[VB其他内容] 完成 lisp命令前置
  1. Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
  2.      ByVal lpClassName As String, _
  3.      ByVal lpWindowName As String) As Long
  4. Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" ( _
  5.      ByVal hWnd1 As Long, _
  6.      ByVal hWnd2 As Long, _
  7.      ByVal lpsz1 As String, _
  8.      ByVal lpsz2 As String) As Long
  9. Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" ( _
  10.      ByVal hwnd As Long, _
  11.      ByVal wMsg As Long, _
  12.      ByVal wParam As Long, _
  13.      ByVal lParam As Long) As Long
  14. Private Const WM_LBUTTONDOWN As Long = &H201
  15. Private Const WM_LBUTTONUP As Long = &H202
  16. Dim hDest As Long           '目标按钮句柄
  17. Private Sub Command1_Click()
  18. On Error GoTo ErrHandler
  19.    
  20.    
  21. '''连接cad
  22.     Dim acadapp As Object  'AcadApplication
  23.     Dim Thisdrawing As Object  'AcadDocument
  24.    ' Dim thisDrawing As Object
  25.     Set acadapp = GetObject(, ".Application")
  26.     If Err Then
  27.         Err.Clear
  28.         Set acadapp = CreateObject("AutoCAD.Application")
  29.         If Err Then
  30.             MsgBox Err.Description
  31.             End
  32.             Exit Sub
  33.         End If
  34.     End If
  35.     acadapp.Visible = True
  36.     Set Thisdrawing = acadapp.ActiveDocument
  37.     Thisdrawing.SendCommand "TEST" & vbCr '应该改进cad程序运行成功应该将这些数据从库中删除
  38. ErrExit:
  39.    
  40.     Exit Sub
  41.    
  42. ErrHandler:
  43.     MsgBox "运行时发生意外,请检查AutoCAD文件是否打开!", vbCritical, "提示"
  44.     GoTo ErrExit
  45. End Sub
  46. Private Sub Command2_Click()
  47. MsgBox "测试怎么样?"
  48. End Sub
  49. Private Sub Command3_Click()'==================================================
  50. '时间长了,加个备注
  51. '1.  form_load的内容,同理 也可实现调用Command1
  52. '2.  如调用command1的内容,也就是lisp命令可以前置 ,再运行其他vb内容
  53. '==================================================
  54. End Sub
  55. Private Sub Form_Load()
  56. '==================================================
  57. '时间长了,加个备注
  58.   '通过form_load启动调用了 command2 命令,如将form_load的内容放入一个命令Command3中,
  59.   '即Command3可以调用command2 命令
  60. '==================================================
  61.    '寻找按钮句柄
  62.     '
  63.     '具体代码内容根据软件的结构不同而不同,参考SPY++中目标软件的结构图
  64.     '
  65.     Dim hTmp As Long
  66.    
  67.     hTmp = FindWindow(vbNullString, "12345") '    12345 为窗体名字' findwindow(vbnullstring,"窗体名字")
  68.    
  69.     If hTmp  0 Then
  70.          hDest = FindWindowEx(hTmp, 0, vbNullString, "Command2")     
  71.          End If
  72.    If hDest  0 Then
  73.         SendClick hDest, 10, 10              '
  74.     Else
  75.         MsgBox "还未找到句柄!"
  76.     End If
  77. End Sub
  78. Private Function SendClick(hwnd As Long, mX As Long, mY As Long)
  79.     '发送点击消息
  80.     Dim I As Long
  81.     I = PostMessage(hwnd, WM_LBUTTONDOWN, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)
  82.     I = PostMessage(hwnd, WM_LBUTTONUP, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)
  83. End Function

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

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

使用道具 举报

23

主题

561

帖子

13

银币

中流砥柱

Rank: 25

铜币
653
发表于 2017-9-11 12:58:00 | 显示全部楼层
Appactivate acadapp.Caption
回复

使用道具 举报

Kye

12

主题

83

帖子

10

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
129
发表于 2017-9-11 14:23:00 | 显示全部楼层

阿勇老师的东西很很高端,是不是调用CAD窗口至当前?请阿勇老师给一个示例链接 谢谢
最初想实现在CAD中调用任务栏中的exe窗口至前台,未实现,只好用taskkill 关闭进程,重启命令
主楼的程序是想分享下 在同一个窗口下,一个命令调用另外一个命令的示例,或许论坛上有,不过没有看到,这个示例程序还是有点用处.比如sendcommand lisp程序只能放在最后,如果在lisp程序后面还想再做点什么之类就可以用这个调用下 呵呵
回复

使用道具 举报

13

主题

59

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2017-9-11 17:25:00 | 显示全部楼层
zzyong00说的是对的
用CAD2006作的实验,代码如下:
'将cad激活到当前
Private Sub Command1_Click()
Appactivate "AutoCAD"
End Sub
回复

使用道具 举报

0

主题

334

帖子

12

银币

后起之秀

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

铜币
335
发表于 2017-10-7 19:22:00 | 显示全部楼层
回帖是一种美德!感谢楼主的无私分享 谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 13:28 , Processed in 0.434353 second(s), 62 queries .

© 2020-2025 乐筑天下

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