- UID
- 2861
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-2-21
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
XDSoft 说:
长清 说:
在installshield中,如何检测ACAD在运行
长清 说:
用FINDWINDOWS吗
XDSoft 说:
我没有用过
长清 说:
那你用的什么软件,wise 吗
XDSoft 说:
是秋风做的安装程序
长清 说:
哦,想起来了
XDSoft 说:
已将 Qiu Feng 添加到对话中。
长清 说:
QF,
长清 说:
请教一个问题:
长清 说:
在installshield中,如何检测ACAD在运行
长清 说:
用什么函数?参数在?
Qiu Feng 说:
sorry.
Qiu Feng 说:
我没有用过install shield
Qiu Feng 说:
我是用delphi写的
Qiu Feng 说:
createoleobject(..)
Qiu Feng 说:
错了
长清 说:
亲自写?
Qiu Feng 说:
getactiveoleobject
长清 说:
我不会用DELPHI
Qiu Feng 说:
如果异常,说明调用失败
Qiu Feng 说:
我是自己写的。土办法。
长清 说:
ACAD对象的名称是?
Qiu Feng 说:
估计vc中也有相应的函数吧
长清 说:
我喜欢土办法
长清 说:
越土越地道
Qiu Feng 说:
GetActiveOleObject('AutoCAD.Application')
长清 说:
跟VB一样!
Qiu Feng 说:
在vb, vba, vbs中也有类似的办法
Qiu Feng 说:
呵。
长清 说:
是否就是 AutoCAD.Application?
Qiu Feng 说:
对。
Qiu Feng 说:
如果是要确定
Qiu Feng 说:
是什么版本的话,用
Qiu Feng 说:
AutoCAD.Application.15
Qiu Feng 说:
指2000+
长清 说:
哦
长清 说:
如果不确定版本,AutoCAD.Application行吗?
长清 说:
我不希望确定版本
Qiu Feng 说:
可以的。
Qiu Feng 说:
会用当前的版本。
长清 说:
谢谢你
Qiu Feng 说:
// Get AutoCAD Application
try
acadapp:=GetActiveOleobject(AppStr);
except
on EOleSysError do
AcadAlreadyRunning:=false;
end;
if not AcadAlreadyRunning then
try
AcadApp:=CreateOleObject(AppStr);
except
if not silent then MessageDlg(AppStr+' 没有安装。', mtInformation, [mbok], 0);
AutoCADInstalled := false;
end;
Qiu Feng 说:
这是我的pascal代码。
长清 说:
当前版本是什么意思,最后一次使用的吗?
长清 说:
我是说最后一次打开的
Qiu Feng 说:
是的。
Qiu Feng 说:
注册表中可以读到。
Qiu Feng 说:
有一个curver键
长清 说:
CURVER我知道,从VB启动也是这样
长清 说:
有点问题我还是想继续请教
Qiu Feng 说:
长清 说:
这是否就是按注册表来对当前版本的
Qiu Feng 说:
我不会用c语言。呵呵。
长清 说:
我也不会
Qiu Feng 说:
我没试过,
Qiu Feng 说:
想当然了
长清 说:
谢谢
长清 说:
我按你的思路在写一写
Qiu Feng 说:
在安装程序中调用了我的delphi程序,
Qiu Feng 说:
呵呵。
长清 说:
哦
Qiu Feng 说:
避免在安装程序中大动。我是这么做的。
长清 说:
?
Qiu Feng 说:
我用的inno setup虽然支持pascal
Qiu Feng 说:
但对com支持不好。
长清 说:
我不懂COM
Qiu Feng 说:
所以我只好用delphi写成exe
Qiu Feng 说:
在安装程序中调用。
Qiu Feng 说:
com就是指那个activex调用。
长清 说:
其实,INSTALLSHIELD很好,我刚学不久,做了个安装程序,最后一关就是检查是否在运行.
Qiu Feng 说:
我下了个wise,装了。
Qiu Feng 说:
不清楚能不能做到。
Qiu Feng 说:
install shield能不能调用win api?
长清 说:
wise也很好,因为我刚好有一INSTALL BOOK
Qiu Feng 说:
也许findwindow之类的api可以做到。
长清 说:
没有问题 对API支持很好
Qiu Feng 说:
findwindow 一伙的
Qiu Feng 说:
好像有好几个函数
长清 说:
还支持VC6画的对话框
Qiu Feng 说:
你试试看。
Qiu Feng 说:
很好。
Qiu Feng 说:
可惜我不会vc
长清 说:
findwindow也是IS的标准函数
XDSoft 说:
Sub test()
Dim a_app As AcadApplication
Dim HWND_ACAD As Long
On Error GoTo ERROR1
Set a_app = GetObject(, "autocad.application")
'Obtains the handle of AutoCAD window.
HWND_ACAD = FindWindow(vbNullString, a_app.Caption)
MsgBox "AutoCAD Application's handle is " & HWND_ACAD, vbInformation,
a_app.Caption
Exit Sub
ERROR1:
If Err.Number = 429 Then
MsgBox "Sorry, there
Qiu Feng 说:
哦。
XDSoft 说:
MsgBox "Sorry, there is no AutoCAD session running.", vbInformation
End If
End Sub
长清 说:
XD,
Qiu Feng 说:
我可以给你完整的vbs源码。XD工具箱的连接部份最初是用vbs写的。你看看好了。
Qiu Feng 说:
不过,很土,你别笑话。呵呵。
长清 说:
谢谢你,主要是找acad这个对象
Qiu Feng 说:
收文件?
长清 说:
.
长清 说:
网络有点问题
长清 说:
你再传一次
Qiu Feng 说:
你是局哉网么?
长清 说:
对
长清 说:
是否是FIREWALL的问题
XDSoft 说:
RegOpenKeyEx hKey, szBuffer, 0, KEY_ALL_ACCESS, phkResult
Value = "ACADLOCATION"
RetVal = RegQueryValueEx(phkResult, Value, 0, 0, dataBuff, ldataBuffSize)
If RetVal = 0 Then
apppath = ConvertString(dataBuff, ldataBuffSize)
Shell (apppath & "\acad.exe")
On Error Resume Next
Set obj = GetObject(, "AutoCad.Application.15")
Do
Err.Clear
Resume
Loop While Err.Number = 429
o
Qiu Feng 说:
可能。
XDSoft 说:
测试返回码是否是429
您出现了暂时性的网络问题,目前已不在对话中。
长清 说:
我的网老断.
已将 Qiu Feng 添加到对话中。
XDSoft 说:
if ( NULL == ( hAcad = ::GetModuleHandle (_T("acad.exe"))))
acutPrintf( "\nCannot get handle to AutoCAD's executable!" );
XDSoft 说:
这是VC的代码
Qiu Feng 说:
VC我不会。
XDSoft 说:
INSTALLSHEILD里面可以直接用
长清 说:
THANKS
Qiu Feng 说:
不谢
长清 说:
好了,下午比较忙,我要准备一下,再见.
Qiu Feng 说:
BB
Qiu Feng 已离开对话。
XDSoft 说:
长清 |
|