如何编写c#代码,让程序只运行一个实例,如果程序已经存在则显示该程序

基本要求:1.程序只能运行一个实例。2.如果程序已经存在,且最小化,则还原那个程序。3.如果程序已经存在,且不是最小化(最大化或正常状态),则显示(注意:不是还原!)那个... 基本要求:
1.程序只能运行一个实例。
2.如果程序已经存在,且最小化,则还原那个程序。
3.如果程序已经存在,且不是最小化(最大化或正常状态),则显示(注意:不是还原!)那个程序。
4.最好不要使用win32的API。
5.可以使用注册表或者xml纪录状态。

尝试过的方法:
1.互斥法:使用mutex貌似无法实现上面2和3两条要求
2.进程法:虽然可以使用Win32的API中的
ShowWindowAsync(InPtr Process,1)
来显示,但是,如果原窗口最大化,则会还原窗口而非仅仅显示
展开
 我来答
yp227
2009-09-11 · TA获得超过538个赞
知道小有建树答主
回答量:226
采纳率:100%
帮助的人:96.1万
展开全部
[DllImport("user32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
[DllImport("user32.dll")]
private static extern bool IsIconic(IntPtr hWnd);
private const int SW_RESTORE = 9;

public void RaiseOtherProcess()
{
Process proc = Process.GetCurrentProcess();
Process.GetProcesses();
foreach (Process otherProc in
Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName))
{
//ignore "this" process
if (proc.Id != otherProc.Id)
{
// Found a "same named process".
// Assume it is the one we want brought to the foreground.
// Use the Win32 API to bring it to the foreground.
IntPtr hWnd = otherProc.MainWindowHandle;
if (IsIconic(hWnd))
{
ShowWindowAsync(hWnd, 9);
}
SetForegroundWindow(hWnd);
break;
}
}
}
还是用mutex实现互斥。
当互斥发生时调用以上代码,实现:
2.如果程序已经存在,且最小化,则还原那个程序。
3.如果程序已经存在,且不是最小化(最大化或正常状态),则显示(注意:不是还原!)那个程序。
其实你主要是不知道可以用这个方法:SetForegroundWindow(hWnd);
来显示程序。
HTLbd2008
2009-09-11 · TA获得超过248个赞
知道小有建树答主
回答量:96
采纳率:0%
帮助的人:88.8万
展开全部
就是千千静听那个效果?

虽然没做过有个思路 不过要用api就是了 参考下:

先用互斥法 如果程序以运行 则用sendmessage给程序发个消息 前提要在程序中重写 wndpro方法 在此方法中作出判断 并执行(也就是你说的第二三个条件) sendmessage中的句柄可以用
System.Diagnostics.Process.GetProcessesByName(进程名)[0].MainWindowHandle获得。

用注册表和xml 不知道会不会出错,记录数据准确性没保证 人家直接把你线程给结束掉 你奈他何(个人意见,高手请无视)。

参考资料: 原创回答

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
geto1080
2009-09-11 · TA获得超过320个赞
知道小有建树答主
回答量:1359
采纳率:100%
帮助的人:529万
展开全部
貌似很麻烦,顶一下……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
2008_knowledge
2009-09-11 · TA获得超过126个赞
知道小有建树答主
回答量:348
采纳率:0%
帮助的人:151万
展开全部
听起来很有深度!学习下!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
观点菌
2009-09-11 · TA获得超过8080个赞
知道小有建树答主
回答量:1395
采纳率:0%
帮助的人:553万
展开全部
有深度。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ghq_sea
2009-09-11 · TA获得超过125个赞
知道小有建树答主
回答量:242
采纳率:0%
帮助的人:178万
展开全部
这个,,, 真不会!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式