一个Win32 API实例类(代码收集)

it2024-11-17  24

  最近看到别人代码中一个很好的功能类,该类是一个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

相关资源:数据结构—成绩单生成器
最新回复(0)