#region 标题移动
Point pt;
private void PLTitle_MouseDown(object sender, MouseEventArgs e)
{
pt = Cursor.Position;
}
private void PLTitle_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
{
int px = Cursor.Position.X - pt.X;
int py = Cursor.Position.Y - pt.Y;
this.Location = new Point(this.Location.X + px, this.Location.Y + py);
pt = Cursor.Position;
}
}
#endregion
-
static class Program
-
{
-
/// <summary>
-
/// 应用程序的主入口点。
-
/// </summary>
-
[
-
static void Main()
-
{
-
//0106add 一次打开一个应用程序
-
Process instance = RunningInstance();
-
if (instance != null)
-
{
-
if (instance.MainWindowHandle.ToInt32() == 0) //是否托盘化
-
{
-
MessageBox.Show( "程序已打开并托盘化");
-
return;
-
}
-
//1.2 已经有一个实例在运行
-
HandleRunningInstance(instance);
-
return;
-
}
-
-
Application.EnableVisualStyles();
-
Application.SetCompatibleTextRenderingDefault( false);
-
Application.Run( new Form1());
-
-
}
-
-
-
-
-
-
private static Process RunningInstance()
-
{
-
Process current = Process.GetCurrentProcess();
-
Process[] processes = Process.GetProcessesByName(current.ProcessName);
-
//遍历与当前进程名称相同的进程列表
-
foreach (Process process in processes)
-
{
-
//如果实例已经存在则忽略当前进程
-
if (process.Id != current.Id)
-
{
-
//保证要打开的进程同已经存在的进程来自同一文件路径
-
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == current.MainModule.FileName)
-
{
-
//返回已经存在的进程
-
return process;
-
}
-
}
-
}
-
return null;
-
}
-
//3.已经有了就把它激活,并将其窗口放置最前端
-
private static void HandleRunningInstance(Process instance)
-
{
-
ShowWindowAsync(instance.MainWindowHandle, 1); //调用api函数,正常显示窗口
-
SetForegroundWindow(instance.MainWindowHandle); //将窗口放置最前端
-
}
-
[
-
private static extern bool ShowWindowAsync(System.IntPtr hWnd, int cmdShow);
-
[
-
private static extern bool SetForegroundWindow(System.IntPtr hWnd);
-
-