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() { } } }