打开一个程序前,如何通知关闭另外一个程序?并且如何知道通知的程序是否可以关闭?

zzn007 2008-06-24 10:58:46
我现在有一个主程序,他的界面上有多个可以打开的单独的可执行程序,这些程序的名称和路径都是从数据库中查出来的。我随便单击其中一个,就可以打开相应的程序,这个我实现了。
现在的要求是:
1,当有一个程序打开以后,如果再单击另外一个程序,那么在新程序打开之前,要先关闭当前打开的那个程序,如果当前的程序不允许关闭,则新程序不能打开;
2,所有的子程序,如果没有主程序开启的时候,是不允许单独运行的!也就是说,子程序需要由主程序来启动。

我的问题如下:
2的解决方法,我想到了,就是给每个子程序加个启动参数,如果子程序启动的时候,没有参数或格式不正确,就自动关闭。
1问题没有想到好的方法:我的想法是:
(1)打开新的程序前,给打开的进程发送关闭程序的消息,然后等待子程序返回是否关闭的消息,如果可以关闭,子程序就自己关闭程序,然后我打开新的子程序,否则就不打开新的程序。现在问题是,不知道给哪个窗口发消息!我只知道打开的进程的exe名称。还有,我如何知道先前打开的那个exe已经关闭了?

如果有更好的方法,请高手们赐教啊
...全文
279 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
swayi21 2008-07-22
  • 打赏
  • 举报
回复
其实不用退出之前的实例,发送个消息restore一下就可以了.
swayi21 2008-07-22
  • 打赏
  • 举报
回复
你其实就是要实现"只运行一个实例",
学习一下
OpenMutex, ReleaseMutex, CreateMutex

zzn007 2008-07-02
  • 打赏
  • 举报
回复
这样的牛人,在csdn上越多越好啊!
22222bbb 2008-07-01
  • 打赏
  • 举报
回复
unsingned,我个人觉得你真TMD是一个人才.每天都能看到你回复的贴子.崇拜你!
zzn007 2008-06-30
  • 打赏
  • 举报
回复
请问楼上的,我的exe是通过ShellExecute方法运行,这个函数的返回值应该是这个exe的句柄吧?我现在只知道这个句柄,如果给这个exe发送关闭程序消息?因为我不知道给哪个窗口发?
我还要等待exe给我把消息传回来,告诉我它是关闭还是不关闭
僵哥 2008-06-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zzn007 的回复:]
是权限的问题,Service启动的用户是SYSTEM,exe的用户是当前登陆的用户。
但是,我不能设置为当前的用户启动Service啊,这样的话,钥匙切换用户怎么办啊?
[/Quote]
那就换一种通讯方式。
zzn007 2008-06-25
  • 打赏
  • 举报
回复
是权限的问题,Service启动的用户是SYSTEM,exe的用户是当前登陆的用户。
但是,我不能设置为当前的用户启动Service啊,这样的话,钥匙切换用户怎么办啊?
僵哥 2008-06-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zzn007 的回复:]
现在使用内存共享中,遇到一个问题:
我在主程序与子程序之间使用内存共享没问题,当我在Service和exe之间使用时,内存创建可以,但是在exe中却访问被拒绝
[/Quote]
权限问题,你可以把你的Service设置为你的登录用户来启动
zzn007 2008-06-25
  • 打赏
  • 举报
回复
现在使用内存共享中,遇到一个问题:
我在主程序与子程序之间使用内存共享没问题,当我在Service和exe之间使用时,内存创建可以,但是在exe中却访问被拒绝
zhuminghua 2008-06-24
  • 打赏
  • 举报
回复
子程序不是你做的那就有难度了, 但他们退出的时候肯定会有消息通知windows,主程序得把这个消息接收到
zzn007 2008-06-24
  • 打赏
  • 举报
回复
楼上的,这种方法我想到过。
但是我要关闭一个打开的程序,还是要使用消息来通知,没法用共享内存通知啊。
yuqianyi1974 2008-06-24
  • 打赏
  • 举报
回复
建立一个内存映像文件,让各个exe共享内存数据块
zzn007 2008-06-24
  • 打赏
  • 举报
回复
请问【unsigned 】,子程序都是GUI的,不过都不是我来写,我只负责调用他们。
那就发送一个WM_QUIT到主线程(CreateProcess当中可以得到),这个消息怎么发送,用Sendmessage方法吗?接受的窗口写谁呢?给个例子吧
wywry 2008-06-24
  • 打赏
  • 举报
回复
如果主程序及子程序都是你自己写的,
可以使用TCP/IP或UDP进行各个程序间的通讯。
僵哥 2008-06-24
  • 打赏
  • 举报
回复
要看进程类似,不同的进程会有所差别,如果都是基于GUI的,那就发送一个WM_QUIT到主线程(CreateProcess当中可以得到).
僵哥 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zzn007 的回复:]
请问【unsigned 】,子程序都是GUI的,不过都不是我来写,我只负责调用他们。
那就发送一个WM_QUIT到主线程(CreateProcess当中可以得到),这个消息怎么发送,用Sendmessage方法吗?接受的窗口写谁呢?给个例子吧
[/Quote]
CreateProcess当中有一个ProcessInformation结构,其中就有一个Thread,PostThreadMessage发送过去。
zzn007 2008-06-24
  • 打赏
  • 举报
回复
嗯,那就先解决一下目前的问题:
如何给一个指定的进程发送关闭消息?因为我不知道哪个是它的主窗口的句柄啊,snedmessage怎么写?

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧