如何实现只运行程序的一个实例,并且由此实例负责以后关联文件的打开?
RT类似于MP3播放器,点击不同mp3文件,不会弹出多个实例,单只有一个窗体负责处理。
--------------------编程问答-------------------- 用 Process.GetProcessesByName() 方法查找是否已经打开了程序。 如果打开了,激活之即可。 --------------------编程问答-------------------- 谢谢楼上的回答,
但Process.GetProcessesByName() 方法只能检测进程中该ID的程序是否存在,
现在的问题是如果存在了一个之前打开的实例,那么如何把这次双击的文件名发送给它。
所以请问楼上的“激活之”是怎么办到的? --------------------编程问答-------------------- 激活就是让他获得焦点,到前台来显示
--------------------编程问答-------------------- 是我的问题没有讲清楚吗???
是我的问题没有讲清楚吗???
--------------------编程问答-------------------- 当前正在放mp3,我双击一另一个mp3文件,当前实例播放的mp3立即停止,播放新文件。
怎样接受后来打开的文件呢, 如何把第二次双击的文件名发送给第一个实例。 --------------------编程问答-------------------- #region 确保只有一个实例
public static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName(current.ProcessName);
//遍历与当前进程名称相同的进程列表
foreach (Process process in processes)
{
//Ignore the current process
if (process.Id != current.Id)
{
//Make sure that the process is running from the exe file.
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
{
//Return the other process instance.
return process;
}
}
}
return null;
}
public static void HandleRunningInstance(Process instance)
{
// MessageBox.Show("该应用系统已经在运行!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
ShowWindowAsync(instance.MainWindowHandle, 1); //调用api函数,正常显示窗口
SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端。
}
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(System.IntPtr hWnd, int cmdShow);
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(System.IntPtr hWnd);
#endregion
调用:
Process instance = RunningInstance();
if (instance == null)
{
//打开程序
}
else
{
HandleRunningInstance(instance);
} --------------------编程问答--------------------
给打开的实例动态传递参数 --------------------编程问答-------------------- 播放器有一个有一个关联文件类型在注册表里吧
--------------------编程问答-------------------- 地址: zgke博客
文件关联参考
http://blog.csdn.net/zgke/archive/2008/12/19/3557016.aspx
保持同一个进程参考
http://blog.csdn.net/zgke/archive/2009/07/29/4390545.aspx
补充:.NET技术 , C#