博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
只能打开一个实例
阅读量:5057 次
发布时间:2019-06-12

本文共 3511 字,大约阅读时间需要 11 分钟。

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
 
1
using
System;
2
 
using
System.Windows.Forms;
3
using
System.Runtime.InteropServices;
4
using
System.Threading;
5
6
7
namespace
OneInstanceOnlyMethodOne
8
{
9
static
class
Program
10
{
11
12
#region
DllImportAttribute
13
14
[DllImport(
"
user32.dll
"
, CharSet
=
CharSet.Unicode)]
15
static
extern
IntPtr FindWindow(
string
className,
string
windowText);
16
17
const
int
SW_HIDE
=
0
;
18
const
int
SW_RESTORE
=
1
;
19
const
int
SW_MAXIMIZE
=
2
;
20
const
int
SW_MINIMIZE
=
3
;
21
const
int
SW_SHOW
=
4
;
22
const
int
SW_SHOWDEFAULT
=
5
;
23
24
///
<summary>
25
///
该函数设置指定窗口的显示状态。
26
///
</summary>
27
///
<param name="handle"></param>
28
///
<param name="flags"></param>
29
///
<returns></returns>
30
[DllImport(
"
user32.dll
"
, CharSet
=
CharSet.Unicode)]
31
static
extern
bool
ShowWindow(IntPtr handle,
int
flags);
32
33
///
<summary>
34
///
该函数将创建指定窗口的线程设置到前台,并且激活该窗口。
35
///
键盘输入转向该窗口,并为用户改各种可视的记号。
36
///
系统给创建前台窗口的线程分配的权限稍高于其他线程。
37
///
</summary>
38
///
<param name="handle"></param>
39
///
<returns></returns>
40
[DllImport(
"
user32.dll
"
, CharSet
=
CharSet.Unicode)]
41
static
extern
bool
SetForegroundWindow(IntPtr handle);
42
#endregion
43
44
///
<summary>
45
///
应用程序的主入口点。
46
///
</summary>
47
[STAThread]
48
static
void
Main()
49
{
50
bool
isCreated;
//
互斥体名称须唯一。
51
using
(Mutex newMutex
=
new
Mutex(
true
,
"
_OneInstanceOnly_
"
,
out
isCreated))
52
{
53
if
(isCreated)
54
{
55
Application.CurrentCulture
=
System.Globalization.CultureInfo.InvariantCulture;
56
Application.EnableVisualStyles();
57
Application.SetCompatibleTextRenderingDefault(
false
);
58
Application.Run(
new
MethodOneMainForm());
59
newMutex.ReleaseMutex();
//
释放互斥体的所属权。
60
}
61
else
62
{
63
string
text
=
string
.Format(
"
“{0}”应用程序已经运行。
"
, AppDomain.CurrentDomain.FriendlyName);
64
MessageBox.Show(text,
"
系统提示!
"
, MessageBoxButtons.OK, MessageBoxIcon.Warning);
65
66
//
查找之前打开的实例
67
IntPtr handle
=
FindWindow(
null
,
"
MethodOneMainForm
"
);
68
if
(handle
!=
IntPtr.Zero)
69
{
70
//
ShowWindow(handle, 1);
71
ShowWindow(handle, SW_RESTORE);
72
SetForegroundWindow(handle);
73
}
74
}
75
}
76
}
77
}
78
}

还有另外一种方法:

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
 
1
using
System;
2
using
System.Runtime.InteropServices;
3
using
System.Windows.Forms;
4
using
System.Diagnostics;
5
6
namespace
OneInstanceOnlyMethodTwo
7
{
8
static
class
Program
9
{
10
[DllImport(
"
user32.dll
"
, EntryPoint
=
"
SetForegroundWindow
"
)]
11
public
static
extern
int
SetForegroundWindow(IntPtr hwnd);
12
[DllImport(
"
user32.dll
"
, EntryPoint
=
"
SendMessage
"
)]
13
public
static
extern
int
SendMessage(IntPtr hwnd,
int
wMsg,
int
wParam,
int
lParam);
14
public
const
int
WM_SYSCOMMAND
=
0x112
;
15
public
const
int
SC_RESTORE
=
0xF120
;
16
17
18
19
///
<summary>
20
///
应用程序的主入口点。
21
///
</summary>
22
[STAThread]
23
static
void
Main()
24
{
25
26
Process cur
=
Process.GetCurrentProcess();
27
foreach
(Process p
in
Process.GetProcesses())
28
{
29
if
(p.Id
==
cur.Id)
30
continue
;
31
if
(p.ProcessName
==
cur.ProcessName)
32
{
33
string
text
=
string
.Format(
"
“{0}”已经运行。
"
, AppDomain.CurrentDomain.FriendlyName);
34
MessageBox.Show(text,
"
系统提示!
"
, MessageBoxButtons.OK, MessageBoxIcon.Warning);
35
36
SetForegroundWindow(p.MainWindowHandle);
37
SendMessage(p.MainWindowHandle, WM_SYSCOMMAND, SC_RESTORE,
0
);
38
return
;
39
}
40
}
41
Application.EnableVisualStyles();
42
Application.SetCompatibleTextRenderingDefault(
false
);
43
Application.Run(
new
MethodTwoMainForm());
44
}
45
}
46
}

转载于:https://www.cnblogs.com/21vicky21/archive/2011/04/02/2003014.html

你可能感兴趣的文章
Word Break II
查看>>
UVA 11082 Matrix Decompressing 矩阵解压(最大流,经典)
查看>>
jdk从1.8降到jdk1.7失败
查看>>
一些关于IO流的问题
查看>>
mongo备份操作
查看>>
8 -- 深入使用Spring -- 3...1 Resource实现类InputStreamResource、ByteArrayResource
查看>>
硬件笔记之Thinkpad T470P更换2K屏幕
查看>>
一个关于vue+mysql+express的全栈项目(六)------ 聊天模型的设计
查看>>
【知识库】-数据库_MySQL 的七种 join
查看>>
.net 写文件上传下载webservice
查看>>
noSQL数据库相关软件介绍(大数据存储时候,必须使用)
查看>>
iOS开发——缩放图片
查看>>
HTTP之URL的快捷方式
查看>>
满世界都是图论
查看>>
配置链路聚合中极小错误——失之毫厘谬以千里
查看>>
代码整洁
查看>>
蓝桥杯-分小组-java
查看>>
Java基础--面向对象编程1(类与对象)
查看>>
Android Toast
查看>>
iOS开发UI篇—Quartz2D使用(绘制基本图形)
查看>>