using System;
using System.Data.SqlTypes;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using 名单编辑器.Properties;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
namespace 名单编辑器
{
internal static class Program
{
///
/// 应用程序的主入口点。
///
[STAThread]
static void Main()
{
Process instance = RunningInstance();
if (instance != null) //进程中已经有一个实例在运行
{
HandleRunningInstance(instance);
}
else //没有实例在运行
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
#region 在进程中查找是否已经有实例在运行
//确保程序只运行一个实例
public static Process RunningInstance()
{
Process currentProcess = Process.GetCurrentProcess();
Process[] Processes = Process.GetProcessesByName(currentProcess.ProcessName);
//遍历与当前进程名称相同的进程列表
foreach (Process process in Processes)
{
//如果实例已经存在,则忽略当前进程
if (process.Id != currentProcess.Id)
{
//保证要打开的进程 同 已经存在的进程来自同一个文件路径
if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") == currentProcess.MainModule.FileName)
{
//返回另一个进程实例
return process;
}
}
}
return null; //找不到其他进程实例,返回nulL。
}
#endregion
#region 调用Win32API,进程中已经有一个实例在运行,激活其窗口并显示在最前端
private static void HandleRunningInstance(Process instance)
{
//MessageBox.Show("已经在运行!", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
ShowWindowAsync(instance.MainWindowHandle, SW_SHOWNOMAL);//调用API函数,正常显示窗口
SetForegroundWindow(instance.MainWindowHandle);//将窗口放置在最前端
}
#endregion
///
/// 该函数设置由不同线程产生的窗口的显示状态
///
/// 窗口句柄
/// 指定窗口如何显示。查看允许值列表
/// 如果窗口原来可见,返回值为非零;如果窗口原来被隐藏,返回值为零
[DllImport("User32.dll")]
private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
private const int SW_SHOWNOMAL = 1;
///
/// 该函数将创建指定窗口的线程设置到前台,并且激活该窗口
/// 系统给创建前台窗口的线程分配的权限稍高于其他线程。
///
/// 将被激活并被调入前台的窗口句柄
/// 如果窗口设入了前台,返回值为非零;如果窗口未被设入前台,返回值为零
[DllImport("User32.dll")]
private static extern bool SetForegroundWindow(IntPtr hWnd);
public static void Save()
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyComputer);
saveFileDialog.Filter = "CaptB点名器名单文件(*.cbcf)|*.cbcf|文本文档(*.txt)|*.txt";
saveFileDialog.Title = Resources.SaveFileDialogTitle;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
Form1 form1 = new Form1();
string s = "";
for (int m = 0; m < form1.listView1.Items.Count; m++)
{
s = form1.listView1.Items[m].Text;
s += "\r\n";
}
using (StreamWriter sw = new StreamWriter(saveFileDialog.FileName))
{
sw.WriteLine(s);
}
MessageBox.Show("成功保存文件:" + saveFileDialog.FileName);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, Resources.SaveErrTitle, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
public static void New()
{
Form1 form1 = new Form1();
form1.toolStripStatusLabel5.Text = "a";
MessageBox.Show("a");
}
public static void Open()
{
}
}
}