在自己的进程中启动外部exe

时间:2011-02-25 08:15:47

标签: winapi windows-7 vb6 executable taskbar

我有一个VB6可执行文件,我们用它作为真实程序的Starter可执行文件。

问题是Windows 7在任务栏中为新进程显示一个新图标,而不是我点击启动我的程序的那个(当然,因为启动程序exe已经结束,而新的exe似乎是一个新的计划。)

目前我使用Shell对象启动另一个exe。是否有更好的方法从vb6执行此操作,可能是通过使用本机C函数,声明在当前进程中启动exe,而不会生成新进程?

修改

感谢 atzz 获取有关应用程序模型ID的重要信息。我现在有一个快捷方式,我的应用程序启动器具有良好定义的ID,我的应用程序也在启动时设置ID,现在可以从工具栏中的右侧图标精美访问。但是,有两个问题仍然存在:

  1. 该应用程序是一个以Exe4J开头的Java应用程序,在Exe4J显示启动画面之前我没有机会设置AppID,因此在显示启动画面时,任务栏中有第二个图标。

  2. 如果我没有手动将我的入门应用程序图标从桌面拖到工具栏,而是使用我的应用程序图标并将其设置为“粘性”,则真正的应用程序会被粘贴,而不是启动器。

  3. 如果我的启动器会在自己的进程中启动应用程序,那么这两个问题都会得到很好的解决。我听说使用exec()而不是fork()来实现linux程序...是否有类似于windows的东西?

2 个答案:

答案 0 :(得分:5)

我相信有一种方法可以通过Windows 7任务栏API完成您所需要的工作,但我自己从未这样做过,因此我没有清楚地记得我在这个主题上所阅读的内容。查看应用程序ID 概念。

一些链接:

答案 1 :(得分:2)

如果问题是图标,为什么不给两个程序相同的图标(和相同的App.Title)。然后,用户将无法区分两个任务栏条目之间的区别。据推测,它们不是同时可见的。

或者将您的入门应用设置为不显示在任务栏中(设计视图中的Form属性ShowInTaskbar = False)