明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 157|回复: 4

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

[复制链接]
发表于 2017-9-11 11:52 | 显示全部楼层 |阅读模式
读这个贴【请问能将cad窗口设为当前窗口吗】http://bbs.mjtd.com/forum.php?mod=viewthread&tid=110889&fromuid=7303474
想将exe窗口调用至前台,捣鼓了一天,百度到一句话任务栏的窗口API 中的bringwindowtotop SetWindowPos SetForegroundWindow无法实现将其调至前台,遂放弃

从这个https://zhidao.baidu.com/question/1493962773300152419.htmlhttp://bbs.csdn.net/topics/390328728 学习了可以用如题的用法,实现了VB--->LSP---->VB


  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(, "AutoCAD.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. End Sub
  51. Private Sub Form_Load()
  52.    '寻找按钮句柄
  53.     '
  54.     '具体代码内容根据软件的结构不同而不同,参考SPY++中目标软件的结构图
  55.     '
  56.     Dim hTmp As Long
  57.    

  58.     hTmp = FindWindow(vbNullString, "12345") '    12345 为窗体名字' findwindow(vbnullstring,"窗体名字")
  59.    
  60.     If hTmp <> 0 Then
  61.          hDest = FindWindowEx(hTmp, 0, vbNullString, "Command2")     
  62.          End If
  63.    If hDest <> 0 Then
  64.         SendClick hDest, 10, 10              '
  65.     Else
  66.         MsgBox "还未找到句柄!"
  67.     End If
  68. End Sub
  69. Private Function SendClick(hwnd As Long, mX As Long, mY As Long)
  70.     '发送点击消息
  71.     Dim I As Long
  72.     I = PostMessage(hwnd, WM_LBUTTONDOWN, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)
  73.     I = PostMessage(hwnd, WM_LBUTTONUP, 0, (mX And &HFFFF) + (mY And &HFFFF) * &H10000)
  74. End Function


发表于 2017-9-11 12:58 | 显示全部楼层
Appactivate acadapp.Caption
 楼主| 发表于 2017-9-11 14:23 | 显示全部楼层
本帖最后由 Kye 于 2017-9-11 14:25 编辑
zzyong00 发表于 2017-9-11 12:58
Appactivate acadapp.Caption

阿勇老师的东西很很高端,是不是调用CAD窗口至当前?请阿勇老师给一个示例链接 谢谢

最初想实现在CAD中调用任务栏中的exe窗口至前台,未实现,只好用taskkill 关闭进程,重启命令

主楼的程序是想分享下 在同一个窗口下,一个命令调用另外一个命令的示例,或许论坛上有,不过没有看到,这个示例程序还是有点用处.比如sendcommand lisp程序只能放在最后,如果在lisp程序后面还想再做点什么之类就可以用这个调用下 呵呵
发表于 2017-9-11 17:25 | 显示全部楼层
zzyong00说的是对的
用CAD2006作的实验,代码如下:
'将cad激活到当前
Private Sub Command1_Click()
Appactivate "AutoCAD"
End Sub

评分

参与人数 1明经币 +1 收起 理由
Kye + 1 很给力!

查看全部评分

发表于 2017-10-7 19:22 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号  
©2000-2017 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2017-11-23 04:27 , Processed in 0.209583 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表