最近看到别人代码中一个很好的功能类,该类是一个Win32 API实例类,该类功能包括:同一程序禁止启动多次;获取任意窗体;恢复窗体状态;设置窗体焦点等。
该类很实用,与大家分享一下:
1 /// Summary description for ProcessUtils. 2 public static class ProcessUtils 3 { 4 private static Mutex mutex = null ; 5 6 /// Determine if the current process is already running 7 public static bool ThisProcessIsAlreadyRunning() 8 { 9 // Only want to call this method once, at startup. 10 Debug.Assert(mutex == null ); 11 12 // createdNew needs to be false in .Net 2.0, otherwise, if another instance of 13 // this program is running, the Mutex constructor will block, and then throw 14 // an exception if the other instance is shut down. 15 bool createdNew = false ; 16 17 mutex = new Mutex( false , Application.ProductName, out createdNew); 18 19 Debug.Assert(mutex != null ); 20 21 return ! createdNew; 22 } 23 24 [DllImport( " user32.dll " , SetLastError = true )] 25 static extern IntPtr FindWindow( string lpClassName, string lpWindowName); 26 27 [DllImport( " user32.dll " )] 28 [ return : MarshalAs(UnmanagedType.Bool)] 29 static extern bool SetForegroundWindow(IntPtr hWnd); 30 31 [DllImport( " user32.dll " )] 32 static extern bool IsIconic(IntPtr hWnd); 33 34 [DllImport( " user32.dll " )] 35 static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); 36 37 const int SW_RESTORE = 9 ; 38 39 [DllImport( " user32.dll " )] 40 static extern IntPtr GetLastActivePopup(IntPtr hWnd); 41 42 [DllImport( " user32.dll " )] 43 static extern bool IsWindowEnabled(IntPtr hWnd); 44 45 /// Set focus to the previous instance of the specified program. 46 public static void SetFocusToPreviousInstance( string windowCaption) 47 { 48 // Look for previous instance of this program. 49 IntPtr hWnd = FindWindow( null , windowCaption); 50 51 // If a previous instance of this program was found... 52 if (hWnd != null ) 53 { 54 // Is it displaying a popup window? 55 IntPtr hPopupWnd = GetLastActivePopup(hWnd); 56 57 // If so, set focus to the popup window. Otherwise set focus 58 // to the program's main window. 59 if (hPopupWnd != null && IsWindowEnabled(hPopupWnd)) 60 { 61 hWnd = hPopupWnd; 62 } 63 64 SetForegroundWindow(hWnd); 65 66 // If program is minimized, restore it. 67 if (IsIconic(hWnd)) 68 { 69 ShowWindow(hWnd, SW_RESTORE); 70 } 71 } 72 } 73 }
转载于:https://www.cnblogs.com/wuhenke/archive/2010/04/13/1711380.html
相关资源:数据结构—成绩单生成器