唯一のインスタンス_単一のオープンプログラムは、現在のディスプレイのメインプログラムを起動するために再び開かれている場合




参考https://www.jb51.net/article/75156.htm



使用 System.Runtime.InteropServicesを、
 使用したSystem.Diagnosticsを、
 使用するSystem.Reflectionと、名前空間システム
{ / * 
     *唯一のインスタンス単一のオープン_ _ 
     * https://www.jb51.net/article/75156.htm 
     * 
     * 
     *直接交換法を用いて
        、静的な無効メイン(){ 
            Application.EnableVisualStylesを(); 
            Application.SetCompatibleTextRenderingDefaultを(falseに); 
            System.Diagnostics.Process P = OneAppStartup.GetInstance; 
            IF(P == NULL){ 
               //オブジェクトプログラム
                のForm1 FRM Form1の新しい新=(); 
                Application.Run(新しい新規のForm1())。



    




            他{} 
                OneAppStartup.ShowInstance(P); 
            } 
        } 

     * 
     * 
     * / 
    クラス OneAppStartup 
    { /// <要約> ///この関数はウィンドウは異なるスレッドの表示状態によって生成される設定します。/// </要約> ///ます。<param name = "のhWnd">ウィンドウハンドル</ param>の/// < "ncmdshowための" PARAM名前=>を指定する方法の表示窓。許可された値の一覧を表示するには、説明セクションShowWlndow機能を参照してください。</ PARAM> /// <戻り値>本来の機能であれば、可視、戻り値はゼロであり、本来隠れ機能場合、戻り値はゼロです。</戻り値> 
        [DLLIMPORT( " User32.dllの ")]
         プライベート静的にextern BOOL ShowWindowAsync(のIntPtr hWndを、int型 ncmdshow用);
        
        
        
        
        
        
           
        ///この関数は、スレッドがフォアグラウンドに指定されたウィンドウを設定し、ウィンドウをアクティブに作成されます。キーボード入力ウィンドウをステアリング、そしてユーザーのために、様々な視覚的なマークを変更します。フォアグラウンドウィンドウシステムは、わずかに高い他のスレッドよりスレッド割り当てられた権限を作成します。
        /// </要約> 
        ///ます。<param name =「hWndは」>が活性化し、最前面ウィンドウのハンドルに転送されます。</ PARAM> 
        /// <戻り値>ウィンドウが前面に設定されている場合、戻り値はゼロであり、フロントウィンドウが設定されていない場合、戻り値はゼロです。</戻り> 
        [( "DLLIMPORT User32.dllの ")]
         プライベート 静的 にextern  BOOL SetForegroundWindow(のIntPtrのhWnd);
         プライベート CONST  INT WS_SHOWNORMAL = 1; /// <要約> ///は、実行中のインスタンスを取得するには、インスタンスを実行していませんNULLを返す; /// </要約> パブリック静的プロセスでGetInstance 
        { GET {


        
        
        
         
             
                プロセス電流=プロセス。
                プロセス[]プロセス= Process.GetProcessesByName(current.ProcessName)。foreachの(処理工程における処理){
                     場合(process.Id!= current.Id){
                         場合(Assembly.GetExecutingAssembly()。Location.Replace( " / "、 " \\ ")== current.MainModule.FileName){
                             戻り値のプロセス; 
                        } 
                    } 
                } 戻りヌル
            } 
        } /// <要約> ///显示已运行的程序。/// </要約> 公衆
                
                 


        
        
        
         静的 ボイド ShowInstance(プロセスインスタンス)
        { 
            ShowWindowAsync(instance.MainWindowHandle、WS_SHOWNORMAL); //ディスプレイ、コメントアウト 
            SetForegroundWindow(instance.MainWindowHandle);       //プット遠位 
        } 
    } 
}

おすすめ

転載: www.cnblogs.com/xe2011/p/12606308.html