Delphi 如何通过主程序判断显示调用的DLL已经在运行

用D7开发了一个OA办公流程DLL(挂靠在其他项目中使用),又做了一个托盘程序,登陆托盘程序后,Timer控件定时查询需审批的流程。查到流程后,右下角图标闪烁,双击调用OA办公流程DLL。现遇到一个问题,想实现的功能:打开OA流程DLL后,取消闪烁,并停止Timer;关闭DLL后,重新开启Timer(不改动DLL,只通过托盘程序判断)。求教大家有什么办法么?

2个回答

通过窗口类名去判断窗口是否存在

hhwq1988
不合适先森 代码换成h:=FindWindow('窗口类名','流程列表');就解决了 谢谢哈
2 年多之前 回复
hhwq1988
不合适先森 嗯嗯,我用h:=FindWindow(nil,'流程列表');//流程列表 : OA流程DLL的主窗口标题 是实现了我需要的判断,但是就怕其他窗口也刚好同名,咋办呢?
2 年多之前 回复

我记得在载入dll的时候,可以以独占模式载入。

或者,每次调用dll时,不载入dll本身,而是拷贝一份,每次对这个拷贝进行判断,如果能够读写删除,说明dll已经关闭了,如果不能,说明dll被打开了。

newpeng
newpeng 回复不合适先森: 说明你在关闭dll时没有释放相应的句柄,否则不会无法删除的。
2 年多之前 回复
hhwq1988
不合适先森 第一次打开之前是可以删除的,但是打开一次DLL再关闭后貌似就不行了,我本来想通过什么办法在主程序遍历到DLL的窗口是否已经打开,但是没找到解决方案
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐