可以用一个Timer来定时查看,这样简单些:
[System.Runtime.InteropServices.DllImport("user32.dll")]
private static extern IntPtr FindWindow(string strclassName, string strWindowName);private void timer1_Tick(object sender, System.EventArgs e)
{
string FormTitle = "无标题 - 记事本";
IntPtr hWnd = FindWindow(null, FormTitle);
if (hWnd != IntPtr.Zero)
{
Console.WriteLine("程序已启动!");
}
}当Timer检测到A(外部程序)被用户打开,那么B跟着启动

解决方案 »

  1.   

    要做到这样的效果,这两个程序之间一定有自己的协议的,而不可能是两个毫不相干的两个人写的程序。
    楼上的做法我觉得不是winamp达到的效果。其实很简单的阿,启动A的时候,A判断B打开了没有,如果没有就打开B。B开打和退出的时候都不判断,A退出的时候判断B在不在,B在就关闭B先。
      

  2.   

    楼上两位好,我觉得是否可以这样去思考呢?就好像一个病毒一样将将一些代码写入EXE文件中。这些代码就负责启动自己的程序。
      

  3.   

    在A程序启动中,判断,B线程有没有开启,如果没有有则开启;
    在A程序关闭中,判断,B线程有没有开启;如果有,则关闭;
      

  4.   

    >>>>shuker(我是一只小花猪) 
    兄弟,看清楚题目,楼主说A是外部程序(我理解如FlashGet,总之是别人已经写好的)
    B才是他自己写的程序。>>>>“其实很简单的阿,启动A的时候,A判断B打开了没有,如果没有就打开B。”
    如何判断?难道所有的外部程序都有预留接口? 
    学习,请教
      

  5.   

    我的想法是加入第三方的检测程序,他可能是一个小的Windows Service
    然后通过Timer实时检测A 根据楼主的要求处理B当然,还会有其他的办法,譬如用钩子
      

  6.   

    我想用HOOK拦截A程序的消息.应该可以做出这种效果.
      

  7.   

    用钩子无疑.
    .net支持钩子比较费劲
      

  8.   

    我想还是别的程序需要提供接口,它要事先检查其插件路径再加载。如果没有接口的话,你只能首先启动自己的程序,再hook或监视process等等
      

  9.   

    你搜一下Windows的外壳扩展或Shell Extensions
    可以帮你找到你想要的东西
    其原理大概是:当你打开一个可执行文件时,如果通过改注册表,系统会先运行您写的一个DLL文件,您可以在你DLL里面做一个判断,如果为A的话,就启动B,因为B是你写的,所以你可以在里面加HOOK又或加TIMER判断A是否关闭.
      

  10.   

    程序随机启动的新方法
    2004年11月27日17:42星期六 [病毒之又见病毒]
    看Windows内部揭密时,发现在一个像文件类型关联一样的东东用来作病毒或木马的自启动是最好不过了:)方法如下:假设你想程序A.exe执行前就运行你的程序B.exe,则可以注册表[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options]下建一个A.exe的项,再在A.exe下建一个Debugger的键,键值就是你的程序B.exe的全路径。OK.就这么简单///
      

  11.   

    在一个程序结束前检查系统进程,如果找到你需要结束的程序进程,就结束他,再退出当前程序。
    可以
    使用WMI,System.Management命名空间下的类.
    或使用Process类。另一种方法可以使用外部文件,如文本文件,数据库,xml和数据库等,保存程序信息来控制程序结束。
      

  12.   


    谢谢楼上的两位兄台
    ysjhuuuu(风蓝) 兄,你好,我用了你给的方法试了一会儿还是不行,不知你能否给个例子出来看看,谢谢了