| [C#] |
| public static Process RunningInstance() |
| { |
| Process current = Process.GetCurrentProcess(); |
| Process[] processes = Process.GetProcessesByName (current.ProcessName); |
| //Loop through the running processes in with the same name |
| foreach (Process process in processes) |
| { |
| //Ignore the current process |
| if (process.Id != current.Id) |
| { |
| //Make sure that the process is running from the exe file. |
| if (Assembly.GetExecutingAssembly().Location.Replace("/", "//") == current.MainModule.FileName) |
| { |
| //Return the other process instance. |
| return process; |
| } |
| } |
| } |
| //No other instance was found, return null. |
| return null; |
| } |
| [VB.NET] |
| Public Shared Function RunningInstance() As Process |
| Dim current As Process = Process.GetCurrentProcess() |
| Dim processes As Process() = Process.GetProcessesByName(current.ProcessName) |
| 'Loop through the running processes in with the same name |
| Dim process As Process |
| For Each process In processes |
| 'Ignore the current process |
| If process.Id <> current.Id Then |
| 'Make sure that the process is running from the exe file. |
| If [Assembly].GetExecutingAssembly().Location.Replace("/", "/") = current.MainModule.FileName Then |
| 'Return the other process instance. |
| Return process |
| End If |
| End If |
| Next process |
| 'No other instance was found, return null. |
| Return Nothing |
| End Function 'RunningInstance |
如果检测到已有窗体实例,将此实例显示出来参考:
| [STAThread] static void Main() { //Get the running instance. Process instance = RunningInstance(); if (instance == null) { //There isn't another instance, show our form. Application.Run (new Form2()); } else { //There is another instance of this process. HandleRunningInstance(instance); } } public static Process RunningInstance() { Process current = Process.GetCurrentProcess(); Process[] processes = Process.GetProcessesByName (current.ProcessName); //Loop through the running processes in with the same name foreach (Process process in processes) { //Ignore the current process if (process.Id != current.Id) { //Make sure that the process is running from the exe file. if (Assembly.GetExecutingAssembly().Location.Replace("/", "//") ==current.MainModule.FileName) { //Return the other process instance. return process; } } } //No other instance was found, return null. return null; } public static void HandleRunningInstance(Process instance) { //Make sure the window is not minimized or maximized ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL); //Set the real intance to foreground window SetForegroundWindow (instance.MainWindowHandle); } [DllImport("User32.dll")] private static extern bool ShowWindowAsync( IntPtr hWnd, int cmdShow); [DllImport("User32.dll")] private static extern bool SetForegroundWindow(IntPtr hWnd); private const int WS_SHOWNORMAL = 1 |
博客涉及Assembly和VB.NET相关信息技术内容,可能包含exe、function等方面知识,但具体内容未给出。

被折叠的 条评论
为什么被折叠?



