可以用一个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跟着启动
[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跟着启动
楼上的做法我觉得不是winamp达到的效果。其实很简单的阿,启动A的时候,A判断B打开了没有,如果没有就打开B。B开打和退出的时候都不判断,A退出的时候判断B在不在,B在就关闭B先。
在A程序关闭中,判断,B线程有没有开启;如果有,则关闭;
兄弟,看清楚题目,楼主说A是外部程序(我理解如FlashGet,总之是别人已经写好的)
B才是他自己写的程序。>>>>“其实很简单的阿,启动A的时候,A判断B打开了没有,如果没有就打开B。”
如何判断?难道所有的外部程序都有预留接口?
学习,请教
然后通过Timer实时检测A 根据楼主的要求处理B当然,还会有其他的办法,譬如用钩子
.net支持钩子比较费劲
可以帮你找到你想要的东西
其原理大概是:当你打开一个可执行文件时,如果通过改注册表,系统会先运行您写的一个DLL文件,您可以在你DLL里面做一个判断,如果为A的话,就启动B,因为B是你写的,所以你可以在里面加HOOK又或加TIMER判断A是否关闭.
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.就这么简单///
可以
使用WMI,System.Management命名空间下的类.
或使用Process类。另一种方法可以使用外部文件,如文本文件,数据库,xml和数据库等,保存程序信息来控制程序结束。
谢谢楼上的两位兄台
ysjhuuuu(风蓝) 兄,你好,我用了你给的方法试了一会儿还是不行,不知你能否给个例子出来看看,谢谢了